2

単純なログインサーブレットを実装しようとしていますが、正しく機能していません。

私が知りたかったのは、HTTPPOSTを使用してパラメーターを渡す方法です。すでにHTTPGETで機能しますが、ユーザー名とパスワードはURLから表示されます。POSTでそれらを非表示にすることをお勧めします。

<form method="post" action="home" >
  <input name="username" class="form-login" title="Username" value="" size="30" maxlength="2048" />
  <input name="password" type="password" class="form-login" title="Password" value="" size="30" maxlength="2048" />
  <input type="submit" value="Connect">
</form>

web.xml

  <servlet>
    <servlet-name>home</servlet-name>
    <servlet-class>controller.HomeController</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>home</servlet-name>
    <url-pattern>/home</url-pattern>
  </servlet-mapping>

サーブレット:

public class HomeController extends HttpServlet {

    private HttpSession session;
    private UserBean userBean;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        UserBean user = new UserBean();
        String userName = request.getParameter("username");
        String password = request.getParameter("password");

        user.setUsername(userName);
        user.setPassword(password);

        user = UserDAO.login(user);

        dispatch(request, response, ApplicationRessource.getInstance().getHomePage());
    }

    protected void dispatch(HttpServletRequest request,
                HttpServletResponse response, String page)
            throws javax.servlet.ServletException, java.io.IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(page);
        dispatcher.forward(request, response);
    }
}

問題は、userNamepassword文字列が常に空であるということです。つまり、パラメータがPOSTからフェッチされることはありません。私は何が間違っているのですか?

4

3 に答える 3

1

動作するはずです。formメソッドを変更して取得して試行することで確認できますか。URLにパラメータが表示されます。

于 2012-06-14T15:49:12.040 に答える
0

これを試してみてください

doPost(..)メソッドコードではdoGet(..)のみを実行し、すべてのロジックをdoGet(..)に配置して、それでも空白の値が表示されるかどうかを確認します。

出力を教えてください。

例:-

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
           doGet(request,response);
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        UserBean user = new UserBean();
        String userName = request.getParameter("username");
        String password = request.getParameter("password");

        user.setUsername(userName);
        user.setPassword(password);

        user = UserDAO.login(user);

        dispatch(request, response, ApplicationRessource.getInstance().getHomePage());
    } 
于 2012-06-14T16:39:13.577 に答える
0

この単純な実装は機能するはずですが、機能しないため、リクエストを操作しているコードがある可能性があります。あなたが投稿したコードはそれを決定するのに十分ではありません。

私が与えることができるいくつかのポインタは-

  1. web.xmlリクエストを操作しているフィルター/インターセプターがあるかどうかを確認してください。

  2. どのWeb/アプリサーバーを使用していますか?service(Http...)HttpServletのメソッド実装を確認しましたか。try placing a debug point in service(..) methodここで、リクエストオブジェクトに必要なリクエストパラメータがあるかどうかを確認できます。そうでない場合は、問題は何らかのフィルターまたはjsp自体に存在します。

  3. 何をしdispatch(request, response, ApplicationRessource.getInstance().getHomePage());ますか?問題がこの行の前にあることはわかっていますが、これは標準のHttpServletメソッドではないため、上記の質問に投稿されたものよりも多くのカスタムコードがあると思います。

于 2012-06-18T05:43:21.480 に答える