`
mingwen131171
  • 浏览: 2012 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用struts2框架后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的共存问题

    3. **测试验证**:实施完任何一种解决方案后,都需要进行全面的功能测试,确保所有功能模块都能正常工作。 通过上述分析可以看出,虽然Struts2与Servlet共存的问题看似棘手,但只要采取合理的策略,完全可以有效...

    Struts2 工作原理 Struts2框架 有图

    Struts2框架通过精巧的设计和组件化的实现,提供了高效、灵活的Web应用程序开发解决方案。其工作流程从请求接收、解析到响应生成,每一个环节都体现了对MVC模式的深刻理解和实践,为Java Web开发者提供了一个强大而...

    servlet和struts2笔记

    ### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...

    MAX的struts2教程、struts2 API、servlet API

    Struts2是一个强大的Java web开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用的解决方案。在本教程和API文档中,我们将深入理解Struts2的核心概念、功能...

    Struts2内容整理

    Struts2 是一个基于 Java Servlet 技术的开源 web 应用程序框架,它提供了一个灵活、可扩展的解决方案来构建企业级 web 应用程序。Struts2 框架的核心是 Action,Action 是一个包含了业务逻辑的 Java 类,它负责处理...

    struts2框架实例

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建高效、可扩展且易维护的Web应用的解决方案。本实例是针对初学者的一个实践教程,旨在帮助理解并掌握...

    Struts开发框架简介

    它的出现旨在解决JSP页面和Servlet在处理动态Web内容时的混乱情况,提供一个结构化的解决方案,使得开发人员能够更有效地组织和构建可维护性更强的Web应用。 在Struts框架中,Model代表业务逻辑,通常由JavaBeans或...

    struts2 框架教程

    总之,Struts2框架以其强大的功能和灵活性,为Java Web开发提供了一个高效、可扩展的解决方案,尤其对于初学者来说,其结构清晰,易于理解和上手。通过学习和实践Struts2,开发者可以更好地掌握MVC模式在Web开发中的...

    servlet与struts简介

    ### servlet与struts简介 #### 一、Servlet概述 Servlet是一种服务器端的Java技术,用于扩展Web服务器的功能。...即使不直接使用Struts,了解其设计理念也能为未来的Servlet和JSP开发提供宝贵的思路。

    struts2 跳转至404 页面的解决方案

    针对"Struts2 跳转至404 页面的解决方案"这个主题,我们将深入探讨可能的原因和解决方法。 首先,我们来看`struts.xml`文件,这是Struts2的核心配置文件,负责定义Action、结果类型、拦截器等关键组件。当Struts2...

    struts2_mybatis_spring_框架实例整合_数据库 文档

    Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...

    Struts2框架开发详解

    Struts2允许开发者根据项目需求定制自己的解决方案,而丰富的插件和社区资源则提供了大量现成的解决方案,降低了开发难度和维护成本。 接下来,我们会对Web基础技术进行简要介绍,包括B/S和C/S系统的区别,JSP和...

    Struts2没有提示解决方案

    4. 如果在完成上述步骤后,Struts.xml配置文件仍然报错,可以尝试一种简单但有效的解决方案:保持文件内容不变,只需在文件中任意位置按一下回车键,然后保存文件。这样,IDE可能就能正确解析和识别Struts2的配置...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    SSH框架,即Struts2、Hibernate和Spring的组合,是Java Web开发中广泛使用的三大开源框架。它们各自负责Web应用程序的不同层面,通过整合可以提供一套完整的解决方案,实现MVC(Model-View-Controller)设计模式,...

    struts框架与标签.doc

    总之,Struts框架为构建企业级的Java Web应用提供了一种强大且结构化的解决方案,它的组件和标签库让开发者能够快速、高效地开发出可维护的Web应用。同时,它鼓励社区参与,不断更新和完善,以适应开源软件的快速...

    学生信息管理系统,主要用struts2 和servlet实现.zip

    本项目利用Struts2框架和Servlet技术,结合MySQL数据库,为教学环境提供了完整的解决方案。下面我们将深入探讨这个系统的设计与实现。 一、Struts2框架的应用 Struts2作为一款强大的MVC(Model-View-Controller)...

    servlet AND Struts2笔记

    ### servlet与Struts2知识点梳理 #### 一、Servlet基础概念及实现方式 - **Servlet定义**:Servlet是一种运行在服务器端的小程序,用于处理客户端发送的HTTP请求,并生成相应的HTTP响应。它属于动态资源,可以被多...

    spring+struts2+hibernate框架说明

    Spring的MVC框架可以替代Struts,提供更灵活的Web开发解决方案。 Hibernate是SSH框架中的持久化层,它是一个对象关系映射工具。Hibernate通过映射XML文件(hbm.xml)将Java对象与数据库表对应起来,实现了数据库...

    java web 实战宝典_JSP+Servlet+Struts_2+Hibernate+Spring+Ajax

    Struts 2是基于MVC设计模式的Web层框架,Spring是一个全面的轻量级解决方案,提供了企业级开发的支持,包括依赖注入、事务管理、面向切面编程等功能,而Hibernate是一个对象关系映射(ORM)框架,用于简化数据库操作...

Global site tag (gtag.js) - Google Analytics