`
mxl86
  • 浏览: 173479 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Struts2.1拦截器总结

阅读更多

今天没事干看了看struts2.1的拦截器部分,自己做了一个小例子,汇总一下,有需要的朋友也可以看看……

 

注:有关struts2.1的拦截器的概念东东我就不介绍了,自己可以去查查资料.

 

 

下面是本人写的登录实现拦截器的例子:

 

1. login.jsp

<s:form action="userLoginAction.action" method="post">
    	Username:<s:textfield name="user.username" /><br>
    	Password:<s:password name="user.password" /><br/>
    	
    	<s:submit value="Submit" /> &nbsp; <s:reset value="Reset" />
    </s:form>

 

 

2. struts.xml

<package name="User" extends="struts-default">
    	
       <!-- 设置自己创建的拦截器栈 -->
       <interceptors>   
            <interceptor name="loginInterceptor" class="org.com.ssh.action.LoginInterceptor"></interceptor>   
            <interceptor-stack name="loginDefaultStack">   
                <interceptor-ref name="loginInterceptor"></interceptor-ref>   
                <interceptor-ref name="defaultStack"></interceptor-ref>   
            </interceptor-stack>   
        </interceptors>
    	
        <global-results>   
            <result name="login" type="redirect">/login.jsp</result>
        </global-results>
    	    	
    	<action name="findUserAction" class="org.com.ssh.action.UserAction" method="FindUser">
    		<result>/index.jsp</result>
    		<!-- 此处引用拦截器 -->
    		<interceptor-ref name="loginDefaultStack"></interceptor-ref>
    	</action>
    	
    	<action name="userLoginAction" class="org.com.ssh.action.UserLoginAction" method="UserLogin">
    		<result name="success">/loginSuc.jsp</result>
    		<result name="error">/login.jsp</result>
    	</action>
    	 	
    </package>

 

注意:配置文件里最好使用全局转发的login代码

struts2 写道
<global-results>
<result name="login" type="redirect">/login.jsp</result>
</global-results>

 

3. UserLoginAction.java

private User user;
	
	@Autowired
	private UserService userservice;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	public UserService getUserservice() {
		return userservice;
	}

	public void setUserservice(UserService userservice) {
		this.userservice = userservice;
	}
	
	/**
	 * 验证登录用户是否正确
	 * @return tipMes
	 */
	public String UserLogin()
	{
		String tipMes = "";
		
		//MD5对密码进行加密
		MD5 m = new MD5();
		user.setPassword(m.getMD5ofStr(user.getPassword()));
		
		Boolean b = userservice.valLogin(user);
		
		if(b == true)
		{
			user = userservice.FindUserPro(user);
			ActionContext.getContext().getSession().put("user", user);
			
			return SUCCESS;
		}
		else
		{
			this.addFieldError(tipMes, "您输入的Username或者Password不匹配,请重新输入!");
			return ERROR;
		}
	}

 

 

4. LoginInterceptor.java

public class LoginInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
	ActionContext actionContext = invocation.getInvocationContext();      
	           
	    Map session = actionContext.getSession();
	    
	    User user = (User)session.get("user");
	    
	    if (user == null){   
	        return Action.LOGIN;
	    }
	    else
	    {
	    	return invocation.invoke();
	    }
	}
}

 

5. loginSuc.jsp

<body>
    登录成功!
</body>

 

 

 

 

OK,简单的登录的拦截器就搞定了!

分享到:
评论
26 楼 xw_gongchengshi 2010-12-08  
自定义过滤器是可以的,只要不跟系统已有的重名。
25 楼 mxl86 2010-12-08  
回:sam_kee

好几天没来javaeye了,上来刚看到不好意思啊,呵呵~
24 楼 mxl86 2010-12-08  
sam_kee 写道
正在学习中!加油!我想问一下,如果自定义的拦截器名字为SimpleInterceptor的话,会不会报错呢?


如果你用的Struts2的版本自带的默认的拦截器名字是这个  那么你就不能使用了 不然肯定会报错~
23 楼 mxl86 2010-12-08  
sam_kee 写道
拦截器是面向切面编程,可以任意指定一个action进行过滤;
而过滤器是对整个web项目的request请求进行过滤。
个人理解,待考证


个人觉得一般说的过滤器一般是过滤整个web程序
22 楼 mxl86 2010-12-08  
sam_kee 写道
楼主,你那个MD5加密是不是要自己写啊?看到留言能不能回复一个呢?哈哈,谢谢先


我上面就是举例一下,你可以换成自己的MD5类 替代验证密码那部分~~呵,这个就随便了
21 楼 anonymousstone 2010-12-04  
 public void register(ContainerBuilder containerBuilder, LocatableProperties props) throws ConfigurationException {
        if (servletContext != null && !containerBuilder.contains(ServletContext.class)) {
            containerBuilder.factory(ServletContext.class, new Factory<ServletContext>() {
                public ServletContext create(Context context) throws Exception {
                    return servletContext;
                }
            });
        }
        //调用父类的register,关键点所在
        super.register(containerBuilder, props);
    }
20 楼 sam_kee 2010-12-03  
正在学习中!加油!我想问一下,如果自定义的拦截器名字为SimpleInterceptor的话,会不会报错呢?
19 楼 sam_kee 2010-12-03  
楼主,你那个MD5加密是不是要自己写啊?看到留言能不能回复一个呢?哈哈,谢谢先
18 楼 sam_kee 2010-12-02  
拦截器是面向切面编程,可以任意指定一个action进行过滤;
而过滤器是对整个web项目的request请求进行过滤。
个人理解,待考证
17 楼 threejin520 2010-11-30  
楼主的例子都没写完
16 楼 silent_chen_jquery 2010-06-01  
又看了一遍,怎么没看懂啊?到底怎么实现登录拦截的?
15 楼 silent_chen_jquery 2010-06-01  
LZ的例子开始看起来还不错,可是后来在调用Interceptor的时候令人觉得很突兀,总觉得那个UserAction不是很协调,使用拦截器的部分解释不足
14 楼 jashawn 2010-01-18  
Aop其实只是一种方法论。
你尝试过用decorate侵犯aop吗?
那么callback可以意淫aop吗?
好了,照我这么说下去aop的东西在设计模式里实在太多了。
无奈它们都太过局限于接口约定,就像婚姻证书一样,一夫一妻制呀。

哪像动态代理~~那才暴力~~见谁抽谁~~ 顶个配置提升一下品位可以有选择性地OOXX。
好吧,我承认我低俗了~ 我更是扯远了,有罪呀~~

其实吧,就是不习惯继承AbstractInterceptor。

话说我从浦西搬到浦东吧,扔了好多东西,好舍不得呀。
13 楼 mavlarn 2010-01-14  
LK.Bing 写道
这栏截器和过滤器有什么不一样的啊?

过滤器是servlet容器在收到某一种请求的时候,预先调用过滤器的方法,然后根据结果再继续执行或者返回。
拦截器是在某一个类的某个方法被调用前,调用拦截器的before()方法,然后这个方法被执行,最后,再调用拦截器的after方法。如果有多个拦截器,那么就依次调用,就像一个堆栈一样。
12 楼 lkf520java 2010-01-13  
其实拦截器最早的概念的是
jdk的类库中所带的Bean代理+反射来实现的
11 楼 zilong8000 2009-12-12  
wujiazhao88 写道
楼主何不自己实现一个拦截器,理解更深刻

自己实现一个 然后再看看他的源码

也许你会发现新的东西。。。。
10 楼 aoliwen521 2009-12-12  
LK.Bing 写道
这栏截器和过滤器有什么不一样的啊?


我的一点理解就是拦截器相当于Struts中的过滤器。
过滤器本身和struts的FilterDispatcher是平级,不能调用struts的api来实现一些复杂的功能。
拦截器可以调用struts的api,获取一些action的信息。
9 楼 geeksun 2009-12-11  
楼主的拦截器和过滤器有得一拼
8 楼 LK.Bing 2009-12-11  
这栏截器和过滤器有什么不一样的啊?
7 楼 java.lang.Object 2009-12-11  
用convention插件就可以通过annotation来配拦截器了

相关推荐

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    struts2.1入门手册V3.0

    struts2 入门参考手册 基于struts-2.1.6版本编写的入门教程,包含了标签,拦截器,文件上传下载,与spring整合等等应用,希望对刚接触struts2的朋友有帮助

    struts2.1宝典

    目录 ...struts2表单标签 1 1、struts资源文件中文解决方法 1 2、开发struts2流程 1 3、创建拦截器: 2 ...添加Struts2.1开发支持 39 添加Spring开发支持 39 添加Hibernate支持 40 添加Jar包 42 修改Web.xml文件, 42

    struts2.1.8学习

    4、Struts2 利用拦截器进行AOP 编程,实现如权限拦截功能 5、Struts2 提供了类型转换器 6、Struts2 提供多种表现层技术,如JSP/Freemarker/Velocity 等 7、Struts2 的输入验证可以对指定方法进行验证,解决Struts1 ...

    struts2-1.zip

    MVC模式(model view controller) 模型:封装应用程序的数据和业务逻辑(POJO一个普通的JAVA类) 视图:实现应用程序的信息显示功能(JSP) 控制器:接收来自用户的输入...Struts2中最主要的一个就是过滤器filter

    Struts2 in action中文版

    4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...

    struts2讲义_吴峻申

    4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的...

    Struts2 入门培训

    4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...

    深入浅出Struts2(附源码)

    2.1 Struts的优点 14 2.2 Struts的动作处理流程 15 2.3 拦截器 17 2.4 Struts配置文件 18 2.4.1 struts.xml文件 19 2.4.2 struts.properties文件 26 2.5 Struts应用程序示例 26 2.5.1 部署描述文件和Struts...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    18.3 使用DataSourceInjectorInterceptor拦截器 269 18.4 小结 273 第19章 定制结果类型 274 19.1 概述 274 19.2 编写一个自定义的结果类型 274 19.3 使用新的结果类型 277 19.4 小结 279 第20章 Velocity 280 ...

    J2EE实验报告

    1. 实验目的  1.1.熟悉Struts过滤器;  1.2.熟悉Struts拦截器; 2. 实验环境  2.1 MyEclipse  2.2 Window XP  2.3 MySQL

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Java Web程序设计教程

    6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3...

    宿舍管理系统

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    SpringMVC学习笔记整合搭建框架

    8、拦截器 2.Spring入门 2.1.Springmvc是什么 3.3.jdbc编程步骤: 1、加载数据库驱动 2、创建并获取数据库链接 3、创建jdbc statement对象 4、设置sql语句 5、设置sql语句中的参数(使用preparedStatement) 6、通过...

    JAVA WEB典型模块与项目实战大全

    17.6 商业银行网上账户管理系统具体实现——工具类、校验器及拦截器  17.7小结  第18章 hibernate分页系统(hibernate 3.0)  18.1 hibernate分页系统原理  18.2 封装javabean的commons-beanutils组件  18.3...

    《MyEclipse 6 Java 开发中文教程》前10章

    10.3.3 装配拦截器和Bean 212 10.3.4 测试和运行 214 10.3.5 AOP简介和相关概念 214 10.3.6 关于java.lang.ClassCastException: $Proxy0错误的解决方法 216 10.4 开发 Spring 2.0 AOP 应用 219 10.4.1 使用aop 标签...

Global site tag (gtag.js) - Google Analytics