0

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

索引.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>

进程.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() );
    }
}

模型.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;
    }
}

网页.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,并且我已经在上下文 /myapp 中部署了这个应用程序。我能够正确查看 index.jsp 页面,但是当我提交表单时,出现以下错误:

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

3 回答 3

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()应该为你工作。

于 2013-01-29T12:52:26.250 回答
0

您没有重定向到JSP. 让我解释一下,当您post将表单 url 更改为http://domain.com/../process.do以及使用request.getRequestedUri()它时会发生什么,它会提供给 servlet 的 url,并且它没有doGet()方法,因此您会收到该错误。您应该使用response.sendRedirect("index.jsp")重定向到您的index.jsp文件。

于 2013-01-29T12:54:06.283 回答
0

当你使用“response.sendRedirect()”方法时,它会将请求对象移交给浏览器。所以,你不能再处理请求对象了。使用“RequestDispacther”而不是“sendRedirect”。我希望,这个可能会给你一个清晰的信息。不要介意,如果我没有联系到你。

于 2013-01-30T05:45:58.927 回答