0

我正在使用 HTML/JQuery/AJax 来调用 servlet。我正在向 servlet 提交表单。但它总是给出 404 说资源未找到。我有 Maven 项目。

我在src/main/java包中有 Servlet 是:com.mycompany.sample

我在webapp/public文件夹中有jsp。

在 web.xml 中,我使用 url 模式注册了 servlet/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我是否在我formajax通话中给出了正确的参考?

谢谢!

4

2 回答 2

2

就像其他人说的那样,尝试完整路径,因为我认为您的 404 的原因是缺少应用程序上下文。

我不知道您是否使用 taglibs 但您可以使用 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');
    }
});
于 2013-07-17T14:31:53.790 回答
1

另一种方法是在您的 ajax 调用中使用以下 url:

$.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 页面的模型和视图。如果需要,我可以将代码包含在我的事件侦听器和提交按钮中。

于 2019-03-25T18:38:36.480 回答