2013-05-21 178 views
0

我正在構建一個簡單的Web應用程序並嘗試創建登錄頁面。該頁面由一個帶有加載Servlet的表單的JSP組成。使用POST將參數從JSP發送到Servlet

我已經得到形式使用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 - HTTP方法POST不受此URL支持)

我需要知道如何使用POST將參數從JSP發送到Servlet。我認爲這可能涉及到使用RequestDispatcher對象,但是我發現使用RequestDispatcher將數據從Servlet發送到JSP的所有教程都解釋了,而不是相反。你能/你應該使用請求分派器從JSP發送POST數據到Servlet嗎?以及如何從Servlet訪問這些參數? (是否有一個相當於POST的request.getParameter()?)

我知道使用POST仍然不安全,但它比在查詢字符串中包含密碼要好很多,我會以後再考慮安全問題。

對於基本問題的道歉,我發現很多在線教程,但他們都沒有回答這個具體問題。謝謝。

+0

你使用POST時,你得到了什麼錯誤? – 2013-05-21 12:58:05

+0

查看該問題的答案:http://stackoverflow.com/questions/2349633/servlets-doget-and-dopost –

+0

使用POST時出現的錯誤是HTTP狀態405 - 此方法不支持HTTP方法POST – Jon

回答

4

嘗試

<form method="POST" action="Login> 

注:method,而不是type指定GET/POST。

但它並不比使用GET更「安全」。在帖子正文中它們仍以明文顯示。如果您希望安全,請確保使用HTTPS。

編輯

您現在已經修改了你的問題,看來您正在使用method,不type。因此,如果在將其更改爲POST後仍然存在錯誤,請指定您收到的錯誤。

EDIT2

你指定你得到一個HTTP method POST is not supported by this URL錯誤。這意味着您的servlet不接受POST方法。這很可能意味着你繼承了一些只接受GET的基本servlet。查看servlet的所有代碼將會很有幫助。

+0

謝謝,我已經糾正了這個錯誤,但在使用POST時仍然出現錯誤。我提交表單時遇到的錯誤是:HTTP狀態405 - 此方法不支持HTTP方法POST – Jon

+0

您可能不會顯示所有代碼。你是否繼承了另一個servlet? – NilsH

+0

我正在使用擴展HttpServlet的NetBeans Servlet模板。我已經更新了問題以顯示Servlet的完整代碼。謝謝。 – Jon

0
<form type="get" action="Login" method="POST"> 
Email:<input name="email"/> 
Password:<input name="password"/> 
<input type="Submit" value="Log in"/> 

我建議你,而不是processRequest(),使用doPost()方法。在你的元素

0

使用method =「POST」屬性

+0

當我這樣做時,我提交表單時出現此錯誤:HTTP狀態405 - 這個URL不支持HTTP方法POST – Jon

0

覆蓋的HttpServlet#doPost()方法在Login

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請求。

0

嘗試覆蓋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); 
}