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. ビューの場所 (/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/サーブレットのコンテキストまたは注釈のいずれかからビューの場所()を推測する方法はありますか?

MVCフレームワーク(推奨)または自作フレームワークを使用します( 100%内部/プライベート/趣味で、純粋な学習目的でない限り、推奨されません)。

于 2012-12-19T15:40:38.283 に答える