Does URL di supporto servlet come segue:Parametri servlet e path come/xyz/{value}/test, come mappare in web.xml?
/xyz/{value}/test
cui valore potrebbe essere sostituito da un testo o numero.
Come mapparlo nel web.xml?
Does URL di supporto servlet come segue:Parametri servlet e path come/xyz/{value}/test, come mappare in web.xml?
/xyz/{value}/test
cui valore potrebbe essere sostituito da un testo o numero.
Come mapparlo nel web.xml?
Non è supportato dall'API Servlet per avere il carattere jolly del pattern URL *
al centro del mapping. Consente solo il carattere jolly *
alla fine della mappatura come /prefix/*
o all'inizio della mappatura come *.suffix
.
Con la sintassi standard del pattern URL consentita la soluzione migliore è mapparla su /xyz/*
ed estrarre le informazioni sul percorso utilizzando HttpServletRequest#getPathInfo()
.
Quindi, dato un <url-pattern>/xyz/*</url-pattern>
, ecco un esempio di base kickoff come estrarre le informazioni sul percorso, controlli nulli e indice di array fuori dai limiti controlli omessi:
String pathInfo = request.getPathInfo(); // /{value}/test
String[] pathParts = pathInfo.split("/");
String part1 = pathParts[1]; // {value}
String part2 = pathParts[2]; // test
// ...
Se si desidera un controllo più a grana più fine come possibile con Apache HTTPD mod_rewrite
, quindi è possibile guardare Tuckey URL rewrite filter.
Grazie! Questo risolve il mio problema. – BlackEagle
È davvero * il modo * necessario per estrarre i parametri url che non sono parametri GET? Questo sembra abbastanza gonfio, difficile da mantenere, incline a bug di offset e il 1995 in generale. – Herbert
@Herbert: basta usare un framework sopra l'API Servlet che supporta i parametri del percorso, come JAX-RS o MVC. – BalusC
Supporta il mapping di tale URL; ma non offre alcuna convalida.
Nel vostro Web XML, si potrebbe fare questo ....
/xyz/*
Ma questo non garantisce che il finale test
è presente e che è l'ultimo elemento. Se stai cercando qualcosa di più sofisticato, dovresti provare urlrewritefilter.
Come detto sopra, i servlet di base non supporta i modelli come specificato nella sua interrogazione. Spring MVC supporta i pattern. Here è un collegamento alla sezione pertinente nello Spring Reference Document.
Non dovrebbe fare che in web.xml, piuttosto si può puntare ogni richiesta per il filtro (Patternfilter) e in grado di verificare la presenza di URL
package com.inventwheel.filter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
/**
* Servlet Filter implementation class PatternFilter
*/
@WebFilter("/*")
public class PatternFilter implements Filter {
/**
* Default constructor.
*/
public PatternFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String servletPath = ((HttpServletRequest)request).getServletPath();
String requestURI = ((HttpServletRequest)request).getRequestURI();
Pattern pattern = Pattern.compile(".*"+servletPath+"/(.*)");
Matcher matcher = pattern.matcher(requestURI);
if (matcher.matches())
{
String param = matcher.group(1);
// do stuff with param here..
}
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
Come altri hanno indicato, la specifica servlet non consente tali modelli; tuttavia, è possibile considerare JAX-RS che consente tali modelli, se questo è appropriato per il tuo caso d'uso.
@Path("/xyz/{value}/test")
public class User {
public String doSomething(@PathParam("value") final String value) { ... }
}
Oppure:
@Path("/xyz/{value}")
public class User {
@Path("test")
public String doTest(@PathParam("value") final String value) { ... }
}
(Relativo a:. https://stackoverflow.com/a/8303767/843093)
È possibile utilizzare questa libreria: http://zerh.github.io/ServletIO/, in modo da poter convertire i servlet nel controller MVC e utilizzare gli URL
In base al dominio/URL del tuo link (s) che sono gli stessi o contenenti il tuo nome utente, sembra che tu abbia collegato al tuo sito. Se lo fai, devi * comunicare che si tratta del tuo sito *. Se non comunichi che si tratta di un tuo sito, è spesso considerato spam. Vedi: [** Cosa significa "Buono" auto-promozione? **] (// meta.stackexchange.com/q/182212) e [Come non essere uno spammer] (// stackoverflow.com/help/promotion). – Makyen
Un collegamento a una potenziale soluzione è sempre il benvenuto, ma per favore [aggiungi contesto intorno al link] (// meta.stackoverflow.com/a/8259) così i tuoi utenti avranno un'idea di cosa sia e perché è lì. ** Cita sempre la parte più rilevante di un link importante, nel caso in cui il sito target sia irraggiungibile o sia permanentemente offline. ** Considera che essere _barely più di un link a un sito esterno_ è una possibile ragione per [Perché e come vengono eliminate alcune risposte?] (// stackoverflow.com/help/deleted-answers). – Makyen
Correlato a: http://stackoverflow.com/questions/8252442/servlet-mappings-with-variablestomcat-7-0 (possibile duplicato). – shelley