Как вызвать сервлет через страницу JSP
Я хотел бы вызвать сервлет через страницу JSP. Каков метод вызова?
Ответы
Ответ 1
Вы можете использовать <jsp:include>
для этого.
<jsp:include page="/servletURL" />
Как обычно, наоборот. Вы вызываете сервлет, который, в свою очередь, пересылается в JSP для отображения результатов. Создайте сервлет, который делает что-то вроде следующего в методе doGet()
.
request.setAttribute("result", "This is the result of the servlet call");
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);
и /WEB-INF/result.jsp
<p>The result is ${result}</p>
Теперь вызовите сервлет по URL-адресу, который соответствует его <url-pattern>
в web.xml
, например. http://example.com/contextname/servletURL.
Если ваш актуальный вопрос: "Как отправить форму сервлету?" то вам просто нужно указать URL-адрес сервлета в HTML-форме action
.
<form action="servletURL" method="post">
Затем будет вызываться его метод doPost()
.
См. также:
Ответ 2
Вы можете использовать RequestDispatcher
, как обычно используете его в Servlet
:
<%@ page contentType="text/html"%>
<%@ page import = "javax.servlet.RequestDispatcher" %>
<%
RequestDispatcher rd = request.getRequestDispatcher("/yourServletUrl");
request.setAttribute("msg","HI Welcome");
rd.forward(request, response);
%>
Всегда помните, что не принимайте никакого ответа, прежде чем использовать forward
, так как это приведет к IllegalStateException
.
Ответ 3
нет метода вызова Servlet. Вы должны сделать сопоставление в web.xml и затем запустить это сопоставление.
Пример: web.xml:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Это сопоставление означает, что каждый вызов http://yoursite/yourwebapp/hello запускает этот сервлет
Например, это jsp:
<jsp:forward page="/hello"/>
Ответ 4
Зачем вам это нужно? Вы не должны выполнять код контроллера в представлении, и, конечно же, не должны пытаться вытаскивать код внутри другого сервлета в представление.
Сначала выполните всю обработку и рефакторинг приложения, а затем просто откройте результаты для представления. Сделайте представление настолько глупым, насколько это возможно, и вы даже не столкнетесь с этими проблемами.
Если вам нравится такой дизайн, попробуйте Freemarker или даже что-то вроде Velocity (хотя я и не рекомендую), чтобы заставить вас это сделать. Вам никогда не приходилось делать такого рода вещи.
Чтобы сказать более точно, проблема, которую вы пытаетесь решить, является лишь симптомом большей проблемы - вашей архитектурой/дизайном ваших сервлетов.
Ответ 5
Вы можете отправить свою страницу jsp в сервлет. Для этого используйте тег <form>
.
И для перенаправления использования:
response.sendRedirect("servleturl")
Ответ 6
Вы можете отправить HTML-форму в URL-адрес, который сопоставляется сервлету или вставить ваши данные в объект HttpServletRequest, который вы передаете на страницу jsp.