2009-06-23 9 views
3

J'ai un servlet qui ressemble à ceci:Comment détecter l'URL dans une servlet Java lors du transfert vers JSP?

public class ExampleServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.getWriter().println(request.getPathInfo()); 
    } 
} 

avec une cartographie web.xml comme:

<servlet> 
    <servlet-name>example</servlet-name> 
    <servlet-class>com.example.ExampleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>example</servlet-name> 
    <url-pattern>/example/*</url-pattern> 
</servlet-mapping> 

et il me donne exactement ce que je pense ... Si je vais à http://localhost:8080/example/foo il imprime "/ foo". Cependant, si je change le servlet de transmettre à un fichier JSP:

public class ExampleServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // do something here to check the value of request.getPathInfo() 
     request.getRequestDispatcher("whatever.jsp").forward(request, response); 
    } 
} 

puis quand je vérifie la valeur de getPathInfo() il rend compte maintenant « whatever.jsp » au lieu de « foo ».

  1. Pourquoi cela a-t-il changé avant d'être transmis à la JSP?
  2. Comment puis-je détecter quelle URL l'utilisateur recherche?

EDIT: Juste au cas où cela est important, c'est sur Google App Engine. Ne pense pas que ça devrait cependant.

+0

Dans le deuxième cas, vérifiez-vous getPathInfo avant ou après la demande de transfert? Ou vous faites cela dans le fichier jsp? – kgiannakakis

+0

Je le fais avant, où je mets le commentaire dedans. (// fais quelque chose ici pour vérifier la valeur de request.getPathInfo()) –

Répondre

2

L'URL de l'utilisateur (navigateur) demandé est accessible à partir de la demande:

request.getRequestURL() 

Sinon la demande a un whole bunch of accessors pour obtenir les différentes pièces de l'URL, ainsi que ceux sur ServletRequest.

Pour rediriger vers une autre URL changer la réponse plutôt que de la demande:

response.sendRedirect(theURLToRedirectTo) 
+0

Eh bien, j'utilise en fait un de ceux ci-dessus, getPathInfo(). Les docs pour cela disent: "Renvoie toutes les informations de chemin supplémentaires associées à l'URL que le client a envoyé lorsqu'il a fait cette demande." mais ce n'est clairement pas ce qui se passe. –

+0

Pourquoi pas? Est-ce que "/ foo" n'était pas le chemin supplémentaire? ou était "what.jsp" pas le chemin supplémentaire. Les deux étaient les chemins supplémentaires dans votre cas. –

+0

Il montre le JSP comme le chemin, pas foo. Je ne vois pas comment cela pourrait être le JSP puisque je le demande dans le servlet, avant que j'envoie l'avant à la JSP. –

11

La question est vague et ambiguë (est le servlet lui-même appelle à tous avant à nouveau?), Mais il beaucoup de sons comme ça vous avez besoin de request.getAttribute("javax.servlet.forward.request_uri").

Questions connexes