Как исправить зацикливание перенаправления в шаблоне URL-адреса сервлета, например, пользователи/*

У меня проблема с настройкой шаблона URL для сервлета. Если я установлю что-то вроде «users/*», после forwart() или include() для jsp, я получу цикл перенаправления.

Вот мой код:

@WebServlet("/users/*")
public class UserServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        String[] pathParts = request.getPathInfo().split("/");

        int id = Integer.valueOf(pathParts[1]);

        request.setAttribute("userId", id);
        request.getRequestDispatcher("user.jsp").include(request, response);
    }
}

person mustafa1453    schedule 19.05.2015    source источник
comment
Спасибо ребята. Ваши решения действительно работают. Я не знаю почему, но действительно работает) Если у вас есть время, не могли бы вы объяснить мне различия?   -  person mustafa1453    schedule 20.05.2015
comment
Добавил объяснение. Если вы считаете это полезным, отметьте его как правильное, что может быть полезно для других пользователей.   -  person Karthik Cherukuri    schedule 20.05.2015


Ответы (2)


Просто добавьте «/» на свою jsp-страницу.

 getServletContext().getRequestDispatcher("/user.jsp").forward(request, response);

Так что же здесь имело значение???

Если вы напрямую указываете user.jsp, сервер проверяет user.jsp в каталоге по умолчанию, например, если Tomcat используется в качестве веб-сервера, тогда сервер проверяет наличие user.jsp в папке /webapp (где находятся все приложения).

так где же находится user.jsp??? Это в вашем приложении, например "JSPTurorial". Если вы хотите сослаться на user.jsp в своем приложении, вы должны указать относительный путь "/user.jsp", чтобы ваш сервер проверил здесь "http://localhost:8080/JSPTutorial/user.jsp", поскольку сервер выполняет файлы в каталоге /JSPTutorial, иначе он проверит здесь "http://localhost:8080/user.jsp", который не будет доступен по этому пути.

person Karthik Cherukuri    schedule 19.05.2015

Попробуйте изменить свой сервлет следующим образом:

@WebServlet("/users")
public class UserServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        String[] pathParts = request.getPathInfo().split("/");

        int id = Integer.valueOf(pathParts[1]);

        request.setAttribute("userId", id);
       getServletContext().getRequestDispatcher("/user.jsp").forward(request, response);
    }

}
person Karim G    schedule 19.05.2015