(三)Struts2 拦截器
所有的学习我们必须先搭建好Struts2的环境(1、导入对应的jar包,2、web.xml,3、struts.xml)
第一节:拦截器简介
(百度百科Struts2)
Struts2 拦截器是在访问某个Action 或Action 的某个方法,字段之前或之后实施拦截,并且Struts2 拦截器是可
插拔的,拦截器是AOP的一种实现.
优点:通用功能的封装,提供了可重用性;
第二节:Struts2 预定义拦截器&拦截器栈
<?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> <package name="manage" namespace="/" extends="struts-default"> <interceptors>
<interceptor name="myInterceptor" class="com.wishwzp.interceptor.MyInterceptor"></interceptor>
</interceptors> <action name="hello" class="com.wishwzp.action.HelloAction">
<result name="success">success.jsp</result> <interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package> </struts>
struts.xml
package com.wishwzp.interceptor; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{ @Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("MyInterceptor销毁");
} @Override
public void init() {
// TODO Auto-generated method stub
System.out.println("MyInterceptor初始化");
} @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("在Action执行之前");
String result=invocation.invoke();
System.out.println("result:"+result);
System.out.println("在Action执行之后");
return result;
} }
MyInterceptor.java
package com.wishwzp.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
System.out.println("执行了HelloAction的默认方法");
return SUCCESS;
}
}
HelloAction.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Name:${name }
</body>
</html>
success.jsp
url:http://localhost:8080/Struts2Chap03/hello?name=Struts2

我们需要注意的是在MyInterceptor.java中的:
String result=invocation.invoke();
第三节:自定义拦截器简单实例
我们在第二节中“MyInterceptor.java”中已经是自己定义的拦截器了
第四节:自定义拦截器-登录验证拦截器
struts.xml
1 <?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> <package name="manage" namespace="/" extends="struts-default"> <interceptors>
<interceptor name="loginInterceptor" class="com.wishwzp.interceptor.LoginInterceptor"></interceptor>
</interceptors> <action name="user" class="com.wishwzp.action.UserAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> <action name="gril" class="com.wishwzp.action.GrilAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package> </struts>
User.java
1 package com.wishwzp.model; public class User { private String userName;
private String password; 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;
}
}
UserService.java
1 package com.wishwzp.service; import com.wishwzp.model.User; public class UserService { public boolean login(User user){
if("wishwzp".equals(user.getUserName())&&"123".equals(user.getPassword())){
return true;
}else{
return false;
}
}
}
UserAction.java
1 package com.wishwzp.action; import java.util.Map; import com.wishwzp.model.User;
import com.wishwzp.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ /**
*
*/
private static final long serialVersionUID = 1L; private UserService userService=new UserService();
private User user;
private String error; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String getError() {
return error;
} public void setError(String error) {
this.error = error;
} @Override
public String execute() throws Exception {
if(userService.login(user)){
ActionContext actionContext=ActionContext.getContext();//获取上下文,去获取actionContext
Map<String, Object> session=actionContext.getSession();//通过actionContext去获取session
session.put("currentUser", user);//将用户存放在session中,就是放到了currentUser
return SUCCESS;//返回到SUCCESS
}else{
this.error="用户名或密码错误";
return "error";
}
} }
GrilAction.java
1 package com.wishwzp.action; import com.opensymphony.xwork2.ActionSupport; public class GrilAction extends ActionSupport{ /**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
System.out.println("看美女");
return SUCCESS;
} }
LoginInterceptor.java
1 package com.wishwzp.interceptor; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class LoginInterceptor implements Interceptor{ @Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("LoginInterceptor销毁");
} @Override
public void init() {
// TODO Auto-generated method stub
System.out.println("LoginInterceptor初始化");
} @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("在Action执行之前");
ActionContext actionContext=invocation.getInvocationContext();//获取actionContext,这样就可以获取session了
Map<String, Object> session=actionContext.getSession();//获取session
Object currentUser=session.get("currentUser");//获取前面的的用户有没有
String result=null;
if(currentUser!=null){
result=invocation.invoke();//不是空的话,说明已经登录过了
}else{//否则没有登录
//获取request
HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
request.setAttribute("error", "请先登录!");
result="error";
}
System.out.println("result:"+result);
System.out.println("在Action执行之后");
return result;
} }
login.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user" method="post">
用户名:<input type="text" name="user.userName"/>
密码:<input type="password" name="user.password"/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
success.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
当前用户:${currentUser.userName }
</body>
</html>
error.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
错误信息:${error } <a href="login.jsp">登录</a>
</body>
</html>
url:http://localhost:8080/Struts2Chap03/login.jsp
url:http://localhost:8080/Struts2Chap03/gril

我们再上面的代码中优化一下strut.xml。
其他什么地方都不变
struts.xml
1 <?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> <package name="manage" namespace="/" extends="struts-default"> <interceptors>
<!-- 配置loginInterceptor拦截器 -->
<interceptor name="loginInterceptor" class="com.wishwzp.interceptor.LoginInterceptor"></interceptor> <!-- 拦截器栈 -->
<!-- 配置一个名为myStack的拦截器栈,里面有拦截器loginInterceptor和默认的拦截器 -->
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <!-- 配置使用自己配置的默认拦截器myStack -->
<default-interceptor-ref name="myStack"></default-interceptor-ref> <!-- 使用全局错误信息,就不需要去一个个写error了 ,所有的action都会找到这个全局error的-->
<global-results>
<result name="error">error.jsp</result>
</global-results> <action name="user" class="com.wishwzp.action.UserAction">
<result name="success">success.jsp</result> <!-- 这个默认拦截器栈这里必须有,不然的话这里的登录也被拦截掉了 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> <action name="gril" class="com.wishwzp.action.GrilAction">
<result name="success">success.jsp</result>
</action>
</package> </struts>
(三)Struts2 拦截器的更多相关文章
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- 浅谈Struts2拦截器的原理与实现
拦截器与过滤器 拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...
- Struts2拦截器原理以及实例
一.Struts2拦截器定义 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. ...
- Struts2拦截器总结<转>
由于项目中在登录跳转到其他应用程序模块的时候有用到拦截器,因此查看了一下相关资料. 原文地址:http://blog.csdn.net/sendfeng/article/details/4248120 ...
- Struts2拦截器总结
拦截器的本质: 拦截器就是一个类,一个实现了超级接口Interceptor的类.Interceptor接口里定义了三个方法 init(),destory(),intercept().其中inercep ...
- Struts2拦截器登录验证
Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截 ...
- Struts2拦截器配置实例
拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...
- struts2(五)之struts2拦截器与自定义拦截器
前言 前面介绍了struts2的输入验证,如果让我自己选的话,肯定是选择xml配置校验的方法,因为,能使用struts2中的一些校验规则,就无需自己编写了, 不过到后面应该都有其他更方便的校验方法,而 ...
随机推荐
- 动态规划(树形DP):LNOI 2016 侦察守卫
Sample Input 12 2 8 9 12 6 1 1 5 1 4 8 10 6 10 1 2 3 5 6 7 8 9 10 11 1 3 2 3 3 4 4 5 4 6 4 7 7 8 8 9 ...
- 文本编辑器 CKEditor 用法
最新文本编辑器,FCK升级版:CKEditor.NET CKEditor.NET.dll 版本:3.6.4.0 官方网址:http://ckeditor.com/ 效果图: 配置web.c ...
- The Same Game": A Simple Game from Start to Finish3
视图: 画出你的游戏界面 前面,我们的文档对象中已经初始化了游戏板对象,接下来我们需要显示这些信息给用户了. 第一步是添加代码,来重新设置我们的窗口尺寸.缺省的窗口尺寸不是我们想要的,我们将重写OnI ...
- java基础(十八)IO流(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- R-note1
R 新手 如果你在R上遇到困难,那么你从这两个地方可以得到解答: http://www.r-project.org/mail.html http://stackoverflow.com/questio ...
- Axure RP 8.0 中继器初体验
为了解决增删等复杂交互的问题,中继器是个不错的选择. 拖拽出一个默认的中继器 中继器的数据集感觉就像是数据库一样,在右边检视窗口中可以看到中继器的默认数据集,可以理解成一张二维表.默认有1列,现成的3 ...
- html自定义checkbox、radio、select —— checkbox、radio篇
前些日子,所在公司项目的UI做了大改,前端全部改用 Bootstrap 框架,Bootstrap的优缺点在此就不详述了,网上一大堆相关资料. 前端的设计就交给我和另一个同事[LV,大学同班同学,毕业后 ...
- Javascript substr方法在某些浏览器下行为出现BUG的补丁代码
主要思路是使用兼容性和稳定性都保持一致的substring方法重写/覆盖substr /** * String.substr() bug fix * @param start * @param len ...
- Cas Server中各配置文件介绍
Cas Server中所有的配置文件都是放在WEB-INF目录及其子目录下的. 在WEB-INF/classes下的配置文件有: l cas-theme-default.properties:该文件 ...
- GXT之旅:第三章:表单和窗口(4)——表单的提交和RPC
表单使用HTTP提交 表单有两种提交方式,第一种就是传统的HTTP提交. 最直接的步骤就是: 使用FormPanel的setAction()方法,去定义submit的URL 使用FormPanel的i ...