Struts 2讲义 (5)
更新时间:2023-08-13 17:06:01 阅读量: IT计算机 文档下载
- struts推荐度:
- 相关推荐
Struts 2 讲义(5)
--Struts2特性
一、国际化
国际化的步骤:
1) 建立一个中文资源文件,globalMessages.properties。用文本编辑器输入,内容
如下:
#定义国际化资源文件
HelloWorld=你好,世界! name=用户名称 pass=用户密码 username=用户名 password1=密码 password2=确认密码 birthday=生日
2) 在Dos中执行下面命令:
native2ascii globalMessages.properties globalMessages_zh_CN.properties
3)中文资源文件名:globalMessages_zh_CN.properties。转换内容为: #\u5b9a\u4e49\u56fd\u9645\u5316\u8d44\u6e90\u6587\u4ef6 HelloWorld=\u4f60\u597d\uff0c\u4e16\u754c\uff01 name=\u7528\u6237\u540d\u79f0 pass=\u7528\u6237\u5bc6\u7801 username=\u7528\u6237\u540d password1=\u5bc6\u7801
password2=\u786e\u8ba4\u5bc6\u7801 birthday=\u751f\u65e5
4)建立一个英文资源文件内容为:globalMessages_en_US.properties
HelloWorld=Hell World! name=username pass=password username=Your Name password1=Password
password2=confirm Password birthday=Birthday
5)上述两个文件保存到WEB-INF\classes目录中
6)创建struts.properties 中,保存到WEB-INF\classes目录下,内容如下:
struts.custom.i18n.resources=globalMessages
7)创建reg.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head>
<title>UI Tags Example</title>
<s:head/> <!-- 这句很重要,如果没有时间与日期就不能正确显示 --> </head> <body> <table>
<s:form id="id" action="reg">
<s:textfield name="username" label="用户名"/> <s:textfield name="password1" label="密码"/> <s:textfield name="password2" label="确认密码"/> <s:datetimepicker name="birthday" label="生日 " displayFormat="yyyy-MM-dd" /> <s:submit value="注册"/> </s:form> </table> </body> </html>
8)创建reg_ok_local.jsp代码如下所示:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head>
<title>注册成功</title>
</head> <body>
欢迎<s:property value="username"/>注册成功! <h2><s:text name="HelloWorld"/></h2> <h2><s:text name="username"/></h2> <h2><s:text name="password1"/></h2> <h2><s:text name="password2"/></h2> <h2><s:text name="birthday"/></h2> </body> </html>
9)创建Reg.java
package com.my.inter;
import java.util.Date;
import com.opensymphony.xwork2.Action; public class Reg implements Action { }
private String username; private String password1; private String password2; private Date birthday;
public Reg(){ }
public String getUsername() { }
public void setUsername(String username) { }
public String getPassword1() { }
public void setPassword1(String password1) { }
public String getPassword2() { }
public void setPassword2(String password2) { }
public Date getBirthday() { }
public void setBirthday(Date birthday) { }
public String execute() throws Exception { return SUCCESS; }
this.birthday = birthday; return birthday;
this.password2 = password2; return password2;
this.password1 = password1; return password1;
ername = username; return username;
9)配置struts.xml
<action name="reg" class="com.my.inter.Reg">
执行结果如下:
<result name="success">/reg_ok_local.jsp</result>
</action>
改进reg_tag.jsp
Struts2 可以在label值中访问国际化资源文件。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head>
<title>UI Tags Example</title> <s:head/>
</head> <body> <table>
<s:form id="id" action="Reg">
<s:textfield name="username" label="%{getText('username')}"/> <s:textfield name="password1" label="%{getText('password1')}"/> <s:textfield name="password2" label="%{getText('password2')}"/> <s:datetimepicker name="birthday" label="%{getText('birthday')} " displayFormat="yyyy-MM-dd" /> <s:submit value="注册"/> </s:form> </table> </body> </html>
运行结果如下图所示:
二、 数据校验
1.输入校验简介
在 Web 系统项目中有大量的视图页面需要用户自行输入很多数据。这些数据的类型有很多种。为了防止某些客户的恶意输入以及对 Web 项目的恶意破坏。必须引入输入校验像 Windows 操作系统中的防火墙一样把一些“垃圾”数据过滤,挡在 Web 系统之外。Struts2 的输入校验是以类型转换为基础。而且输入校验一般和 Web 系统的业务逻辑息息相关。
1.使用validate方法进行校验
Struts2 对输入校验这方面采用的最基本方法是在每个Action 里继承ActionSupport 类,并且重写它的输入校验方法 validate()。在注册页面中输入各种校验将所有不符合输入校验规则的错误信息都由 ActionSupport 类中另一个方法 addFieldError 方法将错误信息加入到表单错误信息,并且在输入数据的页面显示,而不会再由 Action 导航到注册成功页面。 【例3-4】使用validate方法进行校验实例。
⑴ 注册页面:register.jsp
<%@ page language="java" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>注册页面</title> <s:head/> </head> <body> <!-- 用户信息注册form表单 --> <s:form action="Register.action" validate="true"> <table width="60%" height="76" border="0"> <!-- 各标签定义 --> <s:textfield name="username" label="用户名"/> <s:password name="password" label="密 码" /> <s:password name="repassword" label="密 码确认" /> <s:textfield name="birthday" label="生日"/> <s:textfield name="mobile" label="手机号码"/> <s:textfield name="age" label="年龄"/> <s:submit value="注册" align="center"/> </table> </s:form> </body> </html>
⑵ 注册控制类:RegisterAction.java package it;
import com.opensymphony.xwork2.ActionSupport; import java.util.Date;
public class RegisterAction extends ActionSupport { // Action类公用私有变量,用来做页面导航标志 private static String FORWARD = null; private String username; // 用户名属性 private String password; // 密码属性 private String repassword; // 确认密码属性 private Date birthday; // 生日属性 private String mobile; // 手机号码属性 private int age; // 年龄属性 public String getUsername() { // 取得用户名值 return username; } public void setUsername(String username) { // 设置用户名值 ername = username; } public String getPassword() { // 取得密码值 return password; } public void setPassword(String password) { // 设置密码值 this.password = password; } public String getRepassword() { // 取得确认密码值 return repassword;
}
public void setRepassword(String repassword) { // 设置确认密码值 this.repassword = repassword; }
public Date getBirthday() { // 取得生日值 return birthday; }
public void setBirthday(Date birthday) { // 设置生日值 this.birthday = birthday; }
public String getMobile() { // 取得手机号码值 return mobile; }
public void setMobile(String mobile) { // 设置手机号码值 this.mobile = mobile; }
public int getAge() { // 取得年龄值 return age; }
public void setAge(int age) { // 设置年龄值 this.age = age; }
public String execute() throws Exception { // 执行注册方法 FORWARD = "success"; return FORWARD; }
public void validate() { // 校验方法,用来输入校验 // 校验是否输入用户名 if (getUsername() == null || getUsername().trim().equals("")) { addFieldError("username", "请输入用户名"); } // 校验是否输入生日 if(getBirthday()==null){ addFieldError("birthday", "请输入生日日期"); }else // 校验是否输入正确的生日日期 if(getBirthday().after(new Date())){ addFieldError("birthday", "请不要输入未来日期"); } // 校验是否输入密码 if (getPassword() == null || getPassword().trim().equals("")) { addFieldError("password", "请输入密码"); } // 校验是否输入确认密码 if (getRepassword() == null || getRepassword().trim().equals("")) { addFieldError("repassword", "请输入确认密码"); } // 校验输入的密码和确认密码是否一致 if (!getPassword().equals(getRepassword())) { addFieldError("repassword", "确认密码和密码输入不一致"); }
// 校验输入的手机号码长度是否正确 if (getMobile().length()!=11) { addFieldError("mobile", "请输入正确的手机号码"); } // 校验输入的年龄是否正确 if (getAge()<1||getAge()>99) { addFieldError("age", "请输入您的真实年龄"); } } }
⑶注册成功页面:register1.jsp
<%@ page language="java" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>注册页面</title> <s:head/> </head> <body> <!-- 用户信息注册form表单 --> <s:form action="Register.action" validate="true"> <table width="60%" height="76" border="0"> <!-- 各标签定义 --> <s:textfield name="username" label="用户名"/> <s:password name="password" label="密 码" /> <s:password name="repassword" label="密 码确认" /> <s:textfield name="birthday" label="生日"/> <s:textfield name="mobile" label="手机号码"/> <s:textfield name="age" label="年龄"/> <s:submit value="注册" align="center"/> </table> </s:form> </body> </html>
运行结果如图3-8、3-9所示。
图3-8没有输入数据校验
图3-9 校验输入密码不一致
2.使用validateXXX方法进行校验
Struts2 中除了 validate 方法之外它还有一种validateXXX 方法针对 Action 中某一特定方法进行各种字段的输入校验。其中 XXX 就是该特定方法名。 【注】:如果使用 validateRegister 方法,那最好不要再使用 validate 方法。validate 方法是对所有 Action 中方法的输入校验都进行校验,validateRegister 方法只对 Register 方法进行校验。因此两者不能重复使用,都使用会造成两个方法都进行了校验的结果。执行顺序是先
validateRegister后validate。如果 validateRegister 方法有特殊的输入校验则就会被 validate 方法“覆盖”,因此达不到预期的输入校验目的。 【例3-5】使用validateXXX方法进行校验实例。
⑴ 注册页面:register1.jsp
<%@ page language="java" pageEncoding="gb2312"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>注册页面</title> </head> <body>
<!-- fielderror标签显示所有校验错误信息 --> <s:fielderror></s:fielderror> <!-- 用户信息注册form表单 --> <s:form action="Register1!Register.action"> <table width="60%" height="76" border="0"> <!-- 各标签定义 --> <s:textfield name="username" label="用户名"/> <s:password name="password" label="密 码" /> <s:password name="repassword" label="密 码确认" /> <s:textfield name="birthday" label="生日"/> <s:textfield name="mobile" label="手机号码"/> <s:textfield name="age" label="年龄"/> <s:submit value="注册" align="center"/> </table> </s:form> </body> </html>
⑵ 注册控制类:RegisterAction1.java package it;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction1 extends ActionSupport { private static String FORWARD = null; private String username; // 用户名属性 private String password; // 密码属性 private String repassword; // 确认密码属性 private Date birthday; // 生日属性 private String mobile; // 手机号码属性 private int age; // 年龄属性 public String getUsername() { // 取得用户名值 return username; } public void setUsername(String username) { // 设置用户名值 ername = username; } public String getPassword() { // 取得密码值 return password; }
public void setPassword(String password) { // 设置密码值 this.password = password; }
public String getRepassword() { // 取得确认密码值 return repassword; }
public void setRepassword(String repassword) { // 设置确认密码值 this.repassword = repassword; }
public Date getBirthday() { // 取得生日值 return birthday; }
public void setBirthday(Date birthday) { // 设置生日值 this.birthday = birthday; }
public String getMobile() { // 取得手机号码值 return mobile; }
public void setMobile(String mobile) { // 设置手机号码值 this.mobile = mobile; }
public int getAge() { // 取得年龄值 return age; }
public void setAge(int age) { // 设置年龄值 this.age = age; }
// 执行注册方法
public String Register() throws Exception { FORWARD = "success"; return FORWARD; }
public void validateRegister() { // 校验方法,用来输入校验 // 校验是否输入用户名 if (getUsername() == null || getUsername().trim().equals("")) { addFieldError("username", "请输入用户名"); } // 校验是否输入生日 if (getBirthday() == null) { addFieldError("birthday", "请输入生日日期"); } else // 校验是否输入正确的生日日期 if (getBirthday().after(new Date())) { addFieldError("birthday", "请不要输入未来日期"); } // 校验是否输入密码 if (getPassword() == null || getPassword().trim().equals("")) { addFieldError("password", "请输入密码"); } // 校验是否输入确认密码 if (getRepassword() == null || getRepassword().trim().equals("")) { addFieldError("repassword", "请输入确认密码");
}
// 校验输入的密码和确认密码是否一致
if (!getPassword().equals(getRepassword())) { addFieldError("repassword", "确认密码和密码输入不一致"); } if (getMobile().length() != 11) { // 校验输入的手机号码长度是否正确 addFieldError("mobile", "请输入正确的手机号码"); } if (getAge() < 1 || getAge() > 99) { // 校验输入的年龄是否正确 addFieldError("age", "请输入您的真实年龄"); } } } 运行结果如图3-10所示。
图3-10 validateXXX方法校验没有输入数据
2.使用Struts2框架校验
Struts2框架提供了一种基于框架文件的输入校验方式,将校验规则保存在特定的框架
文件中,这样就使输入校验同Action实现分离,提高了系统的维护性。
Struts2使用配置文件来完成输入校验方式步骤:首先在 Action 代码中去除所有 validate与validateXXX 方法的代码。然后在和 Action 类文件同一级目录下增加 XXX-validation.xml 配置文件。这里“XXX ”是 Action 类文件名字,表示该 XML 文件中所有输入校验的规则定义和错误信息显示方式都只针对该 Action 有效。
1.Struts2 字段校验
Struts2字段校验是在<validators>和</validators>之间使用<field>来对输入界面表单中每一个字段进行输入校验规制定义和错误定义。<field>中的name属性就是字段名字。它包含<field-validator>标签,它的 type 属性表明是何种类型的输入校验。这些输入校验的 type 都是在 Struts2 中缺省定义的,被称之为校验器。在 <field-validator> 标签内可以有 2 种标签,一种是 <param> 标签,该标签定义了一些输入校验规则需要用到的参数。这些参数更可以以“ ${ 参数名 } ”格式显示在视图页面上。除此之外还有 <message> 标签,该标签定义的是输入校验出错后的出错信息。这些信息是可以显示在试图界面上的。 【例3-6】使用Struts2字段校验实例。
(1) 注册页面:register2.jsp
<%@ page language="java" pageEncoding="gb2312"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>注册页面</title> <s:head/> </head> <body> <!-- 用户信息注册form表单 --> <s:form action="Register2.action" validate="true"> <table width="60%" height="76" border="0"> <!-- 各标签定义 --> <s:textfield name="username" label="用户名"/> <s:password name="password" label="密 码" /> <s:password name="repassword" label="密 码确认" /> <s:textfield name="birthday" label="生日"/> <s:textfield name="mobile" label="手机号码"/> <s:textfield name="age" label="年龄"/> <s:submit value="注册" align="center"/> </table> </s:form> </body> </html>
(2) 注册控制类:RegisterAction2.java package it;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport; public class RegisterAction2 extends ActionSupport { private static String FORWARD = null; private String username; // 用户名属性 private String password; // 密码属性
}
private String repassword; // 确认密码属性 private Date birthday; // 生日属性 private String mobile; // 手机号码属性 private int age; // 年龄属性
public String getUsername() { // 取得用户名值 return username; }
public void setUsername(String username) { // 设置用户名值 ername = username; }
public String getPassword() { // 取得密码值 return password; }
public void setPassword(String password) { // 设置密码值 this.password = password; }
public String getRepassword() { // 取得确认密码值 return repassword; }
public void setRepassword(String repassword) { // 设置确认密码值 this.repassword = repassword; }
public Date getBirthday() { // 取得生日值 return birthday; }
public void setBirthday(Date birthday) { // 设置生日值 this.birthday = birthday; }
public String getMobile() { // 取得手机号码值 return mobile; }
public void setMobile(String mobile) { // 设置手机号码值 this.mobile = mobile; }
public int getAge() { // 取得年龄值 return age; }
public void setAge(int age) { // 设置年龄值 this.age = age; }
// 执行注册方法
public String Register() throws Exception { FORWARD = "success"; return FORWARD; }
(3) 字段校验配置文件:RegisterAction2-validation.xml <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"/xwork/xwork-validator-1.0.2.dtd"> <validators>
<field name="username"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>用户名长度必须在${minLength}-${maxLength}位之间</message> </field-validator> <field-validator type="requiredstring"> <message>请输入用户名</message> </field-validator> </field>
<field name="password"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密码长度必须在${minLength}-${maxLength}位之间</message> </field-validator> <field-validator type="requiredstring"> <message>请输入密码</message> </field-validator> </field>
<field name="repassword"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>确认密码长度必须在${minLength}-${maxLength}位之间</message> </field-validator> <field-validator type="requiredstring"> <message>请输入确认密码</message> </field-validator> <field-validator type="fieldexpression"> <param name="expression">password==repassword</param> <message>确认密码和密码输入不一致</message> </field-validator> </field>
<field name="birthday"> <field-validator type="required"> <message>请输入生日日期</message> </field-validator> <field-validator type="date"> <param name="min">1928-01-01</param> <param name="max">2004-01-01</param> <message>输入生日日期无效</message> </field-validator> </field>
<field name="mobile"> <field-validator type="requiredstring"> <message>请输入手机号码</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">11</param> <message>请输入正确的手机号码,号码位数必须为11位</message> </field-validator> </field>
<field name="age"> <field-validator type="required">
<message>请输入年龄</message> </field-validator> <field-validator type="int"> <param name="min">1</param> <param name="max">80</param> <message>年龄必须在${min}-${max}岁之间</message> </field-validator> </field> </validators> 运行结果与例3-5相似。
2. Struts2 非字段校验
非字段格式的输入校验方式与上字段校验相比主要是它的书写格式不是像之前在 <validators>和</validators> 之间包含<field>标签,而是 <validator>标签。每个<validator> 标签定义的 type 属性还是 Struts2 自带的输入校验器的类型格式。
在<validator>标签之内包含的还是<param>和<message>两种标签。但是在<param>中多定义了一个 fieldName 属性。这个属性定义的就是输入校验的表单字段名字。其他和之前字段格式都类似。
【例3-7】使用Struts2非字段校验实例。 ⑴ 注册页面与注册控制类与例3-5一致。 ⑵ 非字段校验配置文件:RegisterAction3-validation.xml <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"/xwork/xwork-validator-1.0.2.dtd"> <validators> <validator type="stringlength"> <param name="fieldName">username</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message>用户名长度必须在${minLength}-${maxLength}位之间</message> </validator> <validator type="requiredstring"> <param name="fieldName">username</param> <message>请输入用户名</message> </validator> <validator type="stringlength"> <param name="fieldName">password</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密码长度必须在${minLength}-${maxLength}位之间</message> </validator> <validator type="requiredstring"> <param name="fieldName">password</param> <message>请输入密码</message> </validator> <validator type="stringlength"> <param name="fieldName">repassword</param>
<param name="minLength">6</param> <param name="maxLength">8</param> <message>确认密码长度必须在${minLength}-${maxLength}位之间</message> </validator> <validator type="requiredstring"> <param name="fieldName">repassword</param> <message>请输入确认密码</message> </validator> <validator type="fieldexpression"> <param name="fieldName">password</param> <param name="fieldName">repassword</param> <param name="expression">password==repassword</param> <message>确认密码和密码输入不一致</message> </validator> <validator type="required"> <param name="fieldName">birthday</param> <message>请输入生日日期</message> </validator> <validator type="date"> <param name="fieldName">birthday</param> <param name="min">1928-01-01</param> <param name="max">2004-01-01</param> <message>输入生日日期无效</message> </validator> <validator type="requiredstring"> <param name="fieldName">mobile</param> <message>请输入手机号码</message> </validator> <validator type="stringlength"> <param name="fieldName">mobile</param> <message>请输入正确的手机号码,号码位数必须为11位</message> </validator> <validator type="required"> <param name="fieldName">age</param> <message>请输入年龄</message> </validator> <validator type="int"> <param name="fieldName">age</param> <param name="min">1</param> <param name="max">80</param> <message>年龄必须在${min}-${max}岁之间</message> </validator> </validators>
三、拦截器
1.1.1 拦截器简介
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
拦截器(Interceptor)是动态拦截Action调用的对象,类似于Servlet中的过滤器。在执行Action的业务逻辑处理方法(execute())之前,Struts2会首先执行在struts.xml中引用的拦截器。拦截器是struts2的一个重要特性。Struts2框架的大多数核心功能都是通过拦截器来实现的,如避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在拦截器的帮助下实现的。
拦截器之所以称为“拦截器”,是因为它可以在Action执行之前和执行之后拦截调用。Struts2将它的核心功能放到拦截器中实现,而不是分散到Action中实现,有利于系统的解耦,使得功能的实现类似于个人电脑的组装,变成了可插拔的,需要某个功能就“插入”一个拦截器,不需要某个功能就“拔出”一个拦截器。你可以任意组合拦截器来为Action提供附加的功能,而不需要修改Action的代码。拦截器围绕着Action和Result的执行,其工作方式如图3-1所示。
图3-1 Struts2拦截器工作方式
从图中可以看到,在Action和Result执行之前,为Action配置的拦截器将首先被执行,在Action和Result执行之后,拦截器将重新获得控制权,然后按照与先前调用相反的顺序依次执行。在整个执行过程中,任何一个拦截器都可以选择直接返回,从而终止余下的拦截器、Action和Result的执行。例如:当一个未授权的用户访问受保护的资源时,执行身份验证的拦截器可以直接返回。
1.1.2 Struts2拦截器
Struts2内置了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中,其中name是拦截器的名字,就是以后使用该拦截器的唯一标识;class则指定了该拦截器的实现类,如果定义的package继承了Struts2的struts-default包,则可以自由使用下面定义的拦截器,否则必须自己定义这些拦截器。
表3-1 Struts2内置拦截器
大部分时候,开发者无需手动控制这些拦截器,因为struts-default.xml文件中已经配置
了这些拦截器,只要我们定义的包继承了系统的struts-default包,就可以直接使用这些拦截器。
1.定义拦截器
Struts2 拦截器定义格式为:
<interceptor name="拦截器A" class="拦截器实现类A">
<!--定义拦截器参数-->
<param name="参数A">参数A初始化值</param> <param name="参数B">参数B初始化值</param>
……
</interceptor>
2.拦截器栈
拦截器栈:就是由多个拦截器组成的一个拦截器组,来实现一个特定的拦截功能。例如,可以可以将用户安全认证拦截器、日志拦截器、密码加密组成一个拦截器栈,在一个业务控制Action执行之前使用,比如用户注册Action,在执行该Action前来执行该拦截器栈,进行一系列公共功能方面的处理。
拦截器栈的定义:
<interceptor-stack name="basicStack"> <interceptor-ref name="exeption"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="param"/>
<interceptor-ref name="conversionError"/> </interceptor-stack> 在拦截器栈定义的<interceptor-ref../>元素中,name除了可以是一个拦截器名称,同时也可以是一个其它拦截器栈的名称,即该拦截器栈包含了其它拦截器栈,同时包含了该拦截器栈中所有的拦截器定义。
3.编写拦截器类
在struts2中要编写拦截器类,必须实现com.opensymphony.xwork2.interceptor.Interceptor接口,该接口定义了如下的三个方法:
void init():该方法在拦截器实例创建后、intercept()方法被调用之前调用,用于初始
化拦截器所需要的资源,例如数据库连接的初始化。该方法只执行一次。
void destroy():该方法在拦截器实例被销毁之前调用,用于释放在init()方法中分配
的资源。该方法只执行一次。
String intercept(ActionInvocation invocation) throws Exception:该方法在Action执行
之前被调用,拦截器为Action提供的附加功能在该方法中实现。利用invocation参数,可以获取action执行的状态。在intercept()方法中,如果要继续执行后续的部分(包括余下的应用于Action的拦截器、Action和Result),可以调用invocation.invoke()。如果要终止后续的执行,可以直接返回一个结果码,框架将根据这个结果码来呈现对应的结果视图。
【例3-1】HelloWorld拦截器实例。
⑴ 建立一个业务控制器Reg Reg.java
package it;
import com.opensymphony.xwork2.ActionSupport; import java.util.Date;
public class Reg extends ActionSupport{ private String username; //用户名 private String password1; //密码 private String password2; //确认密码 private Date birthday; //生日 public Date getBirthday() {
}
}
public void setBirthday(Date birthday) { this.birthday = birthday; }
public String getPassword1() { return password1; }
public void setPassword1(String password1) { this.password1 = password1; }
public String getPassword2() { return password2; }
public void setPassword2(String password2) { this.password2 = password2; }
public String getUsername() { return username; }
public void setUsername(String username) { ername = username; }
public String execute() throws Exception { if(username!=null && getPassword1().equals(getPassword2())
&&!getUsername().trim().equals("")){
System.out.println("Action 信息:正在执行Action......"); return SUCCESS; }else{ return INPUT; } }
⑵ 建立一个拦截器类Myinterceptor Myinterceptor.java package it;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class Myinterceptor extends AbstractInterceptor { public String intercept(ActionInvocation arg0) throws Exception { Reg reg=(Reg)arg0.getAction(); System.out.println("拦截器信息:HelloWorld拦截器!"); String result=arg0.invoke();//执行Action或者下一个拦截器 System.out.println("拦截器信息:Action执行完毕!"); return result; } }
⑶ HelloWorld 拦截器配置文件 <interceptors> <interceptor name="Myinterceptor" class="it.Myinterceptor"> </interceptor>
正在阅读:
Struts 2讲义 (5)08-13
翻译旅游篇--万里长城01-06
养生之道03-16
Lorenz混沌系统的电路仿真06-15
学生个人《家》读后感文本最新多篇精选04-21
2018年6月大学英语六级第二套真题试卷及答案 docx10-05
HART275手册01-19
电网调度安全风险分析及预控探讨05-12
离散数学测试(图论)10-25
计算机联锁系统软件04-05
- 供应商绩效评价考核程序
- 美国加州水资源开发管理历史与现状的启示
- 供应商主数据最终用户培训教材
- 交通安全科普体验教室施工方案
- 井架安装顺序
- 会员积分制度
- 互联网对美容连锁企业的推动作用
- 互联网发展先驱聚首香港
- 公司文档管理规则
- 机电一体化系统设计基础作业、、、参考答案
- 如何选择BI可视化工具
- 互联网产品经理必备文档技巧
- 居家装修风水的布置_家庭风水布局详解
- 全省基础教育信息化应用与发展情况调查问卷
- 中国石油--计算机网络应用基础第三阶段在线作业
- 【知识管理专题系列之五十八】知识管理中如何实现“场景化协同”
- 网络推广方案
- 中国石油--计算机网络应用基础第二阶段在线作业
- 汽车检测与维修技术专业人才培养方案
- 详解胎儿颈透明层
- 讲义
- Struts
- 人身伤亡事故现场应急处置方案
- 珠宝鉴定思考题3-2
- 游标卡尺、千分尺读数专练
- 中考物理总复习第三章声的世界2
- 枣庄市薛城区九年级上学期期中化学试卷
- 中学语文阅读教学论文9篇
- FAT32 NTFS硬盘玩游戏之Wii Backup Manager篇
- 足浴城合伙经营协议
- 试论秘书从业人员应具备的心理素质
- 非晶硅薄膜光衰退稳定性的影响因素
- 转动导杆机构的运动分析
- 班主任工作经验总结
- 学习单片机教程
- 辽宁省鞍山市第二中学七年级地理上册第1章第3节地图的阅读(一)教案(新版)新人教版
- 我叫MT2俺哥和劣人哪个好 英雄全方位详细对比分析
- 辽宁省大连市普兰店市第三十八中学2021届高三第一学期开学考试英语试卷
- 高血压是最常见的心血管疾病
- 影视后期制作实习报告
- 风系统中静压箱特性的研究及应用
- 2011中山大学专业学位研究生入学统一考试-333-《教育综合》考试科目命题指导意见