web-dev-qa-db-fra.com

Comment appeler servlet via une page JSP

Je voudrais appeler un servlet via une page JSP. Quelle est la méthode à appeler?

16
Rupesh

Vous pourriez utiliser <jsp:include> pour cela.

<jsp:include page="/servletURL" />

C'est cependant généralement l'inverse. Vous appelez le servlet qui le transmet ensuite au JSP pour afficher les résultats. Créez un servlet qui suit la méthode doGet().

request.setAttribute("result", "This is the result of the servlet call");
request.getRequestDispatcher("/WEB-INF/result.jsp").forward(request, response);

et en /WEB-INF/result.jsp

<p>The result is ${result}</p>

Appelez maintenant le servlet par l'URL correspondant à son <url-pattern> dans web.xml, par exemple. http://example.com/contextname/servletURL .


Si votre question réelle est "Comment soumettre un formulaire à une servlet?" il suffit ensuite de spécifier l'URL du servlet dans le formulaire HTML action.

<form action="servletURL" method="post">

Sa méthode doPost() sera alors appelée.


Voir également:

31
BalusC

Vous pouvez utiliser RequestDispatcher comme vous l’utilisez habituellement dans Servlet:

<%@ page contentType="text/html"%>
<%@ page import = "javax.servlet.RequestDispatcher" %>
<%
     RequestDispatcher rd = request.getRequestDispatcher("/yourServletUrl");
     request.setAttribute("msg","HI Welcome");
     rd.forward(request, response);
%>

Sachez toujours que ne commettez aucune réponse avant d'utiliser forward, car cela entraînerait IllegalStateException.

4
GMsoF

il n'y a pas de méthode pour appeler Servlet. Vous devez créer un mappage dans web.xml, puis déclencher ce mappage. 

Exemple: web.xml:

  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>test.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

Ce mappage signifie que chaque appel à http: // yoursite/yourwebapp/hello déclenche ce servlet Par exemple, ce jsp:

<jsp:forward page="/hello"/> 
3
smas

Pourquoi voudriez-vous faire cela? Vous ne devriez pas exécuter de code de contrôleur dans la vue et n'essayez certainement pas non plus d'extraire du code à l'intérieur d'une autre servlet dans la vue.

Effectuez tout d'abord le traitement et le refactoring de l'application, puis transmettez simplement les résultats à une vue. Rendre la vue aussi bête que possible et vous ne rencontrerez même pas ces problèmes.

Si ce type de conception est difficile pour vous, essayez Freemarker ou même quelque chose comme Velocity (bien que je ne le recommande pas) pour vous forcer à le faire. Vous n'avez jamais à faire ce genre de chose jamais.

Pour le dire plus précisément, le problème que vous essayez de résoudre n’est que le symptôme d’un problème plus grave: votre architecture/conception de vos servlets.

2
egervari

Vous pouvez soumettre votre page jsp à servlet. Pour cela, utilisez <form> tag.

Et pour rediriger utiliser:

response.sendRedirect("servleturl")
1
Harry Joy

Vous pouvez publier un formulaire HTML sur une URL mappée à un servlet ou insérer vos données dans l'objet HttpServletRequest que vous transmettez à la page jsp.

0
Papuass