supponiamo di voler accettare i seguenti URL:
http://myserver/myapplication/posts http://myserver/myapplication/posts/ http://myserver/myapplication/posts//delete
come posso usare il decoratore servlet @WebServlet
per farlo? Sto studiando il value
e urlPatterns
ma non capisco come farlo. Per esempio,
@WebServlet(urlPatterns={"/posts", "/posts/*"}) [..] String param = request.getPathInfo();
mi dà qualche risultato, ma come usarlo? Inoltre, request.getPathInfo()
sembra restituire il valore del carattere jolly, ma cosa succede se voglio più parametri come in http://http://myserver/myapplication/posts//delete/
?
Nelle specifiche della servlet, non si hanno nozioni di variabili di percorso. Alcuni framework MVC li supportano, ad esempio Struts o Spring MVC.
Per un punto di vista servlet, un URL è:
scheme://host.domain/context_path/servlet_path/path_info?parameters
dove una qualsiasi parte (a partire dal percorso di contesto può essere nullo)
Specifiche per gli stati servlet 3.0:
I seguenti metodi esistono nell’interfaccia HttpServletRequest per accedere a queste informazioni:
È importante notare che, ad eccezione delle differenze di codifica URL tra l’URI della richiesta e le parti del percorso, la seguente equazione è sempre vera:
requestURI = contextPath + servletPath + pathInfo
Ciò significa che devi solo usare @WebServlet(urlPatterns={"/posts"})
, e quindi decodificare manualmente la parte pathInfo per estrarre comandi e parametri
Penso che non puoi farlo utilizzando solo l’annotazione @WebServlet
. UrlPatterns funge solo da direttiva al Servlet per indicare quali modelli di URL devono essere presenti. E come puoi vedere da questi documenti https://docs.oracle.com/javaee/6/api/javax/servlet/annotation/WebServlet.html il valore è proprio il caso in cui urlPatterns è una stringa invece di una matrice di essi . Come affermato brso05, sarà necessario analizzare dalla richiesta i parametri.