Maison  >  Questions et réponses  >  le corps du texte

Lorsqu'une servlet est appelée, une page est chargée à partir d'un fichier JSP

<p>Puis-je appeler une servlet depuis un fichier JSP sans utiliser de formulaire HTML ? </p> <p>Par exemple, affichez les résultats d'une base de données dans un tableau HTML lors du chargement de la page. </p>
P粉289775043P粉289775043392 Il y a quelques jours593

répondre à tous(2)je répondrai

  • P粉132730839

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

    Vous devez utiliser la méthode forward/include de RequestDispatcher en fonction de vos besoins pour obtenir le même effet.

    Dans JSP, vous devez utiliser les balises suivantes :

    jsp:inclure

    Par exemple :

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

    jsp:forward:

    Par exemple :

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

    Veuillez consulter l'exemple JSP avancé : Communication JSP-Servlet :

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

    répondre
    0
  • P粉422227023

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

    Vous pouvez utiliser la méthode doGet() du servlet pour prétraiter la requête et transmettre la requête à JSP. Ensuite, pointez simplement sur l'URL du servlet au lieu de l'URL JSP dans la barre d'adresse du lien et du navigateur.

    Par exemple :

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

    Veuillez noter que le fichier JSP est placé dans le dossier /WEB-INF pour empêcher les utilisateurs d'y accéder directement sans appeler la servlet.

    Notez également que @WebServlet ne fonctionne qu'avec Servlet 3.0 (Tomcat 7, etc.), voir @WebServlet avec Tomcat 7@WebServlet仅适用于Servlet 3.0(Tomcat 7等),请参阅@WebServlet注释与Tomcat 7。如果您无法升级,或者由于某种原因需要使用与Servlet 3.0不兼容的web.xml,则需要手动在web.xml. Si vous ne pouvez pas effectuer la mise à niveau ou si, pour une raison quelconque, vous devez utiliser web.xml qui n'est pas compatible avec Servlet 3.0, vous devez enregistrer manuellement le servlet dans web.xml dans le de la manière suivante, utilisez plutôt des annotations :

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

    Une fois la servlet correctement enregistrée via annotations ou XML, vous pouvez maintenant l'ouvrir via http://localhost:8080/context/products où /context是Web应用程序部署的上下文路径,/products是servlet的URL模式。如果您在其中有任何HTML <form>,则只需将其POST到当前URL,如<form method="post">,并在同一个servlet中添加一个doPost() effectuera le travail de post-traitement. Veuillez continuer à lire les liens suivants pour des exemples plus spécifiques.

    Voir aussi

    répondre
    0
  • Annulerrépondre