Apabila servlet dipanggil, halaman dimuatkan daripada fail JSP
P粉289775043
P粉289775043 2023-08-24 12:47:14
0
2
676
<p>Bolehkah saya memanggil servlet daripada fail JSP tanpa menggunakan borang HTML? </p> <p>Sebagai contoh, paparkan hasil daripada pangkalan data dalam jadual HTML semasa pemuatan halaman. </p>
P粉289775043
P粉289775043

membalas semua(2)
P粉132730839

Anda perlu menggunakan kaedah forward/include RequestDispatcher mengikut keperluan anda untuk mencapai kesan yang sama.

Dalam JSP anda perlu menggunakan tag berikut:

jsp:include

Contohnya:

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

jsp:ke hadapan:

Contohnya:

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

Sila lihat Contoh JSP Lanjutan: Komunikasi JSP-Servlet:

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

P粉422227023

Anda boleh menggunakan kaedah servlet's doGet() untuk mempraproses permintaan dan memajukan permintaan kepada JSP. Kemudian hanya tuding ke URL servlet dan bukannya URL JSP dalam pautan dan bar alamat penyemak imbas.

Contohnya:

@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>

Sila ambil perhatian bahawa fail JSP diletakkan dalam folder /WEB-INF untuk menghalang pengguna daripada mengaksesnya secara langsung tanpa memanggil servlet.

Juga ambil perhatian bahawa @WebServlet hanya berfungsi dengan Servlet 3.0 (Tomcat 7, dsb.), lihat @WebServlet anotasi dengan Tomcat 7@WebServlet仅适用于Servlet 3.0(Tomcat 7等),请参阅@WebServlet注释与Tomcat 7。如果您无法升级,或者由于某种原因需要使用与Servlet 3.0不兼容的web.xml,则需要手动在web.xml. Jika anda tidak boleh menaik taraf, atau atas sebab tertentu perlu menggunakan web.xml yang tidak serasi dengan Servlet 3.0, anda perlu mendaftarkan servlet secara manual dalam web.xml dalam cara berikut, Sebaliknya gunakan anotasi:

<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>

Setelah servlet didaftarkan dengan betul melalui anotasi atau XML, anda kini boleh membukanya melalui http://localhost:8080/context/products di mana /context是Web应用程序部署的上下文路径,/products是servlet的URL模式。如果您在其中有任何HTML <form>,则只需将其POST到当前URL,如<form method="post">,并在同一个servlet中添加一个doPost() akan melaksanakan kerja pasca pemprosesan. Sila teruskan membaca pautan berikut untuk contoh yang lebih khusus tentang ini.

Lihat juga

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan