Tomcat:Servlet sendRedirect到JSP说:" HTTP状态405 - 此方法不支持HTTP方法GET"

时间:2013-01-29 12:47:03

标签: java jsp servlets

下面是一个简单的Servlet(Process.java),JSP页面(index.jsp)和Model(Model.java)的代码。

的index.jsp

<%@ page import="com.example.*" %>

<html>
<head>
<title> Myapp </title>
</head>

<body>
<form action="process.do" method="POST">
UserName: <input type="text" name="username">
<br>
UserID: <input type="text" name="userid">
<br>
<input type="submit">
<br>

<%
Model m = (Model) request.getAttribute("model");

if( m != null) {
out.println("Username: " + m.getUserName() );
out.println("UserID: " + m.getUserID() );
}
%>

</form>
</body>
</html>

Process.java

package com.example;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Process extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        Model m = new Model();
        m.setUserName( request.getParameter("username") );
        m.setUserID( Integer.parseInt( request.getParameter("userid") ) );

        request.setAttribute("model", m);
        response.sendRedirect( request.getRequestURI() );
    }
}

Model.java

package com.example;

public class Model {

    private String userName = "";
    private int userID = -1;

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setUserID(int userID) {
        this.userID = userID;
    }

    public String getUserName() {
        return userName;
    }

    public int getUserID() {
        return userID;
    }
}

的web.xml

<servlet>
    <servlet-name>Process</servlet-name>
    <servlet-class>com.example.Process</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Process</servlet-name>
    <url-pattern>/process.do</url-pattern>
</servlet-mapping>

我正在使用Tomcat7,我已经在context / myapp中部署了这个应用程序。 我能够正确查看index.jsp页面,但是当我提交表单时,我收到以下错误:

HTTP Status 405 - HTTP method GET is not supported by this URL

3 个答案:

答案 0 :(得分:0)

您要使用response.sendRedirect( request.getRequestURI() );尝试完成什么?

这将指示浏览器向/process.do发送一个未在servlet中处理的GET请求(您只扩展了doPost)。如果你想回到index.jsp,只需要response.sendRedirect( "index.jsp");

编辑:

因为您希望在index.jsp中访问模型属性,所以我们实际上无法进行浏览器重定向。而是需要服务器重定向。

request.getRequestDispatcher("index.jsp").include(request, response)代替response.sendRedirect()应该适合您。

答案 1 :(得分:0)

您没有重定向到JSP。让我解释一下,当您post表单网址更改为http://domain.com/../process.do时,以及当您使用request.getRequestedUri()时,它会提供给servlet的网址但它没有doGet()因此你得到了那个错误。您应该使用response.sendRedirect("index.jsp")重定向到index.jsp文件。

答案 2 :(得分:0)

当您使用“response.sendRedirect()”方法时,它会将请求对象移交给浏览器。因此,您无法再处理请求对象。使用“RequestDispacther”代替   “sendRedirect”。我希望,这可能会让你清晰。不要介意,如果我没有联系你。