自定义拦截器
1、客户端jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<s:form action="login.action">
<s:textfield name="userName" label="用户名"/>
<s:textfield name="passWord" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>
</html>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<s:form action="login.action">
<s:textfield name="userName" label="用户名"/>
<s:textfield name="passWord" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>
</html>
2、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.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="false"/>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name='struts2' extends="struts-default">
<interceptors>
<interceptor name="myFirstInterceptor" class="interceptors.MyFirstInterceptor">
<param name="name">我的第一个拦截器</param>
</interceptor>
</interceptors>
<!-- 定义login的Action,该Action的实现类为com.tomp.action.LoginAction类 -->
<action name="login" class="Action.LoginAction" method="Hello">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/Login.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="myFirstInterceptor">
<param name="name">改名后的拦截器1</param>
<!-- includeMethods优先级高于excludeMethods -->
<param name="excludeMethods">execute</param>
<param name="includeMethods">execute,Hello</param>
</interceptor-ref>
</action>
</package>
</struts>
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="false"/>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name='struts2' extends="struts-default">
<interceptors>
<interceptor name="myFirstInterceptor" class="interceptors.MyFirstInterceptor">
<param name="name">我的第一个拦截器</param>
</interceptor>
</interceptors>
<!-- 定义login的Action,该Action的实现类为com.tomp.action.LoginAction类 -->
<action name="login" class="Action.LoginAction" method="Hello">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/Login.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="myFirstInterceptor">
<param name="name">改名后的拦截器1</param>
<!-- includeMethods优先级高于excludeMethods -->
<param name="excludeMethods">execute</param>
<param name="includeMethods">execute,Hello</param>
</interceptor-ref>
</action>
</package>
</struts>
3、拦截器代码
package interceptors;
import Action.*;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.*;;
public class MyFirstInterceptor extends MethodFilterInterceptor
{
private static final long serialVersionUID = 8636232297561681863L;
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
protected String doIntercept(ActionInvocation arg0) throws Exception
{//截获Action
LoginAction action=(LoginAction)arg0.getAction();
//arg0.addPreResultListener(new MyPreResultListener());
System.out.println("在Action 执行Execute之前 "+this.name+"(MyFirstInterceptor)处理。。。。");
String restult=action.execute();
System.out.println("在Action 执行Execute之后 "+this.name+"(MyFirstInterceptor)处理。。。。");
return restult;
}
}
4、Action代码
package Action;
import java.util.Locale;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport
{
private static final long serialVersionUID = 6104361402004864401L;
/*
public User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
*/
private String userName;
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;
}
public String passWord;
public String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String Hello() throws Exception
{
return SUCCESS;
}
public void validateHello()
{
if(this.getUserName().equals("sql"))
{
addFieldError("userName",this.getText("用户名不能为sql"));
}
}
public String execute() throws Exception
{
if(this.userName.equalsIgnoreCase("sql")){
throw new java.sql.SQLException("用户名不能为sql!");
}
if(this.userName.equals("admin") &&
this.passWord.equals("admin"))
{
ActionContext.getContext().getSession().put("user", this.userName);
this.setResult("登录成功!");
System.out.println("Action执行execute");
System.out.println(Locale.getDefault());
System.out.println(this.getText("login.user.requird"));
System.out.println(this.getText("test"));
return SUCCESS;
}
else
{
//return ERROR;
ActionContext.getContext().getSession().put("user", this.userName);
this.setResult("登录失败!");
return SUCCESS;
}
/*
if(this.getUser().userName.equalsIgnoreCase("sql")){
throw new java.sql.SQLException("用户名不能为sql!");
}
if(this.getUser().userName.equals("admin") &&
this.getUser().passWord.equals("admin"))
{
ActionContext.getContext().getSession().put("user", this.getUser().userName);
this.setResult("登录成功!");
return SUCCESS;
}
else
{
return ERROR;
}*/
}
/*
public void validate()
{
if(this.getUserName()==null || this.getUserName().equals(""))
{
addFieldError("userName",this.getText("login.user.requird"));
}
if(this.getPassWord()==null || this.getPassWord().equals(""))
{
addFieldError("passWord","passWord required!");
}
}
*/
}
5、执行结果
在Action 执行Execute之前 改名后的拦截器1(MyFirstInterceptor)处理。。。。
Action执行execute
zh_CN
用户名不能为空!
从LoginAction_zh_CN.properties中取出的国际化信息
在Action 执行Execute之后 改名后的拦截器1(MyFirstInterceptor)处理。。。。