UPDATE sind:Schreiben eines Servlets, die auf eine andere JSP wenn JSP exist und her überprüft, ob sie nicht
Um einen allgemeinen Fehler Fang zu klären, die 404 der fängt nicht genug Granularität für mich hat. Ich muss dies nur tun, wenn das JSP in einem bestimmten Verzeichnis ist und nur dann, wenn der Dateiname eine bestimmte Zeichenfolge enthält.
/UPDATE
ich mit dem Schreiben eines Servlets, das einen Aufruf und JSP dazwischen und in einem bestimmten Verzeichnis beauftragt habe überprüfen, dass die Datei vorhanden ist, und wenn es auf diese Datei nur nicht weiterleiten, wenn es Dann werde ich nicht zu einer Standard-JSP weiterleiten. Ich habe Setup die web.xml wie folgt:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>CustomJSPListener</servlet-name>
<servlet-class> ... CustomJSPListener</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>CustomJSPListener</servlet-name>
<url-pattern>/custom/*</url-pattern>
</servlet-mapping>
Und die Methode doGet des Servlets ist wie folgt:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.debug(String.format("Intercepted a request for an item in the custom directory [%s]",request.getRequestURL().toString()));
String requestUri = request.getRequestURI();
// Check that the file name contains a text string
if (requestUri.toLowerCase(Locale.UK).contains("someText")){
logger.debug(String.format("We are interested in this file [%s]",requestUri));
File file = new File(requestUri);
boolean fileExists = file.exists();
logger.debug(String.format("Checking to see if file [%s] exists [%s].",requestUri,fileExists));
// if the file exists just forward it to the file
if (fileExists){
getServletConfig().getServletContext().getRequestDispatcher(
requestUri).forward(request,response);
} else {
// Otherwise redirect to default.jsp
getServletConfig().getServletContext().getRequestDispatcher(
"/custom/default.jsp").forward(request,response);
}
} else {
// We aren't responsible for checking this file exists just pass it on to the requeseted jsp
getServletConfig().getServletContext().getRequestDispatcher(
requestUri).forward(request,response);
}
}
Dies scheint in einem Fehler 500 von Katers zu führen, ich glaube, Dies liegt daran, dass das Servlet in den gleichen Ordner umleitet, der dann vom Servlet erneut abgefangen wird, was zu einer Endlosschleife führt. Gibt es einen besseren Weg, dies zu tun? Ich bin der Meinung, dass ich dafür Filter verwenden könnte, aber ich weiß nicht viel über sie.
Danke, ich werde es versuchen. –
Das hört immer noch nicht auf das Problem mit der Endlosschleife. –
Fügen Sie ' REQUEST ' dem '' hinzu. BTW: ein Filter ist in der Tat ein besserer Ort dafür, Sie können einfach den gleichen Code in die 'doFilter()', Sie müssen nur Anfrage und Antwort nach unten werfen. –
BalusC