Просто вызовите URL-адрес сервлета вместо URL-адреса JSP и выполните задание предварительной обработки в методе doGet()
сервлета.
например. сервлет, который загружает список продуктов до того, как JSP представит их:
@WebServlet("/products")
public class ProductServlet extends HttpServlet {
@EJB
private ProductService productService;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Preprocess request: load list of products for display in JSP.
List<Product> products = productService.list();
request.setAttribute("products", products);
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
}
}
Где JSP выглядит так:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/format" prefix="fmt" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Our Products</title>
</head>
<body>
<h1>Products</h1>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>Price</th>
</tr>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.id}</td>
<td><c:out value="${product.name}" /></td>
<td><c:out value="${product.description}" /></td>
<td><fmt:formatNumber value="${product.price}" type="currency" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
Если перейти к http://localhost:8080/contextname/products напрямую, то будет вызван сервлет doGet()
, и продукты будут загружены из БД и сохранены в области запроса, а элемент управления будет перенаправлен в JSP, Turn представляет результаты в некоторой красивой HTML-разметке.
Смотри также: