Java 在页面加载时从JSP文件调用servlet
是否可以在不使用HTML表单的情况下从JSP文件调用servlet?
例如,在页面加载期间在HTML表中显示数据库的结果。
回答:
你可以使用doGet()servlet 的方法来预处理请求并将请求转发到JSP。然后只需在链接和浏览器地址栏中指向servlet URL而不是JSP URL。
例如
@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文件夹内,以防止用户无需调用servlet即可直接访问它。
还要注意,该@WebServlet
功能仅在Servlet 3.0(Tomcat 7等)之后可用,另请参阅Tomcat 7的@WebServlet
批注。如果你无法升级,或者由于某种原因需要使用web.xml
与Servlet 3.0
不兼容的,那么你需要web.xml
按以下所示的旧方式手动注册Servlet
,而不要使用批注:
<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正确注册servlet之后,现在你可以通过http:// localhost:8080 / context / products打开该文件,其中/contextwebapp
的部署上下文路径/products
是servlet
的URL模式。如果你恰好在其中包含任何HTML <form>
,则只需像这样<form method="post">
将其POST到当前URL,然后将其添加doPost()
到相同的servlet
中即可执行后处理工作。继续下面的链接以获取更具体的示例。
以上是 Java 在页面加载时从JSP文件调用servlet 的全部内容, 来源链接: utcz.com/qa/421483.html