Ответ 1
Вы можете использовать метод doGet()
сервлета для запроса preprocess и перенаправить запрос на JSP. Затем просто укажите URL сервлета вместо URL JSP в ссылках и адресной строке браузера.
например.
@WebServlet("/products")
public class ProductsServlet extends HttpServlet {
@EJB
private ProductService productService;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Product> products = productService.list();
request.setAttribute("products", products);
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.name}</td>
<td>${product.description}</td>
<td>${product.price}</td>
</tr>
</c:forEach>
</table>
Обратите внимание, что файл JSP помещается внутри папки /WEB-INF
, чтобы пользователи не могли напрямую обращаться к нему без вызова сервлета.
Также обратите внимание, что @WebServlet
доступен только с сервлета 3.0 (Tomcat 7 и т.д.), см. также аннотацию @WebServlet с Tomcat 7. Если вы не можете обновить или когда вам по какой-то причине нужно использовать web.xml
, который несовместим с Servlet 3.0, вам нужно вручную зарегистрировать сервлет старомодным способом в web.xml
, как показано ниже, вместо используя аннотацию:
<servlet>
<servlet-name>productsServlet</servlet-name>
<servlet-class>com.example.ProductsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>productsServlet</servlet-name>
<url-pattern>/products</url-pattern>
</servlet-mapping>
Как только вы правильно зарегистрировали сервлет по аннотации или XML, теперь вы можете открыть его http://localhost:8080/context/products, где /context
является webapp развернутый контекстный путь и /products
- шаблон URL сервлета. Если у вас в нем есть какой-либо HTML <form>
, просто поставьте POST в текущий URL-адрес, например, <form method="post">
и добавьте doPost()
тому же сервлету для выполнения задания постобработки. Продолжите приведенные ниже ссылки для более конкретных примеров.