Struts2小结

Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Struts1和WebWork两种技术进行兼容、合并的全新的
MVC框架。Struts2框架充分发挥了Struts1和WebWork这两种技术的优势,抛弃原来Struts1的缺点,使得Web开发更加容易。

工作流程: 
(1)客户端浏览器发送HTTP请求到Web应用 
(2)Web容器将请求传递到标准ActionContextCleanUp过滤器以消除属性,而不让后续过滤器清楚,以延长Action中属性(包括自定义属性)的生命周期。ActionContextCleanUp作用 
(3)再经过如stimesh等其他过滤器后,请求传递给StrutsPrepareAndExecuteFilter核心控制器 
(4)StrutsPrepareAndExecuteFilter调用ActionMapper(Action映射器)确定调用哪个Action,再将控制权转移给ActionProxy代理 
(5)ActionProxy代理调用配置管理器ConfigurationManager从配置文件struts.xml中读取配置信息,然后创建ActionInvocation对象 
(6)ActionInvocation在调用拦截器链中的拦截器后再调用Action,根据Action返回的结果字符串查找对应的Result 
(7)Result调用视图模板,再以相反的顺序执行拦截器链,返回HTTP响应 

(8)HTTP响应以相反的顺序返回给核心控制器StrutsPrepareAndExecuteFilter以及其他web.xml中定义的过滤器,最终返回给客户端

在web.xml中配置核心控制器StrutsPrepareAndExecuteFilter 

<!-- 配置StrutsPrepareAndExecuteFilter核心控制器 -->
 		 <filter>
     		 	<!-- 过滤器名 -->
      			<filter-name>struts2</filter-name>
      			<!-- StrutsPrepareAndExecuteFilter核心控制器的实现类 -->
      			<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 		 </filter>
 		 <filter-mapping>
     		 	<!-- 过滤器名 -->
      			<filter-name>struts2</filter-name>
      			<!-- 过滤器过滤所有请求 -->
     			 <url-pattern>/*</url-pattern>
  		</filter-mapping>

在src下创建struts.xml配置文件

<struts>
    <!-- 指定Struts2处于开发阶段,可以进行调试 -->
    <constant name="struts.devMode" value="true"/>
    <!-- Struts2的Action都必须配置在package里。这里使用默认的package -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="register" class="action.RegisterAction">
            <!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
            <!--  
            <result name="success">/result.jsp</result>
            <result name="error">/error.jsp</result>
            -->
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

其中常用属性如下: 
(1)name 
指定包的名字,当存在多个包时作为唯一标识

(2)extends 
指定包所继承的其他包。 
struts-default是Struts2框架默认的抽象包,包含了大量结果类型的定义、拦截器及其引用定义等,是配置Action的基础,因此定义包时都要继承struts-default包。 
定义时,父包要先于子包;Action相同,后面的覆盖前面

(3)namespace 
指定包的命名空间,没有指定namespace值则为默认命名空间”/”
Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action 

配置命名空间后,Struts2按照以下顺序搜索Action: 
- 指定命名空间,不存在则往下搜索 
- 默认命名空间,不存在则往下搜索 
- 报错

Struts2 的传值方式---ModelDrivern  传值

Struts 文件的配置

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">
		<action name="ModelDrivenAction" class="com.hp.action.ModelDrivenAction"
			method="addUser">
			<result name="success">UserPage.jsp</result>
		</action>
	</package>
</struts>
User   bean类
package com.hp.bean;


public class User {
	private Integer id;
	private String username;
	private String password;


	public Integer getId() {
		return id;
	}


	public void setId(Integer id) {
		this.id = id;
	}


	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getPassword() {
		return password;
	}


	public void setPassword(String password) {
		this.password = password;
	}


}
ModelDrivenAction  类
package com.hp.action;


import com.hp.bean.User;
import com.opensymphony.xwork2.ModelDriven;


public class ModelDrivenAction implements ModelDriven<User> {
	private User user;


	private String addUser() {
		System.out.println("ID:" + user.getId());
		System.out.println("username:" + user.getUsername());
		System.out.println("password" + user.getPassword());
		return "success";
	}


	@Override
	public User getModel() {
		if (user == null) {
			user = new User();
		}
		return user;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值