我正在使用HTML / JQuery / AJax来调用servlet。我正在向servlet提交一个表单。但它始终给404说没有找到资源。我有maven项目。
我在src/main/java
包中的Servlet是:com.mycompany.sample
我在webapp/public
文件夹中有jsp。
在web.xml中我使用url模式/myController
在jsp中我对我的表单采取了以下行动:
<form action="myController" ...............
我有一个单独的.js文件,其中我提到了ajax调用,如下所示“
$.ajax({
type: "POST",
url: "myController",
data: dataString,
success: function(msg) {
alert('success');
},
error: function(ob,errStr) {
alert('onfailure');
}
});
但我总是得到404错误,说找不到/myController
资源,我得到onfailure
警报。
我是否在myController
和form
来电中正确引用了ajax
?
谢谢!
答案 0 :(得分:2)
与其他人一样,请尝试完整路径,因为我认为404的原因是缺少应用程序上下文。
我不知道您是否使用了taglib,但是您可以使用url标记生成正确的URL:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url var="myControllerVar" value="/myController" />
然后,把它放在你的AJAX代码中:
$.ajax({
type: "POST",
url: "${myControllerVar}",
data: dataString,
success: function(msg) {
alert('success');
},
error: function(ob,errStr) {
alert('onfailure');
}
});
否则,您可以尝试使用完整路径,因为我认为缺少应用程序上下文。您可以使用以下JSP var检索它:
${pageContext.request.contextPath}
那将是这样的:
${pageContext.request.contextPath}/myController
你是ajax代码:
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/myController",
data: dataString,
success: function(msg) {
alert('success');
},
error: function(ob,errStr) {
alert('onfailure');
}
});
答案 1 :(得分:1)
另一种方法是在ajax调用中使用以下网址:
$.ajax({
type: "POST",
url : "<%=request.getContextPath()%>/myController",
data: dataString,
success: function(msg) {
alert('success');
},
error: function(ob,errStr) {
alert('onfailure');
}
});
我目前能够使用该URL来调用spring mvc控制器。我也在使用提交按钮上的事件监听器进行ajax调用。然后,“提交”按钮将调用包含ajax调用的函数。我正在使用基于注释的spring,而我的控制器也是如此:
@Controller
public class myController{
@ResponseBody
@RequestMapping(value = "/myController", method = RequestMethod.POST)
public ModelAndView myControllerHandler(HttpServletRequest request) {
ModelAndView mv = new ModelAndView("/success");
return mv;
}
}
我正在传递HttpServletRequest,但未使用该请求。我将返回直接指向success.jsp页面的模型和视图。我可以在事件监听器中添加代码,并在需要时提交按钮。