2

我正在尝试实现一个简单的登录 servlet,但它不能正常工作。

我想知道的是如何使用 HTTP POST 传递参数。它已经可以与 HTTP GET 一起使用,但用户名和密码可以从 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);
    }
}

问题是userNameandpassword字符串总是空的,这意味着参数永远不会从 POST 中获取。我究竟做错了什么?

4

3 回答 3

1

它应该可以工作,您可以通过更改表单方法来检查并尝试,您应该在 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. 您使用的是哪个网络/应用服务器?你检查过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 回答