对 servlet 的 POST 请求返回 GET 方法的结果



背景:

我正在编写一个servlet应用程序,并希望有一个servlet处理GET和POST请求。servlet 内置到 WAR 文件中,并使用我的开发机器 (localhost:8080( 上的 Tomcat 服务器在本地托管以进行测试。

对 servlet 的 GET 请求工作正常(返回索引.jsp页面(,而 POST 到同一 url 不会运行 doPost(( 方法中的代码(也返回索引.jsp页面(。

这是我的servlet类代码:

public class SelfserviceServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/index.jsp");
        view.forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String ip_address = request.getParameter("someparam");
        String port = request.getParameter("someotherparam");
        // Do some operation here to produce html_output
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(html_output.toString());
    }
}

这是我的网络.xml文件:

    <servlet>
        <servlet-name>SelfservicePortal</servlet-name>
        <servlet-class>com.somename.module.SelfserviceServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SelfservicePortal</servlet-name>
        <url-pattern>/portal</url-pattern>
    </servlet-mapping>

编辑:这是索引.jsp文件:

<html>
<head>
<script>
    function sendPOST(){
        // First URL try
        $.ajax({
                url: "/SelfservicePortal",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: "someparam=" + encodeURIComponent(someparam) + "&someotherparam=" + encodeURIComponent(someotherparam),
                success: function(data) {
                    alert(data);
                },
                error: function() {
                    alert("Error");
                }
            });
        // Second URL try
        $.ajax({
                url: "/SelfservicePortal/portal/",
                type: "POST",
                contentType: "application/x-www-form-urlencoded",
                data: "someparam=" + encodeURIComponent(someparam) + "&someotherparam=" + encodeURIComponent(someotherparam),
                success: function(data) {
                    alert(data);
                },
                error: function() {
                    alert("Error");
                }
            });
}
</script>
<body>
     <button type="button" onclick="sendPOST();">Send POST</button>
</body>
</html>

这些是我的结果:

GET localhost:8080/SelfservicePortal ->指数.jsp

GET localhost:8080/SelfservicePortal/portal -> 404 未找到

POST localhost:8080/SelfservicePortal ->索引.jsp [ 这应该是html_output ]

POST localhost:8080/SelfservicePortal/portal -> 404 未找到

如何使 POST 请求正常工作,为什么对 url 映射模式的请求返回 404?

我想你忘了在你的 servlet 中添加注释,尝试使用以下代码,看看它是否有效。 如果您想使用表单数据而不是 URL 编码的数据,还要添加@MultipartConfig。

    @WebServlet("/portal")    
    @MultipartConfig
    public class SelfserviceServlet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/index.jsp");
                view.forward(request, response);
            }
            @Override
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                String ip_address = request.getParameter("someparam");
                String port = request.getParameter("someotherparam");
                // Do some operation here to produce html_output
                response.setContentType("text/plain");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(html_output.toString());
            }
        }

最新更新