当前位置: 首页 > 面试题库 >

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

杨无尘
2023-03-14
问题内容

是否可以在不使用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.xmlServlet 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的部署上下文路径/productsservlet的URL模式。如果你恰好在其中包含任何HTML <form>,则只需像这样<form method="post">将其POST到当前URL,然后将其添加doPost()到相同的servlet中即可执行后处理工作。继续下面的链接以获取更具体的示例。



 类似资料:
  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此它不需要调用任何东西,只需在页面加载时继续使用servlet。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用先前声明的会话变量将所有信息(如登录名、密码等)打印到表中。

  • 我想在加载aboutme时调用servlet GetUserData。jsp页面。 基本上,它所做的是设置一个会话变量,允许用户查看其配置文件信息。 它设置了一个会话变量,因此不需要调用任何东西,只需在页面加载时继续使用servlet即可。 这个servlet调用另一种方法来生成SQL语句并准备要发送的数据。 最后,在JSP页面上,我想使用之前声明的会话变量将所有信息(如登录名、密码等)打印到表中

  • 谁能告诉我,除了RequestDispatcher之外,是否还有其他方法可以从我的servlet调用jsp页面?因为我试了很多都没有成功。 我的servlet工作正常,从JSP中恢复了所有数据。我所需要的只是在用户正确输入用户名和密码时被重定向到另一个页面。 我要为其重定向的jsp

  • 我在从文件调用Java方法时遇到问题。我将我的项目转换为Maven,但仍然存在同样的问题。 我的文件位于中 并且我想从这个类中调用方法 而这个类 但当我尝试加载a页时,出现了这个错误 VI 11,2015年8:47:28 ODP。StandardWrapperValve调用严重:路径为[/db-ReagenCII]的上下文中servlet[jsp]的servlet.service()引发异常[/r

  • 问题内容: 我正在将React与Firebase一起使用来开发一个小型Web应用程序。为了进行身份验证,我使用了上下文API,并且在上下文中添加了登录用户的详细信息。 AuthProvider.tsx AuthConsumer.tsx PrivateRoute.tsx App.tsx 用户已经登录,并且会话持久性设置为本地。问题是,当我尝试本地主机/订阅(这是一条私有路由)时,context.is

  • 我正在使用J2EE(使用spring和JSP)建立一个网站。我有像client.jsp和user.jsp的多页。每一页都有一个页眉、一个内容和一个页脚。 因此,我想做的是在每个jsp文件(客户机或用户)中包含页眉和页脚,但每个文件都有一个特定的页眉和脚注。比方说,header_client。jsp和header_footer.jsp。 为了包括这个,我正在做的: 但是,如果此标头不存在,我想加载一