下面是一个简单的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
答案 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”。我希望,这可能会让你清晰。不要介意,如果我没有联系你。