Мне было интересно, можно ли отправить HTML-страницу, используя как Servlet, так и JSP. И нет, я не хочу, чтобы JSP выполнял всю работу, перенаправляя запрос от сервлета. Я хочу, чтобы Servlet писал «привет», а JSP писал «имя пользователя».
Это моя попытка, которая не удалась:
индекс.html:
<html><body>
<form action = "MyServlet" method = "POST">
Enter name: <input type = "text" name = "name">
<button>Submit name</button>
</form>
</body></html>
МойСервлет.java:
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();
pw.println("hello ");
RequestDispatcher dispatch = req.getRequestDispatcher("test.jsp");
dispatch.forward(req, resp);
}
}
test.jsp:
<html><body>
<%= request.getParameter("name") %>
</body></html>
После заполнения моей формы:
, я ожидал получить hello elephant
. Но я получаю только elephant
. Я попытался поместить pw.flush() в код сервлета, что дало противоположный результат - просто hello
.
Теперь я застрял, так как я не понимаю, что не так. Я предполагаю, что когда я сбрасывал поток, ответ был зафиксирован, поэтому остальная часть кода не запускалась. Но почему пользователь не получил сообщение hello
, когда я не зафиксировал (сбросил) поток? Могу ли я вообще сделать то, что я описал? Похоже, мне не хватает некоторых элементарных вещей.
Используйте RequestDispatcher.include(ServletRequest, ServletResponse) вместо forward
. Изменять
dispatch.forward(req, resp);
к
dispatch.include(req, resp);