Все онлайн ссылки и руководитель первого JSP Servlet & книгу я читала государству характеристику RequestDispatcher и Redirect (т.е. resoponse.sendRedirect()), как:Путаница с RequestDispatcher говоря адресной строке браузера не изменяется
«Запрос диспетчера» - URL-адрес в строке браузера не изменяется.
«Перенаправление» - пользователь видит новый URL-адрес в браузере.
Но согласно моему тесту, для RequestDispatcher, я вижу изменения URL, поэтому я не понимаю, что они на самом деле означают.
С ниже код,
Я на
http://whatever.com/tmp3.jsp
и вот что говорит URL в браузере.Нажмите на кнопку для вызова сервлета, который в свою очередь он передает данные на сервер, то сервер посылает ответ обратно в браузер, так что URL в браузере теперь говорит
http://whatever.com/register
Так .. URL изменилось! (от .../tmp3.jsp to .../register)
Может ли кто-нибудь объяснить мне, что они подразумевают под «URL в браузере не меняется»?
Пример:
(tmp3.jsp)
<html>
<head>
</head>
<body>
${message}
<!-- click button to send request to servlet -->
<form method="POST" action="register">
<input type="submit" value="click!">
</form>
</body>
</html>
(сервлет)
package com.masatosan.tmp;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Tmp extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("message", "processed!");
String address = "/tmp3.jsp";
request.getRequestDispatcher(address).forward(request, response);
}//end doPost()
}//end class
(web.xml фрагмент) - отображение сервлета и URL
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.masatosan.tmp.Tmp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
Я бы разместил JSP в папке '/ WEB-INF' и полностью использовал'/register'. – BalusC
@BalusC: В чем причина размещения файлов jsp в/WEB-INF? Я думал/WEB-INF содержит классы и библиотеки, а файлы jsp - что-то вроде webapps/webContent/foo.jsp? –
Чтобы скрыть JSP от прямого доступа. Таким образом, вы получаете более приятные URL-адреса. Вы уже отправляете запрос в JSP-файл по запросу GET. Так почему бы просто не использовать сервлет как контроллер до конца? См. Также [«Скрытые функции» JSP/Сервл] (http://stackoverflow.com/questions/2523430/hidden-features-of-jsp-servlet/2525995#2525995). Более полезную информацию и ссылки можно найти на странице [Информация о тегах сервлета] (http://stackoverflow.com/tags/servlets/info). – BalusC