Struts2的Action配置、action访问servlet api、action处理请求参数、result结果类型

实现Action控制类

实现action控制类有3中种方式:

  1. POJO的实现
    一般在pojo类中,要有一个公共的无参的构造方法(采用默认的构造方法)和一个execute()方法
  2. 实现Action接口
  3. 继承ActionSupport类(常用)
    ActionSupport类本身实现了Action接口

配置Action

Action映射就是将一个请求的url映射到一个action类,当请求匹配某个action名称时,框架就使用这个映射来确定如何处理请求。
< action>元素有4个属性:
name:必填属性,标识action,指定了action所处理的请求的URL
class:可选属性,指定action的实现类
method:可选属性,指定请求action时调用的方法

使用通配符

<package name="hello" namespace="/" extends="struts-default">
	    <action name="helloWorld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
			<result>/success.jsp</result>
		</action>
</package>

其中,method属性值中的数字1表示匹配第一个*
在struts2.5版本中要如下配置

<action name="userAction_*" class="cn.ssh.action.UserAction" method="{1}">
			<result name="success">/registersuccess.jsp</result>
			<result name="login">/loginsuccess.jsp</result>
			<result name="error">/error.jsp</result>
			<!-- 版本的原因加上这句 -->
			<allowed-methods>login,register</allowed-methods>
		</action>

action访问servlet api

  1. 通过ActionContext类访问(优先使用)
ActionContext context = ActionContext.getContext();
			context.put("name", "itcast");
			context.getApplication().put("name", "itcast");
			context.getSession().put("name", "itcast");

在上述代码中,通过actioncontext类中的方法调用,分别在request、application和session中放入了(“name”,“itcast”)对。通过ActionContext类可以访问jsp的内置对象属性

  1. 通过特定接口访问
    ServletRequestAware:可以直接访问web应用的HttpServletRequest实例
    ServletResponseAware:可以直接访问web应用的HttpServletResponse实例
    SessionAware:可以直接访问web应用的HttpSession实例
    ServletContextAware:可以直接访问web应用的ServletContext实例

  2. 通过ServletActionContext访问

action处理请求参数

  1. 属性驱动
    属性驱动是指通过字段进行数据传递,包括两种情况:
    基本数据类型字段驱动方式的数据传递:可以直接在action中定义各种java基本数据类型的字段,是这些字段与表单数据相对应,并利用这些字段进行数据传递;
public class UserLoginAction extends ActionSupport {
	private String userName;
	private String password;
	//get\set方法省略
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}

}

直接使用域对象字段驱动方式的数据传递:
采用这种方式,一般以javabean来实现,所封装的属性和表单属性一一对应,Javabean将成为数据传递的载体。

public class UserLoginAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		ActionContext context = ActionContext.getContext();
		if("111".equals(user.getName())&&"111".equals(user.getPassword())) {
			context.getSession().put("username", user.getName());
			context.getSession().put("password", user.getPassword());
			return SUCCESS;
		}else {
			context.getSession().put("error", "用户登录失败");
			return ERROR;
		}
	}

}

使用域对象的属性驱动方式进行传值时,如果jsp页面是负责取值的,那么取值的格式必须为“对象.属性名”;如果jsp页面是负责传值的,那么传值的格式可以为“模型对象名.属性名”,也可以直接是“属性名”。

  1. 模型驱动
    通过实现ModelDriven接口来接收请求参数,Action类必须实现ModelDriven接口,并且要重写getModel()方法,这个方法返回的就是action所使用的数据模型对象

result结果类型

最常用的结果集是redirect和dispatcher,redirect和dispatcher很相似,dispatcher是默认的结果集类型,dispatcher结果集是将请求转发到jsp视图资源,而redirect类型是将请求重定向到jsp视图资源,它们之间最大的差别是一个是请求转发,一个是请求重定向,如果重定向了请求,那么将丢失所有参数,包括action的处理结果

<action name="userlogin" class="cn.itcast.action.UserLoginAction">
			<result name="success" type="dispatcher">/loginSuccess.jsp</result>
			<result name="error" type="redirect">/loginError.jsp</result>
		</action>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值