在struts2中使用filter来配置servlet处理业务。。。。
在一个struts2项目中,如果同时用到了servlet和struts2的框架,运行项目时可能无法正常使用servlet,原因是在配置struts2的核心控制器时如下配置所致
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
此时要想请求不经过该FilterDispatcher过滤器而直接响应servlet,可以通过自定义一个过滤器,将servlet过滤,使struts2的核心控制器对servlet不起作用。注意:在xml文件中定义的servlet过滤器要写在struts2核心控制器前面,否则还是不能使用。举例来说,定义的过滤器文件是ReDispatcherFilter.java,只需按照该文件中注释内容做以下配置,即可
<filter>
<filter-name>redisp</filter-name>
<filter-class>filters.ReDispatcherFilter</filter-class>
<init-param>
<param-name>includeServlets</param-name>
<param-value>attachmentUpload.do,aa.do</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>redisp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>attachmentUpload</servlet-name>
<servlet-class>com.yan.AttachmentUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>attachmentUpload</servlet-name>
<url-pattern>/attachmentUpload.do</url-pattern>
</servlet-mapping>
在filters包下定义ReDispatcherFilter类,如下:
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
{
System.out.println(" filter beginning...........");
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);
for(int i=0;i<this.includes.size();i++)
System.out.println(this.includes.get(i));
if(this.includes.contains(target))
{
System.out.println("includes.contains(target) is true");
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容器中的配置有所不同,主要是为了更好地整合框架的功能。以下是关于Struts2中Servlet配置的相关知识点: 1. **实现ServletResponseAware/ServletRequestAware...
##### 方法4:在Struts配置文件中调整 - **具体操作**:在`struts.xml`配置文件中调整拦截器的匹配规则,避免不必要的拦截。 - **实现步骤**: - 在`struts.xml`中找到或创建一个拦截器栈,并调整其匹配规则,确保...
在Struts2中实现文件上传,我们需要配置Action类、表单以及struts.xml配置文件。Action类会处理用户提交的请求,表单用于收集用户选择的文件,而struts.xml则定义了请求的映射和处理逻辑。Struts2提供了File和Files...
当一个请求到达服务器时,Struts2的过滤器(通常名为`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`)会捕获这个请求,然后根据配置的Action映射决定执行哪个Action。在Action执行过程中,如果需要直接访问...
在这个“Struts2之Servlet API及单元测试初识案例struts005”中,我们将探讨Struts2如何与Servlet API结合使用,以及如何进行单元测试。 Servlet API是Java EE平台的核心部分,用于构建动态Web应用程序。Struts2...
综上所述,本案例“Struts2之Servlet文件上传详解”将引导你了解如何结合Struts2和Servlet实现文件上传功能,包括配置、Action编写、JSP页面设计以及注意事项。通过实践,你将更深入地理解Struts2框架在处理复杂Web...
### Struts2配置过滤器详解 #### 一、概述 Struts2是基于MVC模式的一个开源框架,它能够帮助开发者构建出结构清晰且易于维护的Web应用。在实际开发过程中,为了实现某些功能(例如用户认证、权限控制等),往往...
本教程将指导你如何配置环境,以便使用Struts2、Servlet和Spring进行Web开发。首先,我们需要确保已经安装了Eclipse for JavaEE、Struts2、Servlet容器(如Tomcat)以及Spring框架的相关依赖。 **1. 安装与配置** ...
在Struts2中,用户请求首先会被Struts2的ActionServlet拦截,然后通过配置的Action映射找到对应的Action类来处理请求。Action执行完成后,返回一个Result,该Result定义了如何展示结果,可能是跳转到一个新的JSP页面...
2. 服务器接收到请求后,Servlet容器(如Tomcat)根据web.xml中的配置找到对应的Servlet(通常是Struts的Front Controller,如.struts2Dispatcher)。 3. Struts DispatcherServlet解析请求,根据配置文件确定要调用...
开发者可以通过设置这些插件的配置选项,控制上传行为,如限制文件类型、大小,或者设定上传的URL(通常是Struts2 Action或Servlet的URL)。 总的来说,Struts2和JSP Servlet在文件上传方面各有优势,Struts2提供了...
3. **Servlet API**:由于Struts2是基于Servlet技术的,因此需要`javax.servlet-api.jar`和`javax.servlet.jsp-api.jar`,它们提供了Servlet和JSP的API接口。 4. **Spring框架**:SSH(Struts2、Spring、Hibernate...
- `<servlet>`: 配置Servlet的相关信息。 - `<servlet-mapping>`: 映射Servlet的URL模式。 - `<taglib>`: 配置标签库的位置和URI。 ##### 2. 为Struts2应用配置web.xml - **ActionServlet 配置**: - 使用 `...
- **Struts配置文件**:是Struts2的核心配置文件,通常位于`/WEB-INF/struts-config.xml`。 - 配置文件中定义了框架的主要行为,如Action映射、拦截器、结果类型等。 - 通过`struts-config.xml`文件,可以灵活地控制...
### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...
其次,`web.xml`是Servlet容器的部署描述符,虽然不是Struts2特有的,但在Struts2应用中也需要进行配置。以下是`web.xml`中与Struts2相关的配置: 1. **Struts2 Filter**:你需要定义一个`Filter`来初始化Struts2...
《基于Struts2和Servlet的学生信息管理系统开发详解》 在Java Web开发领域,构建一个高效、易维护的学生信息管理系统是一项常见的任务。本项目利用Struts2框架和Servlet技术,结合MySQL数据库,为教学环境提供了...
在本主题"Servlet简单模拟Struts2"中,我们将探讨如何利用Servlet来实现类似Struts2框架的一些关键功能,包括请求拦截、XML配置解析、动态代理以及日志拦截。 首先,让我们了解一下Struts2框架的核心特性。Struts2...
### Struts2核心配置文件详解 #### 一、概述 Struts2框架是Java Web开发领域内一个重要的轻量级框架,它简化了基于MVC(Model-View-Controller)设计模式的应用程序开发过程。在Struts2框架中,有两个核心配置文件...