Appel d'un servlet à partir du fichier JSP lors du chargement de la page
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 où /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
vous devrez utiliser les méthodes forward/include de RequestDispatcher en fonction de vos besoins.
dans JSP vous devez utiliser les étiquettes suivantes:
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">
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
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!
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>