struts框架下使用ajax,servlet进行异步请求

ADRV902x SPI配置避坑指南:3线vs4线模式、MSB/LSB顺序与流模式详解 本文深入解析ADRV902x射频收发器的SPI配置实战技巧,重点探讨3线vs4线模式、MSB/LSB顺序与流模式的配置陷阱。通过示波器实测波形对比,揭示参数配置错误导致的通信异常,并提供快速定位问题的实战方法论,帮助工程师优化SPI接口性能。 阅读详情

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

问题

项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置: 

复制代码
<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>
复制代码

在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常响应;原因是struts2把servlet当成action了,因为servlet和action都是没有后缀的。

解决(四种方式)

1. 修改servlet的相关配置,统一在servlet后面加上“.servlet”

1). 修改web.xml配置文件形如:

复制代码
    <servlet>  
       <servlet-name>jqueryAjaxServlet</servlet-name>  
       <servlet-class>com.clzhang.sample.struts2.servlet.jQueryAjaxServlet</servlet-class>  
    </servlet>  

    <servlet-mapping>  
        <servlet-name>jqueryAjaxServlet</servlet-name>  
        <url-pattern>/servlet/jqueryAjax.servlet</url-pattern>  
    </servlet-mapping>
复制代码

2).修改调用servlet的地方,形如:

复制代码
    <%
    String path = request.getContextPath();
    %>
    ......
    
    $.ajax({   
    url:'<%=path%>/servlet/jqueryAjax.servlet',   
    ......
复制代码

这样就可以正常处理servlet的请求了。此种情况适合于小范围使用servlet的情况。

2. 修改拦截页面配置,就是将struts的相关拦截配置一下

修改web.xml文件如下内容:

复制代码
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.do</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的请求。此种情况可能随着项目的扩大,而需要再次修改此配置文件。

3. 修改struts.xml文件中的后缀映射

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

4. 自定义Filter实现过滤

1).创建实现类,代码参考如下:

复制代码
package com.clzhang.sample.struts2;

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;

/**
 * 这是一个过滤servlet的filter;就是拦截servlet的处理请求,自行转向处理,而不是由struts处理。
 * 有二种过滤方式,一种是判断uri中是否包含“/servlet/”;
 * 另一种是所有servlet在初始化参数中指定。
 * 需要在web.xml中配置:
    <filter>
        <filter-name>redisp</filter-name>
        <filter-class>com.clzhang.sample.struts2.FilterServlet</filter-class>
        <!--如果使用第二种方式过滤,则需要下面的代码
        <init-param>
            <param-name>includeServlets</param-name>
            <param-value>jqueryAjax,jsonView</param-value>
        </init-param>
        -->
    </filter>
    
    <filter-mapping>
        <filter-name>redisp</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    并且此过滤器必须在struts2的过滤器上面。
 * @author Administrator
 *
 */
public class FilterServlet implements Filter {
    public void destroy() {
    }
    
    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);
        if (request.getRequestURI().indexOf("/servlet/") > 0) {
            // request.getRequestURI()格式应该形如:/st/servlet/jqueryAjax,
            // 其中st是项目名,servlet是所有servlet都增加的前缀,用于能够判断出是servlet。
            // if只判断请求uri是否包含/servlet/,如果包含则处理;
            RequestDispatcher rdsp = request.getRequestDispatcher(target);
            rdsp.forward(req, resp);
        } else {
            chain.doFilter(req, resp);
        }

        // 第二种方式 (二选 一)
        /**
        if (this.includes.contains(target)) {
            // target取出的值则直接是jqueryAjax,在web.xml中配置即可。
            // if判断请求uri最后的那部分是否包含在配置文件中,如果包含,则处理
            RequestDispatcher rdsp = request.getRequestDispatcher(target);
            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(",")));
    }
}
复制代码

2).修改web.xml,类似如下格式:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <filter>
        <filter-name>redisp</filter-name>
        <filter-class>com.clzhang.sample.struts2.FilterServlet</filter-class>
        <!--如何使用第二种方式过滤,则需要下面的代码
        <init-param>
            <param-name>includeServlets</param-name>
            <param-value>jqueryAjax,jsonView</param-value>
        </init-param>
        -->
    </filter>
    
    <filter-mapping>
        <filter-name>redisp</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <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-name>jqueryAjaxServlet</servlet-name>  
        <servlet-class>com.clzhang.sample.struts2.servlet.jQueryAjaxServlet</servlet-class>  
    </servlet>  

    <servlet-mapping>  
        <servlet-name>jqueryAjaxServlet</servlet-name>  
        <url-pattern>/servlet/jqueryAjax</url-pattern>  
    </servlet-mapping>

    <servlet>  
        <servlet-name>jsonViewServlet</servlet-name>  
        <servlet-class>com.clzhang.sample.struts2.servlet.JsonViewServlet</servlet-class>  
    </servlet>  
    
    <servlet-mapping>  
        <servlet-name>jsonViewServlet</servlet-name>  
        <url-pattern>/servlet/jsonView</url-pattern>  
    </servlet-mapping>   

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>
复制代码

注意,<filter-name>redisp</filter-name>必须放置于<filter-name>struts2</filter-name>之前,这样才能够保证它们能够按照正常的顺序处理,否则会出错。

3). 而在需要引用servlet的地方,正常引用即可,如在JSP页面中调用:

复制代码
    <%
    String path = request.getContextPath();
    %>
    ......
    
    $.ajax({   
    url:'<%=path%>/servlet/jqueryAjax',   
    ......
复制代码
原帖地址:http://www.cnblogs.com/nayitian/archive/2013/03/04/2942537.html
功能完整的HTTP请求测试工具实战应用 在现代Web开发与系统集成过程中,HTTP请求作为客户端与服务器通信的核心机制,其稳定性、准确性和可测试性直接决定了应用的质量。HTTP请求测试工具作为一种关键的调试与验证手段,广泛应用于接口联调、性能压测、安全检测和自动化测试等场景。本章将从HTTP协议的基本模型出发,深入剖析测试工具的设计目标与核心功能,明确其在实际开发中的定位。 阅读详情

相关推荐

一文带你完成ARMv8架构中的cache知识点

【摘要】 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处理器内核要复杂得多,其时钟速度可以快上几个数量级。但是,外部总线和内存设备的频率并没有扩大到同样的程度。有可能实现小块的片上SRAM,它可以以与内核相同的速度运行,但是与标准的DRAM块相比,这种RAM非常昂贵,因为后者的容量可以达到数千倍。在许多基于ARM处理器的系统中,访问外部存储器需要几十甚至几百个内核周期。 cache的技术背景 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处.

ABCCloud的博客 1854

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

YOLOv11 改进策略:引入 NWD 损失函数提高小目标检测精度

YOLO(You Only Look Once)是一种实时目标检测算法,能够有效地预测图像中多个物体的边界框和类别概率。其高效性使它成为自动驾驶、视频监控等领域的理想选择。NWD 是一种基于 Wasserstein 距离的损失函数,其通过归一化处理,更好地评估预测框和真实框之间的几何偏差。这种方法不仅仅关注重叠区域,而且考虑中心点和尺度信息,提高了对小目标的敏感度。

走向CTO的路上... 2010

servlet和struts共存配置出现问题

web.xml部分代码如下:     HelloFreeMarker     Freemarker.HelloFreeMarker           HelloFreeMarker     /hello.servlet           struts   org.apache.struts2.dispatcher.FilterDispatcher    

zhaoxinglin123的专栏 769

Win11 24H2家庭版共享打印机失败?别慌,一个批处理脚本搞定所有设置

本文提供了Win11 24H2家庭版共享打印机失败的解决方案,通过一个批处理脚本自动修复所有设置问题。脚本包含安装组策略组件、修改关键注册表项等操作,帮助用户快速恢复打印机共享功能,适用于普通家庭用户。

weixin_30632089的博客 424

出现Command ‘vim‘ is available in the following places,vim: command not found等解决方法

内置命令无法识别,说明系统变量有误,导致无法识别,既然系统变量有误,将其注释或者更改为正确的即可,但是现在打不开,又怎么注释掉。替换vim来打开编辑,打开之前错误的全局变量文件,发现变量有误,要么注释要么改为。系统变量有全局变量(通过命令行printenv或者echo)和局部变量。对应通过vim修改错误的变量文件,不然source也无法让配置文件生效。本身vim是系统内置的命令,连vim都出现问题。修改为正确的即可,之后还需要重启服务器,使用。之后即可成功,通过即可查看命令是否有写入。...

码农研究僧的博客 5884

Struts2访问Servlet的三种方式

Struts2访问Servlet的三种方式 基本介绍      在Struts2中,Action并没有直接和Servlet API耦合。虽然Struts2 中的Action访问Servlet API麻烦一些,但是这却是Struts2中Action的重要改良之一,方便Action进行单元测试。      尽管Action和Servlet API解耦会带来很多好处,然而在Action中完全不访问

Switch的博客 7238

液态神经网络(LNN):打破AI“静态快照”的连续动力学革命---AI大模型系统从零开始0029

MIT研究团队受秀丽隐杆线虫神经系统的启发,开发出革命性的液态神经网络(LNN)。该技术通过连续微分方程建模神经元动态,实现输入响应速度的自适应调节,解决了传统AI模型静态化、高能耗和低解释性的痛点。LNN具有三大突破性优势:仅需少量神经元(如20个)即可完成复杂任务;能处理非均匀时序数据;在自动驾驶、医疗监测等领域展现出卓越的适应性和鲁棒性。这项将生物智能与数学建模完美融合的技术,有望成为下一代AI的核心架构,目前已在无人机导航等场景验证了其高效性,被预测为2026年最具潜力的AI突破方向。

添柴程序猿的专栏 379

S2SH web.xml 同时配置Struts2与Servlet的解决方法

一、两种网上的方法,本人是想在说s2sh项目中加入xheditor(在线编辑器)功能,通过下面的两种方法发现不是action有问题,就是servlet有问题,因此不行。 但是毕竟这两种方法简单好理解,不放先试一下,说不定你的项目能行。 解决Could notfind action or result  There is noAction mapped for namespace / and

Sup_Heaven的专栏 5750

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1225

判断是否是ajax请求

out.print("该请求是 AJAX 异步HTTP请求。"); }else{ out.print("该请求是传统的 同步HTTP请求。"); } 或者 //使用 servlet或者struts2,springmvc中的reques...

chenhudong7536的博客 127

基于jeecgboot3.9.0的项目管理——项目工作台(二)

基于jeecgboot3.9.0的项目管理——项目工作台(二)

宁波阿成的博客 206

★Struts2中的Ajax实现 <s:a>

项目作完了,现在没什么事情做,继续研究一下Struts2框架.今天作的是Struts2种的Ajax的实现。这里是用自带的DOJO实现的。先看配置文件,配置了Struts2和Freemarker web.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app id="WebApp_ID" version="2.4" xmlns="

紫晖的专栏 509

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

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

小测试 java ajax,java + struct + ajax‏

java + struct + ajax‏上一篇 /下一篇 2009-07-06 22:16:59/ 个人分类:JAVA/JSP页面部分:example.jspString path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request....

weixin_35304632的博客 289

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java理论题_java三级理论题--附答案

java三级理论题--附答案 《程序员(JAVA)》(三级)的考试方式分为基本概念,应用操作和编码实践 考核。基本概念和应用操作考试采用闭卷计算机机考方式,编码实践考核采用 现场实际操作方式。基本概念考试占 30%应用操作考试和编码实践考试各占 35%, 总分 100分。成绩皆达 60分及以上者为合格 一、单选题 1.下面关于 ajax 的工作原理描述是错误的是? A. 相当于在用户和服务器之间加...

weixin_36278817的博客 730

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssh整合ajax验证用户名存在,SSH整合AJAX验证用户名存在和验证码的完整实例.doc

SSH整合AJAX验证用户名存在和验证码的完整实例SSH整合AJAX验证用户名存在和验证码的完整实例一(含代码)——AJAX学习笔记SSH三大框架如何整合,在我前几篇博文中已经很详细的介绍了,如果还有什么问题的,请查看我的博文Struts+Spring+Hibernate整合注册登录,谢谢。那么现在就详细地介绍一下AJAX了。AJAX自己也是最近才学了一点,里面的一些框架或者知识只是略懂一些,写的...

weixin_33513842的博客 327

Ajax 异步Servlet、struts各种的使用

AJAX :   1、Servlet+jqAjax+json jar包方式 例子下载(可运行,导入到Eclipse-jee环境里) http://download.youkuaiyun.com/detail/yao__shun__yu/4858288当然咱们的群网盘里面也有 Eclipse-jee下载以及配置请看 http://blog.youkuaiyun.com/yao__shun__yu/article

bugstack虫洞栈 2075

Struts2处理(jQuery)Ajax请求

1. Ajax Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生的目的是用于实现页面的局部刷新。通过Ajax技术可以使之前的应用程序在每次提交时不用进行页面的整体刷新,从而提升操作的性能。 2. jQuery jQuery是一个JavaScript函...

微赚淘客系统开发者博客 482

struts2与springMvc下的AJax异步数据交互1

struts2与springMvc下的AJax异步数据交互1   无论是在struts2还是springMvc框架下,Controller或者action均有2种json数据返回方法 1.在struts2下 ① 一.使用Servlet的输出流     JSON接口的实质是:JSON数据在传递过程中,其实就是传递一个普通的符合JSON语法格式的字符串而已,所谓的“JSON对象”是指对这个

qq_25717027的博客 548

struts注解 ajax,struts2实现ajax校验的2种方法详解

共同的一点是,Action都需要将一个方法暴露出来,给前端javascript调用javascript的代码都是一样的:Js代码 functiontestAjax(){var$userNameInput=$("#ajax_username");varuserName=$userNameInput.val();$.ajax({url:"originAjax.action",type...

weixin_30903865的博客 314

Struts、Servlet对Ajax的简单实现

  笔者是在SSH项目中实现的Ajax,用于异步验证用户输入的登录名是否已经注册。以下是相关过程 第一步:构建XMLHttpRequest对象 常见的操作是这样的 <!- - var xmlHttp; function createXMLHttpRequest(){ if(window.ActiveXObject){ xmlHttp = new Act

u014728399的专栏 399

Ajax的get请求

web.xml http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.co

chinasoft11633的专栏 784

struts2与springMvc下的AJax异步数据交互2

struts2与springMvc下的AJax异步数据交互2          2.springMVC下的ajax异步数据通信              ① 第一种与 Struts2一样使用 Servlet  的输出流,即response.getWrite()  来输出json格式字符串              ②第二种 ,在springMVC-Servlet.xml中配置

qq_25717027的博客 350

ajax+servlet实现注册验证(验证用户名是否存在)

做项目过程中,需要用到 ajax 实时验证注册的用户名是否已经存在。所以写了一个小例子,经过测试直接可用。主要分为4个文件,分别为 web.xml 文件,login.jsp文件,login.js 以及 LoginServlet.java文件。 在eclipse中新建项目,文件的存放树如下: 注意引进所需的 jar 包.1 . login.jsp<%@ page language="java

胡倩萌的博客 1万+

ajax上传文件(ajax+Struts1 & ajax+servlet+上传进度条)

Struts1 ajax上传文件 ajax请求 function uploadFile(){ var formData = new FormData(); formData.append("formFile",$('#fileId')[0].files[0]); $.ajax({ cache: true, type: "POST", url:"<%=request.getContextPath()%>/impDataAction.do?type=uploadFile",

zhouxzcsdn的博客 500
上一篇: Github菜鸟日记--推送
下一篇: Java Web实现动态刷新并向数据库写入信息(Ajax)
jackyip2011
博客等级 码龄12年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值