在进行一个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了。
本人本科软件工程学生党一枚,如有错误欢迎指正,欢迎交流。