如何让struts2和servlet的共存

一、问题的提出

   先让我们看下web.xml中struts2和servlet的配置:

    <!-- struts2拦截页面请求的配置 -->

<filter>

  <filter-name>struts2</filter-name>

  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

  <filter-name>struts2</filter-name>

  <url-pattern>/*</url-pattern>

 </filter-mapping>

 

 

     <!-- servlet的配置 -->

    <servlet>

    <servlet-name>firstServlet</servlet-name>

    <servlet-class>com.test.FirstServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>firstServlet</servlet-name>

    <url-pattern>/aa</url-pattern>

  </servlet-mapping>

  当我们在页面在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常响应的

(报错信息为:警告: Could not find action or result: /test3_ssh/

There is no Action mapped for namespace [/] and action name [TestServlet] associated with context path [/test3_ssh]. - [unknown location],

这是因为struts2把servlet当成action了,因为servlet和action都是没有后缀的.

 

 

二、解决方案

   解决方法目前有四种:

方法1:

   统一在servlet后面加上.servlet结尾(包括web.xml配置文件中和页面上使用servlet的地方)

 

 

方法2:

    在struts.xml中的<struts>的节点下面添加struts2处理的请求后缀 常量:

<!--  

该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。 

如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 

 --> 

<constant name="struts.action.extension" value="action" /> 

 

 

方法3:

     在web.xml中修改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>

 

现:

 

   <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>*.action</url-pattern>

   </filter-mapping>

   <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>*.jsp</url-pattern>

   </filter-mapping>

   <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>/user/*</url-pattern>

   </filter-mapping>

  servlet的请求路径不必改变

 

 

方法4:

     自定义filter对servlet进行过滤:

##############################################

# 该类是定义了一个过滤器(随便你放在某个包下面),当既用到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,注意是那url-pattern</param-value>

*   </init-param>

* </filter>

* <filter-mapping>

*   <filter-name>redisp</filter-name>

*   <url-pattern>/*</url-pattern>

* </filter-mapping>

*该类也可以直接继承StrutsPrepareAndExecuteFilter的

###########################################################

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(",")));

}

 

}

 

PotPlayer播放4K HDR电影时,如何正确设置LAV解码器与MadVR渲染器避免色彩失真? 本文详细介绍了如何在PotPlayer中正确配置LAV解码器与MadVR渲染器,以解决播放4K HDR电影时的色彩失真问题。从组件安装、参数设置到显卡协同配置,提供了一套完整的端到端解决方案,帮助影音爱好者获得最佳的视觉体验。 阅读详情

相关推荐

Python量化投资入门教程:从零构建你的第一个交易策略

量化投资教程以数学模型和计算机程序实现超额收益,选用Python工具链完成数据获取、策略构建及回测。通过移动平均线交叉策略示例,展示数据预处理、信号生成、收益计算及可视化全流程,结合收益率、最大回撤和夏普比率评估策略,并建议参数优化与策略融合提升稳健性。

ylmx5201314的博客 2453

struts2下面如何同时使用servlet,就是如何实现struts与servlet共存

问题 项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  &lt;filter&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt;org.apache.s...

weixin_33692284的博客 271

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9670

struts2和servlet的共存问题

web.xml中struts2和servlet的配置问题解析。

promise_LOVE的专栏 2295

SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣

本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。

weixin_28559803的博客 283

OpenHarmony之Histreamer引擎深度解析:pipeline_core架构如何全面取代GStreamer,一统音视频播放与录制

Histreamer是OpenHarmony多媒体框架的核心媒体引擎,采用架构设计。一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。1.播放场景分为如下几个节点:数据源读取、解封装、解码、输出;2.录制场景分为如下几个节点:数据源读取、编码、封装、输出。该引擎从OH5.0开始取代了原有的媒体引擎gstreamer(部分文档还保留较老架构的讲解),提供统一的音视频播放、录制、元数据解析等能力。

m0_67505153的博客 332

struts2和servlet共存的几种方法

项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  filter> filter-name>struts2filter-name> filter-class>org.apache.struts2.dispatcher.ng.filter.Strut

huilangeliuxin的专栏 1万+

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

servlet与struts2共存,调用spring bean

网上很多文章说的都不对,或者设置起来很麻烦。 其实这个共存很简单,不需要另外的设置。 首先就是web.xml修改,加入servlet声明,并且修改struts2相关配置 //servlet This is the description of my J2EE component This is the display name of my J2EE com...

scalong的专栏 190

提升JVM性能:CMS垃圾回收器的优化分析与案例研究

本文介绍了CMS(Concurrent Mark-Sweep)垃圾回收器的工作原理、优缺点及常见问题,并通过具体案例分析了其优化策略。重点探讨了CMS的各个阶段,包括标记、并发清理和重标记,分析了可能导致性能瓶颈的因素如停顿时间过长和内存碎片化。文章还分享了调整垃圾回收参数、结合其他垃圾回收器以及内存优化等方法,帮助提高CMS的回收效率和性能。最后,文章展望了随着JVM发展,结合新一代垃圾回收器优化的趋势,助力Java应用在高并发环境下的性能提升。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 175万+

华为OD统一考试 - 模拟消息队列(Java & Python& JS & C++ & C )

让我们来模拟一个消息队列的运作,有一个发布者和若干消费者,发布者会在给定的时刻向消息队列发送消息,

算法大师! 3517

Struts2与servlet共存的解决方案

 项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  filter> filter-name>struts2filter-name> filter-class>org.apache.struts2.dispatcher.ng.filter.S

Better2326的专栏 692

自动驾驶算法-滤波器系列(三)——不同运动模型(CV、CA、CTRV、CTRA)的建模和推导

CV & CA & CTRV & CTRA1. CV模型2. CA模型3. CTRV模型4. CTRA模型 1. CV模型 2. CA模型 3. CTRV模型 4. CTRA模型

weixin_41480034的博客 2万+

struts2和servlet的共存交互问题

一般在项目中,如果使用到了struts2框架,可能就会很少再去单独使用Servlet了,但是不排除有些时候需要单独的Servlet与struts2同时使用,这时候有些人就会遇到Servlet与Struts2共存交互的问题了。 其实问题出在这里: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecut

HoKing_in的专栏 1049

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Struts2框架与servlet共存问题

Struts2框架与servlet共存问题     今天在做一个项目的时候遇到了一个很奇怪的问题,这个项目的一部分是之前用servlet写的,但是后边打算用struts写,再加入struts框架配置后发现原先的那部分不能正常访问了,之前没这么做过所以很纳闷,struts2配置自认为写的很熟了,应该没什么问题啊,struts.xml文件改了又改还是找不到错误,后来在看到web.xml时

csnewdn的专栏 415

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用过滤器解决Struts2和Servlet的共存问题

在同一个项目中间,如果既用到servlet有用了struts2的框架,运行项目时可能无法正常使用servlet,会出现404报错。如下显示: 原因: 是在配置struts2的核心控制器时/*所致,需要定义一个过滤器,将servlet过滤,使struts2的核心控制器对servlet不起作用。 PS(重要):在xml文件中定义的servlet过滤器要写在struts2核心控制器前面

qq_37730370的博客 1186

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Struts2和Servlet实现共存

在一个项目中,如果我们既用到了Struts2又用到了Servlet,项目运行时有可能无法正常访问Servlet 原因是在配置Struts的过滤器的时候,拦截了所有请求。 filter-mapping> filter-name>struts2filter-name> url-pattern>/*url-pattern> filter-mapping> 下面是servle

itmyhome的专栏 3594
上一篇: hibernate3下载地址
下一篇: Spring 3.1配置文件示例(备忘)
java_doom
博客等级 码龄20年 6粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值