第一种方法:
直接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.i18n.encoding`常量被设置为`UTF-8`,这确保了国际化(I18N)资源文件的正确...
过滤器和监听器作为扩展点,可以实现请求拦截、会话管理等功能,增强了应用的灵活性和可维护性。 接下来,J2EE(Java Platform, Enterprise Edition)是Java在企业级应用开发中的标准平台,它定义了一系列规范和...
根据提供的文件信息,我们可以深入探讨与...通过学习这样的框架,开发者不仅可以掌握Struts2、Spring和Hibernate的基本使用方法,还能了解如何将这些技术有效地整合在一起,从而构建出稳定可靠的Java Web应用程序。
Struts2作为控制器层,处理HTTP请求,Spring通过Interceptor拦截器与Struts2协同工作。 6.3 Hibernate集成 Hibernate作为持久化层,Spring通过HibernateTemplate或SessionFactoryBean管理SessionFactory,实现...
\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}{...
5. **Filter(过滤器)和Listener(监听器)**:这两种技术用于增强Web应用的功能。Filter可以拦截请求和响应,实现如权限控制、日志记录等功能。Listener则监听Web应用中的特定事件,如session的创建、销毁,或者...
Spring MVC和Struts2是常见的JavaWeb MVC框架。 七、JDBC(Java Database Connectivity) JDBC是Java访问数据库的标准API,它提供了一套接口和类,使得Java程序可以连接、查询、更新和管理各种类型的数据库。在...
过滤器和监听器则是JavaWeb中的重要组件,用于拦截请求、响应,实现数据处理和状态管理。 3. **Java框架**: 在Java开发中,框架极大地提高了开发效率和代码质量。Spring框架是JavaEE领域的核心框架,它提供了依赖...
3. **Struts2框架**:Action类,结果类型,拦截器,以及Struts2与Spring的整合。 4. **Hibernate框架**:对象关系映射(ORM),实体类,SessionFactory,Session,Query语言,以及事务管理。 5. **Spring Boot**:...
五、过滤器和监听器 过滤器(Filter)在请求到达目标资源之前对请求和响应进行拦截,可以实现权限验证、字符编码转换等功能。监听器(Listener)监听特定事件,如会话创建、销毁、请求到达等,可实现用户在线状态...
6. **过滤器与监听器**:在Java Web中,过滤器和监听器是两种增强应用程序功能的工具。过滤器可以拦截请求和响应,进行预处理或后处理;监听器则可以监听Web组件的生命周期事件。笔记会解释如何配置和使用它们。 7....
7. **过滤器(Filter)与监听器(Listener)**:过滤器可以对HTTP请求和响应进行拦截和修改,监听器则可以监听特定的事件,如会话创建、销毁,或者Servlet的初始化和销毁。 8. **Tomcat服务器**:Tomcat是一款开源...
3. **Struts框架**:Struts是Java Web开发中常用的MVC框架,笔记中会讲解其架构、配置文件、Action类的编写、Struts拦截器以及如何整合其他技术如Hibernate和Spring。 4. **JSP培训笔记**:JSP(Java Server Pages...
Struts1.x采用配置文件定义动作映射,而Struts2则提供了更灵活的注解配置和拦截器机制。 【Hibernate】:Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者以面向对象的方式来操作数据库。通过XML或注解...
"struts"的出现意味着这个压缩包可能包含了有关如何使用Struts框架进行Web开发的学习资料,如Struts的配置文件、控制器Action的编写、视图JSP页面的创建、模型Bean的定义以及拦截器的使用等。学习Struts有助于理解...
过滤器用于在请求处理前后进行拦截和修改,监听器则可以监听特定的Web事件,如session创建、销毁等,从而实现一些额外的功能。 8. **Struts、Spring MVC或JSF框架**:除了基础的Servlet和JSP,还可以学习使用流行的...
5. **MVC框架**:学习Spring MVC或Struts2,理解它们的工作原理和配置。 6. **实战项目**:结合实际案例,整合上述知识点,开发一个简单的Web应用。 7. **高级话题**:深入学习过滤器、监听器、JNDI、EJB和JDBC等...
5. **Filter和Listener**: 过滤器(Filter)用于拦截请求和响应,可以实现用户认证、数据过滤等功能;监听器(Listener)则用于监听Web组件的事件。笔记会介绍如何实现这两个接口,以及它们在实际应用中的作用。 6....
9. **过滤器(Filter)和监听器(Listener)**:这两者是JavaWeb中的重要组件,过滤器可以拦截请求和响应,实现预处理或后处理;监听器则可以监听特定事件,如session的创建、销毁等。 10. **数据库连接和JDBC**:...
在“LearnJavaWeb:JavaWeb学习笔记和样例”这个资源中,我们可以期待学习到以下关键知识点: 1. **Java Servlet**:Servlet是Java平台上的一个标准接口,用于扩展服务器的功能,处理HTTP请求。它提供了一种方式来...