`

struts2学习笔记5-拦截器和监听器

阅读更多
第一种方法:
直接implements实现com.opensymphony.xwork2.interceptor.Interceptor
public class MyInterceptor implements Interceptor {

	public void destroy() {
		System.out.println("destroy()");
	}

	public void init() {
		System.out.println("init()");
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("Interceptor");
		String result = invocation.invoke();
		return result;
	}

}


第二种方法
直接extends com.opensymphony.xwork2.interceptor.AbstractInterceptor
这种方法是少了destroy,init方法
public class MyInterceptor2 extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("MyInterceptor2222");
		String result = invocation.invoke();
		return result;
	}

}


第三种方法
直接extends com.opensymphony.xwork2.interceptor.MethodFilterInterceptor
这种方法能对Action里面的方法级进行控制,是否执行这个方法

public class MyInterceptor3 extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("use MethodFilterInterceptor");
		String result = invocation.invoke();
		return result;
	}

}


然就是配置
<interceptors>
			<interceptor name="myInterceptor" class="com.langhua.interceptor.MyInterceptor">				
			</interceptor>
			
			<interceptor name="myInterceptor2" class="com.langhua.interceptor.MyInterceptor2">
			</interceptor>
			
			<interceptor name="myInterceptor3" class="com.langhua.interceptor.MyInterceptor3">
				<param name="excludeMethods">execute</param>
				<param name="includeMethods">addmessage</param>
			</interceptor>
			
			<interceptor-stack name="myInterceptorStack">
				<interceptor-ref name="myInterceptor3"></interceptor-ref>				
				<interceptor-ref name="defaultStack"></interceptor-ref>				
			</interceptor-stack>
		</interceptors>

里面分interceptor和interceptor-stack
stack也能引用stack

default-interceptor-ref表示Action如果不指定interceptor就用这个default的

extends="struts-default"表示这个XML文件是extends 另一个xml的,名字叫struts-default

在这个XML中,配置了一个常用的interceptor可以去Core包中找到这个XML

interceptor配置很灵活的。如果要写自己的interceptor就要把<interceptor-ref name="defaultStack"></interceptor-ref>默认的给加上,当然也可以自己配置。

interceptor的参数
<interceptor-stack name="myInterceptorStack">
				<interceptor-ref name="myInterceptor3"></interceptor-ref>				
				<interceptor-ref name="defaultStack"></interceptor-ref>				
			</interceptor-stack>

这个是因为MethodFilterInterceptor 里有这两个成员变量,如果你自己的interceptor要带参数的话就要相应的Action里面写到成员变量,并加上get,set方法

public abstract class MethodFilterInterceptor extends AbstractInterceptor {
    protected transient Logger log = LoggerFactory.getLogger(getClass());
    
    protected Set<String> excludeMethods = Collections.emptySet();
    protected Set<String> includeMethods = Collections.emptySet();


监听器
首先要实现com.opensymphony.xwork2.interceptor.PreResultListener类
并重写里面的方法beforeResult
public class MyListener implements PreResultListener {

	public void beforeResult(ActionInvocation invocation, String resultCode) {
		System.out.println(resultCode);
	}

}


然后再在拦截器里面调用
invocation.addPreResultListener(new MyListener());

监听器是在这个拦截器完成别的拦截器之后调用的


struts2 Action获得HttpSession,HttpServletRequest,HttpSevletResponse的方法
非IOC方式
这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类
ActionContext ctx = ActionContext.getContext();        
       
  HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);        
       
  HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);        
         
  //ServletActionContext.APPLICATION;        
  //ServletActionContext.SESSION;        
  //ServletActionContext.PAGE_CONTEXT;   
//或者
HttpServletRequest request = ServletActionContext.getRequest (); 

主要是这两个类com.opensymphony.xwork2.ActionContext和org.apache.struts2.ServletActionContext都对request等进行了大量的封装,直接调用方法就可以获和

更好一点的IOC方式
action类实现ServletRequestAware接口,并新建一个HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
 然后可以生成的request得到对象,如request.getRemoteAddr()
action类实现SessionAware接口,并创建一个MAP对象session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
public void setSession(Map session) {
  this.session=session;  

}

这些获得HttpServletRequest等对象需要implments的接口都在
org.apache.struts2.interceptor下面
如Apllication的是ApplicationAware
如HttpSession的是SessionAware(struts2的Session都被封装成Map了)
如HttpServletRequest的是ServletRequestAware
如HttpServletResponse的是ServletResponseAware

还有一种使用org.apache.struts2.ServletActionContext的方法
如ServletActionContext.getRequest();
分享到:
评论

相关推荐

    struts学习笔记

    ### Struts学习笔记详解 #### 一、Struts框架概览与编码设置 在学习Struts框架时,首要关注的是其编码配置。如代码片段所示,`struts.i18n.encoding`常量被设置为`UTF-8`,这确保了国际化(I18N)资源文件的正确...

    java笔记 Java-Web笔记 J2EE三大框架笔记

    过滤器和监听器作为扩展点,可以实现请求拦截、会话管理等功能,增强了应用的灵活性和可维护性。 接下来,J2EE(Java Platform, Enterprise Edition)是Java在企业级应用开发中的标准平台,它定义了一系列规范和...

    ssh2学习笔记

    根据提供的文件信息,我们可以深入探讨与...通过学习这样的框架,开发者不仅可以掌握Struts2、Spring和Hibernate的基本使用方法,还能了解如何将这些技术有效地整合在一起,从而构建出稳定可靠的Java Web应用程序。

    SSH学习笔记5 SSH学习笔记5

    Struts2作为控制器层,处理HTTP请求,Spring通过Interceptor拦截器与Struts2协同工作。 6.3 Hibernate集成 Hibernate作为持久化层,Spring通过HibernateTemplate或SessionFactoryBean管理SessionFactory,实现...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    java web学习笔记

    5. **Filter(过滤器)和Listener(监听器)**:这两种技术用于增强Web应用的功能。Filter可以拦截请求和响应,实现如权限控制、日志记录等功能。Listener则监听Web应用中的特定事件,如session的创建、销毁,或者...

    javaWeb学习笔记+狂神说

    Spring MVC和Struts2是常见的JavaWeb MVC框架。 七、JDBC(Java Database Connectivity) JDBC是Java访问数据库的标准API,它提供了一套接口和类,使得Java程序可以连接、查询、更新和管理各种类型的数据库。在...

    本仓库包含Java学习笔记和大数据学习笔记,主要包含Java基础、JavaWEB、Java框架、大数据主要框架。主.zip

    过滤器和监听器则是JavaWeb中的重要组件,用于拦截请求、响应,实现数据处理和状态管理。 3. **Java框架**: 在Java开发中,框架极大地提高了开发效率和代码质量。Spring框架是JavaEE领域的核心框架,它提供了依赖...

    MLDN笔记 含J2SE,Web和框架部分

    3. **Struts2框架**:Action类,结果类型,拦截器,以及Struts2与Spring的整合。 4. **Hibernate框架**:对象关系映射(ORM),实体类,SessionFactory,Session,Query语言,以及事务管理。 5. **Spring Boot**:...

    狂神说JavaWeb笔记.rar

    五、过滤器和监听器 过滤器(Filter)在请求到达目标资源之前对请求和响应进行拦截,可以实现权限验证、字符编码转换等功能。监听器(Listener)监听特定事件,如会话创建、销毁、请求到达等,可实现用户在线状态...

    JAVAWEB开发实战经典(课堂笔记)

    6. **过滤器与监听器**:在Java Web中,过滤器和监听器是两种增强应用程序功能的工具。过滤器可以拦截请求和响应,进行预处理或后处理;监听器则可以监听Web组件的生命周期事件。笔记会解释如何配置和使用它们。 7....

    JavaWeb笔记整理(全面)

    7. **过滤器(Filter)与监听器(Listener)**:过滤器可以对HTTP请求和响应进行拦截和修改,监听器则可以监听特定的事件,如会话创建、销毁,或者Servlet的初始化和销毁。 8. **Tomcat服务器**:Tomcat是一款开源...

    跃达创新JAVA课堂笔记

    3. **Struts框架**:Struts是Java Web开发中常用的MVC框架,笔记中会讲解其架构、配置文件、Action类的编写、Struts拦截器以及如何整合其他技术如Hibernate和Spring。 4. **JSP培训笔记**:JSP(Java Server Pages...

    达内笔记(基础性,很有价值)

    Struts1.x采用配置文件定义动作映射,而Struts2则提供了更灵活的注解配置和拦截器机制。 【Hibernate】:Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者以面向对象的方式来操作数据库。通过XML或注解...

    java学习资料03

    "struts"的出现意味着这个压缩包可能包含了有关如何使用Struts框架进行Web开发的学习资料,如Struts的配置文件、控制器Action的编写、视图JSP页面的创建、模型Bean的定义以及拦截器的使用等。学习Struts有助于理解...

    javaweb项目实(含笔记与详细实现步骤)

    过滤器用于在请求处理前后进行拦截和修改,监听器则可以监听特定的Web事件,如session创建、销毁等,从而实现一些额外的功能。 8. **Struts、Spring MVC或JSF框架**:除了基础的Servlet和JSP,还可以学习使用流行的...

    方立勋JavaWeb视频前十一天笔记word版本

    5. **MVC框架**:学习Spring MVC或Struts2,理解它们的工作原理和配置。 6. **实战项目**:结合实际案例,整合上述知识点,开发一个简单的Web应用。 7. **高级话题**:深入学习过滤器、监听器、JNDI、EJB和JDBC等...

    JavaWeb笔记[培训时,老师做的笔记]

    5. **Filter和Listener**: 过滤器(Filter)用于拦截请求和响应,可以实现用户认证、数据过滤等功能;监听器(Listener)则用于监听Web组件的事件。笔记会介绍如何实现这两个接口,以及它们在实际应用中的作用。 6....

    太原理工大学javawebsic-m开发笔记

    9. **过滤器(Filter)和监听器(Listener)**:这两者是JavaWeb中的重要组件,过滤器可以拦截请求和响应,实现预处理或后处理;监听器则可以监听特定事件,如session的创建、销毁等。 10. **数据库连接和JDBC**:...

    LearnJavaWeb:JavaWeb学习笔记和样例

    在“LearnJavaWeb:JavaWeb学习笔记和样例”这个资源中,我们可以期待学习到以下关键知识点: 1. **Java Servlet**:Servlet是Java平台上的一个标准接口,用于扩展服务器的功能,处理HTTP请求。它提供了一种方式来...

Global site tag (gtag.js) - Google Analytics