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

pal*_*laa 7 java jsp servlets onload

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

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

Bal*_*usC 9

您可以使用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);
    }

}
Run Code Online (Sandbox Code Playgroud)
<%@ 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>
Run Code Online (Sandbox Code Playgroud)

请注意,JSP文件放在/WEB-INF文件夹中,以防止用户在不调用servlet的情况下直接访问它.

另请注意,@WebServlet仅在Servlet 3.0(Tomcat 7等)之后才可用,另请参阅Tomcat 7的@WebServlet注释.如果你无法升级,或者由于某些原因需要使用web.xml与Servlet 3.0不兼容的,那么你需要手动注册servlet 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>
Run Code Online (Sandbox Code Playgroud)

一旦通过注释或XML正确注册了servlet,现在可以通过http:// localhost:8080/context/products打开它,其中/context是webapp的已部署上下文路径,并且/products是servlet的URL模式.如果你碰巧有任何HTML <form>,那么就让它像这样POST到当前的URL <form method="post">并添加doPost()到同一个servlet来执行后处理工作.继续以下链接以获得更具体的示例.

也可以看看

  • 问题是从JSP调用Servlet.您已回答从servlet调用JSP. (3认同)

YoK*_*YoK 8

您将需要使用RequestDispatcher的方法转发/包含,具体取决于您实现相同的要求.

在JSP中,您需要使用以下标记:

jsp:include:

该元素允许您在JSP文件中包含静态或动态文件.包含静态和动态文件的结果完全不同.如果文件是静态的,则其内容包含在调用JSP文件中.如果文件是动态的,它将作用于请求并发回JSP页面中包含的结果.当include操作完成时,JSP容器继续处理JSP文件的其余部分.

例如

<jsp:include page="/HandlerServlet" flush="true">  
Run Code Online (Sandbox Code Playgroud)

jsp:转发:

该元素将包含客户机请求信息的请求对象从一个JSP文件转发到另一个文件.目标文件可以是HTML文件,另一个JSP文件或servlet,只要它与转发JSP文件位于相同的应用程序上下文中即可.未处理元素之后的源JSP文件中的行.

例如

<jsp:forward page="/servlet/ServletCallingJsp" />
Run Code Online (Sandbox Code Playgroud)

检查高级JSP示例:JSP-Servlet通信:

http://www.oracle.com/technology/sample_code/tech/java/jsps/ojsp/jspservlet.html


归档时间:

查看次数:

20110 次

最近记录:

10 年,2 月 前