我正在构建一个简单的web应用程序,并试图创建一个登录页面。该页面由一个带有加载Servlet的表单的JSP组成。
我已经使用GET方法得到了表单:
JSP如下所示:
<form method="get" action="Login">
Email:<input name="email"/>
Password:<input name="password"/>
<input type="Submit" value="Log in"/>
在Servlet中:
@WebServlet(name = "Login", urlPatterns = {"/Login"})
public class Login extends HttpServlet {
/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//Assign variables from the request parameters
String loginFormEmail = request.getParameter("email");
String loginFormPassword = request.getParameter("password");
这段代码是有效的,但它在URL字符串中包含了用户名和密码,所以这显然不是一个好的做法。我曾尝试使用POST来实现这一点,但我一直遇到一个错误。(HTTP状态405-此URL不支持HTTP方法POST(
我需要知道如何使用POST将参数从JSP发送到Servlet。我认为这可能涉及到使用RequestDispatcher对象,但我找到的所有教程都解释了使用RequestDisptcher将数据从Servlet发送到JSP,而不是相反。您是否可以/应该使用RequestDispatcher将POST数据从JSP发送到Servlet?如何从Servlet访问这些参数?(POST是否有等效的request.getParameter((?(
我知道使用POST仍然不安全,但这比在查询字符串中包含密码要好得多,我稍后会考虑安全性。
为这个基本问题道歉,我在网上找到了很多教程,但似乎没有一个能回答这个特定的问题。非常感谢。
尝试
<form method="POST" action="Login>
注意:用于指定GET/POST的method
而不是type
。
但它实际上并不比使用GET更"安全"。它们仍然可以在文章正文中以明文形式提供。如果您希望它是安全的,请确保使用HTTPS。
编辑
您现在已经编辑了问题,您使用的似乎是method
,而不是type
。因此,如果在将其更改为POST
后仍有错误,请指定您得到的错误。
第2版
您指定您将得到一个HTTP method POST is not supported by this URL
错误。这意味着您的servlet不接受POST
方法。这很可能意味着您继承了一些只接受GET
的基本servlet。查看servlet的所有代码会很有帮助。
<form type="get" action="Login" method="POST">
Email:<input name="email"/>
Password:<input name="password"/>
<input type="Submit" value="Log in"/>
我建议你用doPost()
的方法代替processRequest()
。
在元素中使用method="POST"属性
覆盖Login
类中的HttpServlet#doPost()
方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
String loginFormEmail = request.getParameter("email");
String loginFormPassword = request.getParameter("password");
// do something to produce a response
}
这可能需要更改可能被重写的service()
方法,以便调用processRequest()
方法,而不管HTTP方法是什么。这取决于您尚未展示的Login
类实现的其余部分。
然后更改您的<form>
以发出POST
请求。
尝试覆盖HttpServlet方法doPost((和doGet((:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
processRequest(request,response);
}