Appel d'un servlet à partir du fichier JSP lors du chargement de la page

puis-je appeler un servlet à partir d'un fichier JSP sans utiliser un formulaire HTML?

par exemple, pour afficher les résultats d'une base de données dans une table HTML lors du chargement de la page.

6
demandé sur BalusC 2010-08-28 17:47:06

4 réponses

vous pouvez utiliser la doGet() méthode du servlet à préprocessus une requête et transmettre la requête au JSP. Ensuite, il suffit de pointer l'URL servlet au lieu de L'URL JSP dans les liens et la barre d'adresse du navigateur.

E. G.

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

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

notez aussi que @WebServlet n'est disponible que depuis Servlet 3.0 (Tomcat 7, etc), Voir aussi @WebServlet annotation with Tomcat 7 . Si vous ne pouvez pas mettre à jour, ou si vous devez pour une raison quelconque utiliser un web.xml qui n'est pas compatible avec Servlet 3.0, alors vous devez enregistrer manuellement le servlet à l'ancienne dans web.xml comme ci-dessous au lieu d'utiliser l'annotation:

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

ayant correctement enregistré le servlet par annotation ou XML, maintenant vous pouvez l'ouvrir par http://localhost:8080/context/products /context est le chemin de contexte déployé de la webapp et /products est le modèle D'URL du servlet. S'il vous arrive d'avoir un HTML <form> à l'intérieur de celui-ci, alors il suffit de le poster à L'URL courante comme <form method="post"> et d'ajouter un doPost() au même servlet pour effectuer le travail de post-traitement. Continuer la liens ci-dessous pour des exemples plus concrets.

Voir aussi

8
répondu BalusC 2017-05-23 12:32:03

vous devrez utiliser les méthodes forward/include de RequestDispatcher en fonction de vos besoins.

dans JSP vous devez utiliser les étiquettes suivantes:

jsp: include :

L'élément vous permet pour inclure un statique ou dynamique fichier dans un fichier JSP. Les résultats de y compris les fichiers statiques et dynamiques sont tout à fait différent. Si le fichier est statique, son le contenu est inclus dans le l'appel de fichier JSP. Si le fichier est dynamique, il agit sur la demande et renvoie un résultat qui est inclus dans la page JSP. Lorsque le comprennent action est terminée, le conteneur JSP continue le traitement du reste de le fichier JSP.

p.ex.

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

JSP: forward :

l'élément transmet le demande objet contenant client demander des informations à partir d'un fichier JSP d'un autre fichier. Le fichier cible peut être un fichier HTML, un autre fichier JSP, ou une servlet, tant qu'il est dans l' même contexte d'application que le transmission du fichier JSP. Les lignes dans le Source fichier JSP après le élément ne sont pas transformés.

p.ex.

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

Vérifier l'Avancée des JSP de l'Échantillon : JSP-Servlet de la Communication:

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

7
répondu YoK 2010-08-28 15:16:49

bien sûr que vous pouvez, il suffit de l'inclure dans votre action dans le form . Mais vous devez écrire correctement doPost ou doGet pour traiter la demande!

0
répondu Truong Ha 2010-08-29 00:36:04

si vous voulez appeler une méthode servlet particulière que vous utilisez également le langage D'Expression. Par exemple, vous pouvez faire quelque chose comme:

Servlet

ForexTest forexObject = new ForexTest();
request.setAttribute("forex", forexObject);

JSP

<body bgcolor="#D2E9FF">
Current date : ${forex.rate}
</body>
0
répondu Rachel 2010-10-13 19:56:39