java - 在页面加载时从JSP文件调用servlet

标签 java jsp servlets onload

是否可以在不使用HTML表单的情况下从JSP文件调用servlet?

例如,在页面加载期间在HTML表中显示数据库的结果。

最佳答案

您可以使用Servlet的doGet()方法来预处理请求并将请求转发到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等)之后可用,另请参见@WebServlet annotation with Tomcat 7。如果您无法升级,或者由于某种原因需要使用与Servlet 3.0不兼容的web.xml,那么您需要按照以下方式在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打开它,其中/context是Web应用程序的部署上下文路径,而/products是servlet的URL模式。如果您恰好在其中包含任何HTML <form>,则只需像<form method="post">一样将其发布到当前URL,然后在同一servlet中添加doPost()即可执行后处理工作。继续下面的链接以获取更具体的示例。

也可以看看


Our Servlets wiki page
doGet and doPost in Servlets
How to avoid Java code in JSP
Beginning and intermediate JSP/Servlet tutorials

关于java - 在页面加载时从JSP文件调用servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60250054/

相关文章:

html - 从 Java servlet 为 HTML5 音频控件提供音频数据

java - 关于servlet的正确使用方法的问题

java - 获得二次方程的准确根

java - 检测代词及其名词?

java - 将 FreeMarker 与 EXPOSE_PROPERTIES_ONLY 结合使用

java - 如何在 Eclipse 中使用外部 .class 文件?

jsp - wamp 服务器 :How to deploy jsp application

java - 使用 '<tr onclick=alertContents()>' 从 HTML 表中获取一行内容

java - 如何从 Servlet 获取对象作为参数

java - 从 servlet 创建的 html 获取信息