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

Spring 2.5 Interceptor

阅读更多
一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理。
Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。

Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。他有三个方法:

 

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  
        throws Exception {  
        return true;  
    }  
    public void postHandle(  
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)  
            throws Exception {  
    }  
    public void afterCompletion(  
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)  
            throws Exception {  
    }  


分别实现预处理、后处理(调用了Service并返回ModelAndView,但未进行页面渲染)、返回处理(已经渲染了页面)
在preHandle中,可以进行编码、安全控制等处理;
在postHandle中,有机会修改ModelAndView;
在afterCompletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。

如果基于xml配置使用Spring MVC,
可以利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping进行Url映射(相当于struts的path映射)和拦截请求(注入interceptors),
如果基于注解使用Spring MVC,可以使用DefaultAnnotationHandlerMapping注入interceptors。
注意无论基于xml还是基于注解,HandlerMapping bean都是需要在xml中配置的。

一个demo:
在这个例子中,我们假设UserController中的注册操作只在9:00-12:00开放,那么就可以使用拦截器实现这个功能。   

public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {  
    private int openingTime;  
    private int closingTime;  
    private String mappingURL;//利用正则映射到需要拦截的路径  
    public void setOpeningTime(int openingTime) {  
        this.openingTime = openingTime;  
    }  
    public void setClosingTime(int closingTime) {  
        this.closingTime = closingTime;  
    }  
    public void setMappingURL(String mappingURL) {  
        this.mappingURL = mappingURL;  
    }  
    @Override  
    public boolean preHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler) throws Exception {  
        String url=request.getRequestURL().toString();  
        if(mappingURL==null || url.matches(mappingURL)){  
            Calendar c=Calendar.getInstance();  
            c.setTime(new Date());  
            int now=c.get(Calendar.HOUR_OF_DAY);  
            if(now<openingTime || now>closingTime){  
                request.setAttribute("msg", "注册开放时间:9:00-12:00");  
                request.getRequestDispatcher("/msg.jsp").forward(request, response);  
                return false;  
            }  
            return true;  
        }  
        return true;  
    }  
}  


xml配置: 

 

<bean id="timeBasedAccessInterceptor" class="com.spring.handler.TimeBasedAccessInterceptor">  
    <property name="openingTime" value="9" />  
    <property name="closingTime" value="12" />  
    <property name="mappingURL" value=".*/user\.do\?action=reg.*" />  
</bean>  
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
    <property name="interceptors">  
        <list>  
            <ref bean="timeBasedAccessInterceptor"/>  
        </list>  
    </property>  
</bean>  


这里我们定义了一个mappingURL属性,实现利用正则表达式对url进行匹配,从而更细粒度的进行拦截。当然如果不定义mappingURL,则默认拦截所有对Controller的请求。

UserController: 

@Controller  
@RequestMapping("/user.do")  
public class UserController{  
    @Autowired  
    private UserService userService;  
    @RequestMapping(params="action=reg")  
    public ModelAndView reg(Users user) throws Exception {  
        userService.addUser(user);  
        return new ModelAndView("profile","user",user);  
    }  
    // other option ...  
}  


这个Controller相当于Struts的DispatchAction

你也可以配置多个拦截器,每个拦截器进行不同的分工.

分享到:
评论

相关推荐

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    struts2+spring2.5+hibernate3.2

    Struts2、Spring2.5和Hibernate3.2是经典的Java Web开发框架组合,被称为SSH(Struts2、Spring、Hibernate)集成。这个整合包可能是为了帮助开发者快速搭建基于这些技术的项目环境。 Struts2是MVC(Model-View-...

    struts2+spring2.5+hibernate3整合经典实例

    Struts2、Spring2.5和Hibernate3是Java Web开发中的三大框架,它们的整合能够构建出高效、灵活的企业级应用程序。在这个经典实例中,我们将深入探讨如何在MyEclipse 5.1环境下,利用这三个框架进行项目集成,并与...

    spring2.5 struts2.0 Integration 完整源码下载

    Spring 2.5 和 Struts 2.0 集成是 Java Web 开发中一个常见的技术组合,它结合了 Spring 框架的强大功能和 Struts 2 框架...Struts 2_Spring2.5 的完整源码下载可以帮助开发者深入理解这种集成方式,进一步学习和实践。

    jbpm4整合struts2+spring2.5+hibernate3.3

    **jbpm4整合struts2+spring2.5+hibernate3.3** 是一个经典的Java企业级应用集成框架,用于构建业务流程管理系统。jbpm4是Business Process Management(业务流程管理)的一个开源框架,它允许开发者设计、执行、监控...

    最新Struts2.1+Spring2.5+Hibernate3.3整合开发

    Struts2.1、Spring2.5和Hibernate3.3是Java Web开发中经典的三大框架,它们的整合应用是企业级应用开发中的常见实践。这三个框架的集成为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入(DI)...

    Struts2 Spring2.5 Hibernate3

    Struts2、Spring2.5和Hibernate3是Java Web开发中的三大核心技术,它们共同构建了企业级应用的基础架构。这三者之间的集成和协同工作,极大地提升了开发效率和应用程序的可维护性。以下是对这三个技术及其集成的详细...

    struts2 hibernate3 spring2.5 annotation 整合

    Struts2、Hibernate3和Spring2.5是Java Web开发中的三大框架,它们各自负责不同的职责,但可以协同工作以构建高效的企业级应用。这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发...

    Java代码生成工具 绿色版_生成Struts2.1.8,Spring2.5,Hibernate3代码

    Java代码生成工具是一种高效开发辅助软件,主要用于自动化生成基于Java技术栈的Web应用程序代码,尤其针对Struts2.1.8、Spring2.5和Hibernate3这三个经典框架的集成应用。这样的工具能够显著提高开发效率,减少手动...

    struts2+spring2.5+hibernate api

    Struts2、Spring2.5和Hibernate是Java开发中经典的三大框架,它们分别负责MVC模式中的动作控制、依赖注入以及持久化管理。这三大框架的整合使用,能够构建出高效、灵活的企业级应用。 **Struts2** 是一个基于MVC...

    struts2+spring2.5+Hibernate3.2整合示例

    Struts2、Spring和Hibernate是Java Web开发中的三...以上就是关于“Struts2+Spring2.5+Hibernate3.2整合示例”的主要知识点,这个整合实例涵盖了Java Web开发中的重要技术,对于开发者来说,深入学习和实践将非常有益。

    struts2_spring2.5_ibatis开发指南

    `spring2.5参考手册.pdf` 和 `spring2轻量级j2ee开发框架原理与实践.pdf` 提供了关于Spring核心组件、IoC容器、AOP、事务管理等全面的指导,有助于开发者充分利用Spring来构建松耦合、可维护的应用程序。 **iBATIS*...

    struts2+spring2.5+hibernate3.2 例子

    Struts2、Spring2.5和Hibernate3.2是经典的Java Web开发框架组合,它们各自在应用程序的不同层面提供了强大的功能。下面将详细解释这三个框架以及它们如何协同工作。 **Struts2** Struts2是一个基于MVC(Model-View...

    spring2.5 struts2.0 hibernate3.1

    标题 "spring2.5 struts2.0 hibernate3.1" 涉及到的是一个经典的Java企业级开发框架组合,通常被称为“SSH”(Spring、Struts和Hibernate)。这个组合在过去的许多年里被广泛应用,为构建高效、可维护的Web应用程序...

    struts2+spring2.5+ibatis

    Struts2、Spring2.5和iBatis是经典的Java Web开发框架组合,它们共同构建了一个灵活、高效的企业级应用程序架构。在这个组合中,Struts2作为MVC(Model-View-Controller)框架负责处理用户请求,Spring2.5则提供依赖...

    基于struct2.1 hibernate3.0 spring2.5 BBS系统

    《基于Struct2.1 Hibernate3.0 Spring2.5的BBS系统详解》 在信息技术领域,构建一个高效、稳定且功能丰富的BBS(Bulletin Board System,电子公告板)系统是一项重要的任务。本系统是基于Struct2.1、Hibernate3.0和...

    struts2+spring2.5+hibernate3 的中文api(PDF)

    Struts2、Spring2.5和Hibernate3是Java开发领域中的三大开源框架,它们各自扮演着不同的角色,共同构建了一个强大的企业级应用解决方案。这里,我们深入探讨这三大框架的核心功能和结合使用的方式。 **Struts2** 是...

    struts2.1 + hibernate3.2+spring2.5整合视频

    Struts2.1、Hibernate3.2和Spring2.5是Java Web开发中经典的MVC框架集成,被誉为“S2SH”组合。这个整合视频教程旨在帮助开发者掌握这三大框架的协同工作,提升Web应用的开发效率和质量。 Struts2作为Action层框架...

    struts2.0 spring2.5 hibernate3.0

    Struts2.0、Spring2.5和Hibernate3.0是Java Web开发中经典的三大框架,它们各自在应用程序的不同层面提供了强大的支持,并且通过合理的整合,可以构建出高效、灵活的MVC(Model-View-Controller)架构的应用程序。...

    整合struts2+spring2.5+ibatis

    Struts2、Spring2.5和iBatis是Java Web开发中的三大框架,它们的整合使用可以帮助开发者构建高效、灵活的MVC(Model-View-Controller)架构的应用程序。Struts2作为表现层框架,提供了丰富的动作调度和结果处理;...

Global site tag (gtag.js) - Google Analytics