Вы можете использовать doGet()
метод сервлета для предварительной обработки запроса и перенаправить запрос в 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
доступен только с Servlet 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
- это путь развернутого контекста веб-приложения, а /products
это шаблон URL сервлета.Если у вас есть какой-либо HTML <form>
внутри него, просто дайте ему POST к текущему URL, например, <form method="post">
и добавьте doPost()
к тому же сервлету для выполнения задания постобработки.Перейдите по ссылкам ниже для более конкретных примеров.
См. Также