我一般使用struts2的时候都是匹配所有类型的,这时候就会出现一个问题,当去访问一个servlet的时候就系统会把它当作一个action来访问,就会出现找不到action的问题。所以这个时候就需要实现一个filter来过滤servlet,并且这个filter要放在struts2的filter之前,要在把它当作一个action之前直接把它进行跳转访问servlet
代码:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletFilter implements Filter {
private List<String> targets = new ArrayList<String>();
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String uri = req.getRequestURI();
String target = uri.indexOf("?") > 0 ? uri.substring((uri.lastIndexOf("/")+1),uri.indexOf("?")) : uri.substring(uri.lastIndexOf("/")+1);
//servlet的URL用的都是servlet/servlet的名称
if (uri.contains("servlet") && targets.contains(target)) {
req.getRequestDispatcher(uri.substring(9)).forward(req, resp);
} else {
chain.doFilter(req, resp);
}
}
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
String targets = config.getInitParameter("targets");//在web.xml里面声明的filter里面的参数指定哪些servlet是需要过滤的,也可以不指定,直接过滤所有的servlet
this.targets.addAll(Arrays.asList(targets.split(",")));
}
}
分享到:
相关推荐
本文将通过一个具体的示例来详细介绍如何在Struts2项目中配置过滤器。 #### 二、过滤器配置实例分析 ##### 2.1 web.xml配置解析 在给定的web.xml配置文件中,可以看到对`SessionInvalidate`过滤器进行了定义和...
Servlet Filter(过滤器)是Servlet API的一部分,它允许开发者在请求被Servlet处理之前或之后对请求和响应进行拦截和修改。Filter可以用来实现如登录验证、字符编码转换、日志记录等多种功能。当一个请求到达Web...
本篇将深入讲解Java Servlet过滤器的配置,包括`EncodingFilter`类的使用、jsp页面配置以及`web.xml`文件的配置。 首先,`EncodingFilter`是一个常见的过滤器,主要用于解决HTTP请求和响应中的编码问题。在处理中文...
当一个项目同时使用了Struts2框架和直接的Servlet时,可能会遇到问题,因为Struts2有自己的请求处理流程,可能会覆盖或干扰到Servlet的正常工作。为了解决这个问题,可以创建一个过滤器,例如`ReDispatcherFilter`...
在Web应用的`web.xml`配置文件中,我们需要定义一个过滤器,并将其关联到Struts2的Action请求。过滤器的配置包括: - 定义过滤器类:通常实现`javax.servlet.Filter`接口。 - 配置过滤器映射,将过滤器应用于所有...
Struts2是一个非常流行的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,过滤器扮演着至关重要的角色,它们在请求到达实际的Action之前处理HTTP请求,提供了诸如认证、授权、数据转换...
总的来说,这个"通用过滤器filter"是Struts2项目的一个实用组件,它增强了应用的安全性并简化了配置工作。通过理解和定制这样的过滤器,开发者可以更好地控制Web应用的行为,同时确保用户交互的安全。
过滤器可以形成一个链,按照定义的顺序执行。 再来看拦截器(Interceptor),这是Java EE中的一个高级概念,尤其在Spring MVC和Struts2等框架中常见。拦截器不直接参与到Servlet生命周期,而是工作在Controller调用...
本篇文章将详细介绍如何在Struts2中实现文件上传功能以及使用过滤器进行文件类型的过滤。 首先,理解Struts2文件上传的基本原理。Struts2提供了`org.apache.struts2.interceptor.FileUploadInterceptor`拦截器来...
在Struts2中,可以通过实现`Filter`接口或者继承`FilterDispatcher`类来自定义过滤器。在这个过滤器的`doFilter`方法中,我们可以检查请求是否带有自动登录相关的Cookie。如果找到该Cookie,就从Cookie中解析出用户...
在`struts过滤器(拦截器)程序.zip`中,我们可以看到这些概念如何在实际项目中得到运用,包括`web.xml`的配置、`struts.xml`的拦截器定义以及相关的Java源码和JSP页面,它们共同构成了一个完整的Struts2应用实例。
过滤器是标准的Servlet组件,可在任何支持Servlet的Web应用中使用。 - **生命周期**:拦截器的生命周期由框架控制;过滤器的生命周期由Servlet容器控制,可以独立于应用启动和关闭。 3. 文件上传 - **基本概念**...
Struts2是一个强大的MVC框架,它为Java Web应用程序提供了优雅的架构支持。在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例...
3. **配置文件**:Struts2的配置文件通常是`struts.xml`,定义了Action与结果的映射,过滤器设置,拦截器链等。它允许开发者以声明式的方式配置应用程序的行为。 4. **拦截器(Interceptor)**:拦截器是Struts2的...
- **配置控制器**:在`web.xml`中配置Struts2的过滤器(Filter),这一步骤至关重要,因为Struts2使用过滤器而非Servlet作为控制器,这相比Struts1是一个重大改进。 - **验证搭建结果**:完成以上步骤后,部署应用并...
在`web.xml`配置文件中,需要定义一个名为`struts2`的过滤器,类为`org.apache.struts2.dispatcher.FilterDispatcher`。过滤器的映射应覆盖所有URL,以便所有请求都能被Struts2处理。当FilterDispatcher初始化时,它...
在`web.xml`文件中,添加一个名为`struts2`的过滤器,指向`org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter`类,并设定对应的过滤器映射。 运行项目,通过浏览器访问配置好的URL,你应该能...
Struts2的核心是`FilterDispatcher`,它是一个Servlet过滤器。当用户发起HTTP请求时,`FilterDispatcher`首先会被调用。这个过滤器负责拦截请求,根据配置(通常在struts.xml文件中)决定如何处理请求。配置中,...