Servlets Servlet:在doGet()方法中重定向到索引而不是显示视图的正确方法

Servlets Servlet:在doGet()方法中重定向到索引而不是显示视图的正确方法,servlets,Servlets,鉴于此doGet实现: @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getParameterMap().isEmpty()) { // DAO initialized in init() method Collectio

鉴于此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);

        }

    }

}
问题:

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

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

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

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

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

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