struts2(一)

Struts2框架解析
本文介绍了Struts2框架的基本概念,包括其MVC设计模式、核心组件如拦截器及OGNL表达式等。同时深入探讨了Struts2的配置文件如web.xml、struts.xml的配置方法,并给出了具体示例。

struts2:
             Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构。最初,是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后,Webwork框架和Struts社区联合创造了现在流行的Struts2框架。是实现MVC设计模式的第二代web应用程序的框架,新的特性:拦截器,注解代替XML配置,支持对象导航语言OGNl可重用可变更的uI组件API,

    MVC模式:模型,视图,控制器,分别通过动作,结果,过虑分配器(FilterDispatcher)
        客户端请求——————>filterDispatcher-->动作模型---->结果视图--->客户端浏览器        控制器---filterDispatcher
                控制器检查每一个传入的请求,决定那个动作处理这个请求,可以通过XMl和注解来配置完成
        模型----动作
                动作组件:将业务逻辑调用封装到一个独立的单元,动作是一个数据传输场所,
        视图----结果
               将应用程序的状态装换为一种用户可以交互的可视化得表示。结果组件提供了整洁的封装,将处理的控制转交给客户 写响应对象,
      新的特性:
             拦截器:提供一种在其中定义不同的工作流和切向任务的架构组件,每一个动作都有一组拦截器与之相互关联, 可以发生在动作之前和动作之后。
             OGNL:是一种访问储存的中央储存库的数据工具,允许引用或操作ValueStack(储存区域“便签”)中的数据的表达式语言
            ActionContext包含所有数据构成了动作执行环境,会话,请求,映射,valueStack.作为ValueStack和ThreadLocal储存场所,调用动作-------拦截器(OGNL)----->动作-------->结果---------ActionContext(oGNL操作,(valueStack,请求,会话。。。))----->结果
    struts2动作:为了满足对框架的职责任何类都可以成为动作,给定请求封装,从请求到视图框架自动数据传输作为数据的携带者,动作必须帮助框架决定那个结果应该呈现请求响应返回的视图。1.动作封装工作单元,2,动作为数据提供场所。须把每一个数据实现为javabean属性3.动作为结果路由选择返回控制字符串返回到A视图中Action是用来完成动作需要继承ActionSupport来和实现模型驱动就是action在将数据从请求传递到视图(无论是JSP还是其他类型的结果)方面起着重要作用。第二,action必须协助框架确定哪个结果应该呈现在响应请求的视图中。
    配置文件:
        web.xml配置文件是一种J2EE配置文件,决定servlet容器的HTTP元素需求如何进行处理。
        它严格来说不是一个Struts2 配置文件,但它是Struts2 运作所需要进行配置的文件。
        正如前面所讨论的,这个文件为每个web应用程序提供接入点。在部署描述符(web.xml)中,
        Struts2 应用程序的接入点将会定义为一个过滤器。因此我们将在web.xml里定义一个FilterDispatcher类的接入点,
        而这个web.xml文件需要在WebContent/WEB-INF文件夹下创建。
            web.xml主要为了配置:
                  

                   <filter>
                      <filter-name>struts2</filter-name>
                      <filter-class>
                     org.apache.struts2.dispatcher.FilterDispatcher
                      </filter-class>
                   </filter>

                   <filter-mapping>
                      <filter-name>struts2</filter-name>
                      <url-pattern>/*</url-pattern>
                   </filter-mapping>


        struts.xml文件包含有随着Actions的开发你将要修改的配置信息。它可用于覆盖应用程序的默认设置,
        例如:struts.devMode=false 以及其他定义为属性文件的设置。这个文件可在WEB-INF/classes文件夹下创建。
        让我们来看一下在前一章节中阐述的Hello World示例里创建的struts.xml文件。
    ·        struts.xml配置如下:
              

 <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE struts PUBLIC
                   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
                   "http://struts.apache.org/dtds/struts-2.0.dtd">
                <struts>
                   <constant name="struts.devMode" value="true" />
                   <package name="helloworld" extends="struts-default">
                     
                      <action name="hello" 
                        class="cn.w3cschool.struts2.HelloWorldAction" 
                        method="execute">
                        <result name="success">/HelloWorld.jsp</result>
                      </action>
                      <-- more actions can be listed here -->

                   </package>
                   <-- more packages can be listed here -->

                </struts>


        其中有<package>标签为了声明不同的包有下面属性:
            name:(必需)    为package的唯一标识,
            extends:指定package继承另一package的所有配置。通常情况下,我们使用struts-default作为package的基础。
            abstract:定义package为抽象的。如果标记为true,则package不能被最终用户使用。
            namespace:Actions的唯一命名空间
            <constant>标签以及name和value属性将用于覆盖default.properties中定义的任一属性,就像我们设置的struts.devMode属性一样。
            设置struts.devMode属性允许我们在日志文件中查看更多的调试消息。我们定义<action>标签对应于我们想要访问的每个URL,并且使用execute()方法定义一个访问相应的URL时将要访问的类。 Results(结果)确定在执行操作后返回到浏览器的内容,而从操作返回的字符串应该是结果的名称。   Results按上述方式配置,或作为“全局”结果配置,可用于包中的每个操作。 Results有name和type属性可选,默认的name值是“success”。Struts.xml文件可以随着时间的推移而增长,因此通过包打破它是使它模块化的一种方式,

但struts提供了另一种模块化struts.xml文件的方法,  你可以将文件拆分为多个xml文件,并用以下方式导入它们。
                <struts>
                     <include file="my-struts1.xml"/>
                     <include file="my-struts2.xml"/>
                </struts>
        struts.properties文件
            这个配置文件提供了一种机制来改变框架的默认行为。struts.properties配置文件中包含的所有属性也可以在web.xml中配置使用init-param, 以及在struts.xml配置文件中使用constant标签。 但如果你想保持事件独立以及保留更多struts细节, 那么你可以在WEB-INF/classes文件夹下创建这个文件。struts.properties文件中配置的值将覆盖

          default.properties中配置的默认值,这些值包含在struts2-core-x.y.z.jar分布中

Action动作:
           Struts2中actions的唯一要求是必须有一个无参数方法返回String或Result对象,并且必须是POJO。如果没有指定no-argument方法,则默认是使用execute()方法。
            动态获取方法:用驱动模型封装方法:
                          public class UserActionModel extends ActionSupport implements ModelDriven<User>{}
           动态方法调用:
          

  <struts>
                <!-- 配置动态方法是否开启的常量 默认为false的
                <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>-->
                <package name="dynamic" extends="struts-default" namespace="/dynamic">
                    <action name="DemoAction*" class="com.leo.struts2.dynamic.DemoAction">
                        <result name="success">/struts/index.jsp</result>
                    </action>
                    
                </package>
            </struts>        


        访问时用这个来访问哪一个方法:DemoAction!add;
        另一种配置方法是参数占位符来访问:
Action配置:
            

<struts>
                <!-- 配置动态方法是否开启的常量 默认为false的
                <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>-->
                <package name="dynamic" extends="struts-default" namespace="/dynamic">
                <!-- 动态方法调用 使用{1}取出方法通过*来匹配符好-->
                    <action name="DemoAction_*" class="com.leo.struts2.dynamic.DemoAction"
                            method="{1}">
                        <!--  result是默认为success;type:dispatcher;转发
                        class:默认为com.opensymphony.xwork2.ActionSupport;
                        -->
                        <result name="success">/struts/index.jsp</result>
                    </action>
                </package>
            </struts>

第一个Action

package com.leo.struts2;

import com.opensymphony.xwork2.ActionSupport;
/**
 * action普通的Java类
 * @author leoi555
 *
 */
public class HelloWordAction extends ActionSupport{
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return "SUCCESS";
	}

	public HelloWordAction() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

struts.xml的配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="false" />
   <!-- name必须元素,为package唯一标使,extends是制定继承另一个包的配置 -->
   <package name="helloworld" extends="struts-default" namespace="hello" >
     <action name="index">
     	<result>/index.jsp</result>
     </action>
      <!-- 标准的使用:-->
      <action name="Hello" 
            class="com.leo.struts2.HelloWordAction"
            method="execute">
            <result name="SUCCESS">/struts/Hello.jsp</result>
      </action>
     </package>
</struts>

在struts.xml中配置的属性有:

           其中有<package>标签为了声明不同的包有下面属性:
            name:(必需)    为package的唯一标识,
            extends:指定package继承另一package的所有配置。通常情况下,我们使用struts-default作为package的基础。
            abstract:定义package为抽象的。如果标记为true,则package不能被最终用户使用。
            namespace:Actions的唯一命名空间
            <constant>标签以及name和value属性将用于覆盖default.properties中定义的任一属性,就像我们设置的struts.devMode属性一样。 设置struts.devMode属性允许我们在日志文件中查看更多的调试消息。  我们定义<action>标签对应于我们想要访问的每个URL,并且使用execute()方法定义一个访问相应的URL时将要访问的类。Results(结果)确定在执行操作后返回到浏览器的内容,而从操作返回的字符串应该是结果的名称。  Results按上述方式配置,或作为“全局”结果配置,可用于包中的每个操作。 Results有name和type属性可选,默认的name值是“success”。同时需要在web.xml配置如下信息:这是声明过滤器类:注意:在strut2.0使用过滤器类为:

<filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
 </filter-class>

在struts2.1以后不推荐使用这个类而是使用以下的:

<filter-class>
         org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
 </filter-class>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Struts2Test</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

 

通过以上的配置然后就可以通过网页访问这个action就可以出现Hello.jsp的页面,这只是简单的struts2的入门程序,在这里使用的约束为2.0的约束,在如果使用的是2.5的约束那么你会有想不到的刺激的奥

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值