1

鉴于此doGet实现:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    if (request.getParameterMap().isEmpty()) {

        // DAO initialized in init() method
        Collection<User> users = resource.getUsers();

        if (users != null){

            HttpSession session = request.getSession();
            session.setAttribute("users", users);

        }

        request.getRequestDispatcher("/WEB-INF/users/index.jsp").forward(request, response);

    }

    else {

        String name = request.getParameter("name");

        // DAO initialized in init() method
        User user = resource.getUser(name);

        if (user == null){
            request.setAttribute("message", "Unknown user: " + name);
            request.getRequestDispatcher("/WEB-INF/errors/404.jsp").forward(request, response);
        }

        else {

            HttpSession session = request.getSession();
            session.setAttribute("user", user);

            request.getRequestDispatcher("/WEB-INF/users/show.jsp").forward(request, response);

        }

    }

}

问题:

  1. request.getParameterMap().isEmpty()测试参数是否存在的首选方法吗?
  2. 有没有办法从 Servlet 的上下文或注释中推断出视图的位置(/WEB-INF/users/)?
4

1 回答 1

0

request.getParameterMap().isEmpty()测试参数是否存在的首选方法吗?

是的。但这不是您特定情况的正确解决方案。如果最终用户提供了一个名称不是 的任意参数,您的代码将失败name,从而导致参数映射不为空,从而输入需要该name参数的块。您应该真正明确地检查请求参数name本身。

String name = request.getParameter("name");

if (name == null) {
    Collection<User> users = resource.getUsers();
    // ...
}
else {
    User user = resource.getUser(name);
    // ...
}

有没有办法/WEB-INF/users/从 Servlet 的上下文或注释中推断出视图的位置()?

使用 MVC 框架(推荐)或自制框架(不推荐,除非 100% 内部/私人/爱好,因此用于纯粹的学习目的)。

于 2012-12-19T15:40:38.283 回答