ssh框架中,ajax无法调用servlet的一种原因:web.xml中servlet与struts的冲突。

2 篇文章 0 订阅
2 篇文章 0 订阅

在进行一个ssh项目开发的过程中,在使用ajax+servlet做联想输入时出现了一个问题,功能总是无法实现,在测试之后发现问题处在ajax完全没有调用servlet!

于是便开始找错,新建了一个web project将相应的jsp和servlet文件copy到新建的web project后,竟然完美运行,在查看了两个项目的区别,突然惊觉,这两个web project最大的区别就在于旧的project的web.xml中有struts和servlet,而新的project的web.xml只有servlet。问题已经浮出水面,ajax无法调用servlet的问题就在于web.xml中servlet与struts的冲突。

深入研究后发现,在请求服务时,strusts2会截获的所有的请求,因为因为action和servlet都没有任何的后缀名,所以struts2把servlet当成了一个action,将action和servlet的请求都截获,导致servlet不能正常的响应。


找到根本问题后,我们的解决方法也十分的清晰,只要我们能让servlet和struts互相不打扰对方就可以。

总共有四种方法可以,因为这个问题解决的方法十分常见,本人就不一一列举了,本人只列举自己使用的方法。

我是在在所有的servlet中都加上.servlet而其他的不需要改变,快捷方便。

这是改正前的:

<servlet-mapping>
    <servlet-name>ScoreDetails</servlet-name>
    <url-pattern>/ScoreDetails</url-pattern>
  </servlet-mapping>

这是改正后的:

<servlet-mapping>
    <servlet-name>ScoreDetails</servlet-name>
    <url-pattern>/ScoreDetails.servlet</url-pattern>
  </servlet-mapping>

同ajax中的url也需要更改。

这是改前的:

 $.ajax({
                    url:"ScoreDetails",
                    type:"post",
                    data:{"uname":uname},

这是改正后的:

 $.ajax({
                    url:"ScoreDetails.servlet",
                    type:"post",
                    data:{"uname":uname},

随后重新进行测试,发现问题已经解决,ajax已经可以正常调用servlet了。



本人本科软件工程学生党一枚,如有错误欢迎指正,欢迎交流。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值