在一个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(",")));
}
}
分享到:
相关推荐
3. **测试验证**:实施完任何一种解决方案后,都需要进行全面的功能测试,确保所有功能模块都能正常工作。 通过上述分析可以看出,虽然Struts2与Servlet共存的问题看似棘手,但只要采取合理的策略,完全可以有效...
Struts2框架通过精巧的设计和组件化的实现,提供了高效、灵活的Web应用程序开发解决方案。其工作流程从请求接收、解析到响应生成,每一个环节都体现了对MVC模式的深刻理解和实践,为Java Web开发者提供了一个强大而...
### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...
Struts2是一个强大的Java web开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用的解决方案。在本教程和API文档中,我们将深入理解Struts2的核心概念、功能...
Struts2 是一个基于 Java Servlet 技术的开源 web 应用程序框架,它提供了一个灵活、可扩展的解决方案来构建企业级 web 应用程序。Struts2 框架的核心是 Action,Action 是一个包含了业务逻辑的 Java 类,它负责处理...
Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建高效、可扩展且易维护的Web应用的解决方案。本实例是针对初学者的一个实践教程,旨在帮助理解并掌握...
它的出现旨在解决JSP页面和Servlet在处理动态Web内容时的混乱情况,提供一个结构化的解决方案,使得开发人员能够更有效地组织和构建可维护性更强的Web应用。 在Struts框架中,Model代表业务逻辑,通常由JavaBeans或...
总之,Struts2框架以其强大的功能和灵活性,为Java Web开发提供了一个高效、可扩展的解决方案,尤其对于初学者来说,其结构清晰,易于理解和上手。通过学习和实践Struts2,开发者可以更好地掌握MVC模式在Web开发中的...
### servlet与struts简介 #### 一、Servlet概述 Servlet是一种服务器端的Java技术,用于扩展Web服务器的功能。...即使不直接使用Struts,了解其设计理念也能为未来的Servlet和JSP开发提供宝贵的思路。
针对"Struts2 跳转至404 页面的解决方案"这个主题,我们将深入探讨可能的原因和解决方法。 首先,我们来看`struts.xml`文件,这是Struts2的核心配置文件,负责定义Action、结果类型、拦截器等关键组件。当Struts2...
Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...
Struts2允许开发者根据项目需求定制自己的解决方案,而丰富的插件和社区资源则提供了大量现成的解决方案,降低了开发难度和维护成本。 接下来,我们会对Web基础技术进行简要介绍,包括B/S和C/S系统的区别,JSP和...
4. 如果在完成上述步骤后,Struts.xml配置文件仍然报错,可以尝试一种简单但有效的解决方案:保持文件内容不变,只需在文件中任意位置按一下回车键,然后保存文件。这样,IDE可能就能正确解析和识别Struts2的配置...
SSH框架,即Struts2、Hibernate和Spring的组合,是Java Web开发中广泛使用的三大开源框架。它们各自负责Web应用程序的不同层面,通过整合可以提供一套完整的解决方案,实现MVC(Model-View-Controller)设计模式,...
总之,Struts框架为构建企业级的Java Web应用提供了一种强大且结构化的解决方案,它的组件和标签库让开发者能够快速、高效地开发出可维护的Web应用。同时,它鼓励社区参与,不断更新和完善,以适应开源软件的快速...
本项目利用Struts2框架和Servlet技术,结合MySQL数据库,为教学环境提供了完整的解决方案。下面我们将深入探讨这个系统的设计与实现。 一、Struts2框架的应用 Struts2作为一款强大的MVC(Model-View-Controller)...
### servlet与Struts2知识点梳理 #### 一、Servlet基础概念及实现方式 - **Servlet定义**:Servlet是一种运行在服务器端的小程序,用于处理客户端发送的HTTP请求,并生成相应的HTTP响应。它属于动态资源,可以被多...
Spring的MVC框架可以替代Struts,提供更灵活的Web开发解决方案。 Hibernate是SSH框架中的持久化层,它是一个对象关系映射工具。Hibernate通过映射XML文件(hbm.xml)将Java对象与数据库表对应起来,实现了数据库...
Struts 2是基于MVC设计模式的Web层框架,Spring是一个全面的轻量级解决方案,提供了企业级开发的支持,包括依赖注入、事务管理、面向切面编程等功能,而Hibernate是一个对象关系映射(ORM)框架,用于简化数据库操作...