`
manna_MM
  • 浏览: 17180 次
  • 性别: Icon_minigender_2
  • 来自: 重庆
社区版块
存档分类
最新评论

struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)

阅读更多
在同一个项目中间,如果既用到servlet有用了struts2的框架,运行项目时可能无法正常使用servlet,原因是在配置struts2的核心控制器时<url-pattern>/*</url-pattern>所致,需要定义一个过滤器,将servlet过滤,使struts2的核心控制器对servlet不起作用。注意:在xml文件中定义的servlet过滤器要写在struts2核心控制器前面,否则还是不能使用。举例来说,定义的过滤器文件是ReDispatcherFilter.java,只需按照该文件中注释内容做以下配置,即可。
package filters;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class ReDispatcherFilter implements Filter {
public void destroy() {
   // TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse resp,
    FilterChain chain) throws IOException, ServletException 
{
  
   HttpServletRequest request = (HttpServletRequest)req;
   String target = request.getRequestURI();
   target = target.lastIndexOf("?")>0   
      ?target.substring(target.lastIndexOf("/")+1,target.lastIndexOf("?")-target.lastIndexOf("/"))
      :target.substring(target.lastIndexOf("/")+1);
  
   System.out.println(target);
   if(this.includes.contains(target))
   {
    RequestDispatcher rdsp = request.getRequestDispatcher(target);
   
    System.out.println("go..............."+rdsp);
    rdsp.forward(req, resp);
   }
   else
    chain.doFilter(req, resp);
}
private ArrayList<String> includes = new ArrayList<String>();

public void init(FilterConfig config) throws ServletException {
  
   this.includes.addAll( Arrays.asList(config.getInitParameter("includeServlets").split(",")));
}
}

/*该类是定义了一个过滤器,当既用到struts2有用到servlet时,
* 必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。
* 同时在web.xml中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:
*/ <filter>
   <filter-name>redisp</filter-name>
   <filter-class>filters.ReDispatcherFilter(该过滤器的类名)</filter-class>
   <init-param>
    <param-name>includeServlets</param-name>
    <param-value>所有配置的servlet名字</param-value>
   </init-param>
 </filter>
 <filter-mapping>
   <filter-name>redisp</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>
分享到:
评论

相关推荐

    struts2和servlet的共存问题

    但在某些场景下,开发者可能需要同时使用Struts2和其他Servlet技术(如自定义Servlet或第三方Servlet),这时就会遇到Struts2与Servlet的共存问题。 #### 二、问题描述 当Struts2作为Web应用程序的前端控制器时,...

    Struts2访问ServletAPI

    当一个请求到达服务器时,Struts2的过滤器(通常名为`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`)会捕获这个请求,然后根据配置的Action映射决定执行哪个Action。在Action执行过程中,如果需要直接访问...

    Struts 2 过滤器和拦截器的区别

    ### Struts 2 过滤器与拦截器的深入解析 #### 一、概述 在Struts 2框架中,过滤器(Filter)和拦截器(Interceptor)都是用于处理请求的关键组件,但它们之间存在本质的区别。正确理解这些差异有助于开发者更高效地...

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    Servlet Filter(过滤器)是Servlet API的一部分,它允许开发者在请求被Servlet处理之前或之后对请求和响应进行拦截和修改。Filter可以用来实现如登录验证、字符编码转换、日志记录等多种功能。当一个请求到达Web...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器(Interceptor) 拦截器是 Struts2 框架中的...

    Struts2中Servlet的配置

    当一个项目同时使用了Struts2框架和直接的Servlet时,可能会遇到问题,因为Struts2有自己的请求处理流程,可能会覆盖或干扰到Servlet的正常工作。为了解决这个问题,可以创建一个过滤器,例如`ReDispatcherFilter`...

    struts2 拦截器

    1. **拦截器是什么**:拦截器是一种动态拦截Action调用的对象,它可以理解为一个过滤器,它在Action被调用之前和之后执行特定的逻辑。Struts2的拦截器是基于Java的Servlet Filter机制实现的,但是更加强大和灵活。 ...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    Struts2编写的通用(拦截器,过滤器)Filter

    总结来说,这个项目提供了Struts2中拦截器和过滤器的实际应用示例,特别关注了用户身份验证和非法访问控制。通过深入研究和实践这个示例,开发者可以更深入地理解这两个组件,并能够将这些知识应用于自己的项目中,...

    Servlet简单模拟Struts2

    为了达到类似Struts2的效果,我们可以创建一个Servlet过滤器(Filter),在`doFilter`方法内进行请求的初步处理和转发。过滤器可以注册到web.xml文件中,对特定URL路径或所有请求进行拦截。 2. **解析自定义XML数据...

    使用struts2拦截器对登陆权限验证

    在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...

    Struts2之Servlet API及单元测试初识案例struts005

    1. **过滤器(Filter)**:Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`负责初始化Action上下文,处理请求并执行Action。它会解析请求参数,根据配置文件确定Action,然后调用Action的execute方法。 2. **...

    struts2拦截器原理

    Struts2 拦截器是基于Java的Servlet Filter设计模式的一种实现,它提供了一种在Action执行前后插入额外逻辑的方式。拦截器是Struts2框架的核心组件之一,用于增强应用的功能,比如权限验证、日志记录、数据校验等。 ...

    struts2实例 自定义过滤器 文件上传下载 登录功能

    在Struts2中,过滤器(Filter)是Servlet API的一部分,用于拦截请求并在请求到达目标资源之前进行处理。自定义过滤器允许开发者根据需求添加特定的处理逻辑,如权限验证、日志记录或内容修改。创建自定义过滤器需...

    Struts 2 过滤器的总结

    Struts 2框架中的过滤器(Filter)是Servlet规范的一部分,主要用于在请求到达目标资源(如JSP、Servlet或其他资源)之前或响应返回客户端之前进行预处理或后处理。过滤器能够检查和修改`ServletRequest`和`Servlet...

    java-web -- servlet 拦截器 过滤器使用

    在Java Web开发中,Servlet、拦截器(Interceptor)和过滤器(Filter)是三个非常重要的概念,它们在处理HTTP请求和响应时起到了关键作用。理解并熟练运用这三者能够帮助开发者实现更高效、更安全的Web应用。 首先...

    struts2.0字符编码使用过滤器

    本示例通过使用过滤器(Filter)来解决这个问题,确保了数据在传输过程中的正确编码,从而避免乱码。 1. **Struts2.0框架介绍** Struts2.0是一个基于MVC设计模式的Java Web框架,它整合了WebWork和Struts1的优点,...

    struts过滤器(拦截器)程序.zip

    在`struts过滤器(拦截器)程序.zip`中,我们可以看到这些概念如何在实际项目中得到运用,包括`web.xml`的配置、`struts.xml`的拦截器定义以及相关的Java源码和JSP页面,它们共同构成了一个完整的Struts2应用实例。

    struts2 Action 包 命名空间 servlet API

    总的来说,Struts2 Action包的命名空间和Servlet API的结合使用,使得开发者能够灵活控制请求的处理流程,通过拦截器实现通用功能,同时利用视图组件创建丰富的用户界面。通过对框架核心类的了解,可以更深入地掌握...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。

Global site tag (gtag.js) - Google Analytics