Struts2环境搭建成功后,最起码的要求是能实现对数据的增删改查,然而这就涉及到了如何将前台数据传入到我们后台中,简单说如何将页面的数据传到处理程序中,以及如何把数据库中的数据显示在jsp中,想要实现这些功能,首先要了解Struts2的驱动方式。
属性驱动:使用属性来封装来回请求参数和处理结果,即在jsp页面的每一个form中的name都对应在action中有一个属性与之对应。
如果在jsp页面表单中的数据很多的时候,属性驱动的action类中需要写很多的属性和对应的set和get方法,影响action中主要流程的可读性,所以将和表单对应的属性放到专门的javabean中,形成实体类。
模型驱动:使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需要定义一个封装所有数据信息的javabean
这里主要分析Struts2的模型驱动。
Struts2是如何将请求参数封装到model中的呢?查看struts-default.xml配置文件,看到如下片段:
<interceptors>
……
<!--定义属性驱动的拦截器—>
<interceptor name=”params” class=”com.opensymphony.xwork2.interceptor.ParametersInterceptor” />
<!--定义模型驱动的拦截器—>
<interceptor name=”model-driven” class=”com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor” />
……
<!--定义模型驱动的拦截器栈—>
<interceptor-stack name=”modelDrivenStack”>
<interceptor-ref name=”model-driven”/>
<interceptor-ref name=”basicStack”/>
</interceptor-stack>
……
<interceptor-stack name=”defaultStack”>
<interceptor-ref name=”model-driven”/>
<interceptor-ref name=”params”/>
</interceptor-stack>
</interceptors>
<!--定义Struts2默认的拦截器栈—>
<default-interceptor-ref name=”defaultStack” />
模式驱动代码实例:
javaBean类
package com.test.dao;
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Action类
package com.test.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.test.dao.User;
//采用模型驱动的Action必须实现ModelDriven接口
public class LoginAction implements Action,ModelDriven<User>{
//定义用于封装请求参数和处理结果的模型
private User model=new User();
//处理用户请求的execute方法
public String execute() throws Exception {
//当用户请求参数的name等于admin,密码请求参数为123456时
//返回success字符串,否则返回error
if(getModel().getName().equals("admin")&&
getModel().getPassword().equals("123456")){
return SUCCESS;
}else{
return ERROR;
}
}
//实现ModelDriven接口必须实现的方法
//该方法用于把Action和与之对应的Model实例关联起来
@Override
public User getModel() {
// TODO Auto-generated method stub
return model;
}
}
struts.xml配置
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 配置struts2的配置文件的根元素 -->
<struts>
<!-- Struts2的Action必须放在指定的包空间下定义 -->
<package name="test" extends="struts-default">
<!-- 定义login的Action -->
<action name="login" class="com.test.action.LoginAction">
<!-- 定义处理结果和视图资源之间的映射关系 -->
<result>error.jsp</result>
<result>welcome.jsp</result>
</action>
</package>
</struts>
登录页面login.jsp
<body>
<form action="login" method="post">
<table>
<caption>
<h3>用户登录</h3>
</caption>
<tr>
<td>用户名:<input type="text" name="name" /></td>
</tr>
<tr>
<td>密码:<input type="password" name="password" /></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="登录" /> <input
type="reset" value="重填" /></td>
</tr>
</table>
</form>
</body>
登录成功页面
<body>
欢迎,<s:property value="model.name"/>,您已经登录!
</body>
当采用模型驱动模式时,也可以采用如下形式来输出Action属性。
<s:property value="name"/>