Как вызвать сервлет через страницу 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.