0

シンプルな Web アプリを構築し、ログイン ページを作成しようとしています。このページは、サーブレットをロードするフォームを含む JSP で構成されています。

GET メソッドを使用してフォームを動作させました。

JSP は次のようになります。

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

そしてサーブレットでは:

@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 からサーブレットにパラメーターを送信する方法を知る必要があります。これには RequestDispatcher オブジェクトの使用が含まれる可能性があると思いますが、私が見つけたすべてのチュートリアルでは、RequestDispatcher を使用してサーブレットから JSP にデータを送信する方法が説明されています。その逆ではありません。Request Dispatcher を使用して、JSP からサーブレットに POST データを送信できますか? また、サーブレットからこれらのパラメーターにアクセスするにはどうすればよいでしょうか? (POST の request.getParameter() に相当するものはありますか?)

POST を使用しても安全ではないことは理解していますが、クエリ文字列にパスワードを含めるよりもはるかに優れた方法であり、セキュリティについては後で考えます。

基本的な質問で申し訳ありません。オンラインで多くのチュートリアルを見つけましたが、この特定の質問に答えるものはないようです。ありがとうございました。

4

5 に答える 5

4

試す

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

注: GET/POST を指定するmethod代わりに。type

しかし、GET を使用するよりも「安全」というわけではありません。それらは、投稿本文でクリア テキストで引き続き利用できます。セキュリティを確保したい場合は、必ず HTTPS を使用してください。

編集

質問を編集しましたがmethod、 ではなくを使用しているようですtype。したがって、 に変更した後もエラーが発生する場合は、発生しPOSTているエラーを特定してください。

編集2

エラーが発生していることを指定しますHTTP method POST is not supported by this URL。これは、サーブレットがメソッドを受け入れないことを意味しますPOST。これは、 のみを受け入れる基本サーブレットを継承していることを意味しますGET。サーブレットのすべてのコードを見ると役に立ちます。

于 2013-05-21T12:58:12.333 に答える
0
<form type="get" action="Login" method="POST">
 Email:<input name="email"/>
 Password:<input name="password"/>
<input type="Submit" value="Log in"/>

processRequest()の代わりにメソッドを使用することをお勧めしますdoPost()

于 2013-05-21T12:59:47.670 に答える
0

要素で method="POST" 属性を使用する

于 2013-05-21T13:00:21.487 に答える
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);
}
于 2016-03-29T13:23:21.513 に答える