首頁  >  問答  >  主體

呼叫一個servlet時,從JSP檔案載入頁面

<p>我可以在不使用HTML表單的情況下從JSP檔案呼叫servlet嗎? </p> <p>例如,在頁面載入期間顯示來自資料庫的結果在HTML表格中。 </p>
P粉289775043P粉289775043392 天前591

全部回覆(2)我來回復

  • P粉132730839

    P粉1327308392023-08-25 12:25:47

    您需要根據您的需求使用RequestDispatcher的forward/include方法來達到相同的效果。

    在JSP中,您需要使用以下標籤:

    jsp:include

    例如:

    <jsp:include page="/HandlerServlet" flush="true">

    jsp:forward

    例如:

    <jsp:forward page="/servlet/ServletCallingJsp" />

    請查看進階JSP範例:JSP-Servlet通訊:

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

    回覆
    0
  • P粉422227023

    P粉4222270232023-08-25 10:10:11

    您可以使用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註解與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>,則只需將其POST到當前URL,例如<form method="post">,並在同一個servlet中加入一個doPost()來執行後處理工作。請繼續閱讀以下連結以獲取更多關於此的具體範例。

    另請參閱

    回覆
    0
  • 取消回覆