2016-08-10 2 views
1

Ich konfigurierte ein Servlet als das Standard-Servlet in web.xml.Verwirrt über Servlet Mapping

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

Wenn ich für JSP angefordert wie http://localhost:8080/abc.jsp anfordert, bekam ich die richtige Antwort mit dem richtigen HTML-Inhalt, und das Servlet nicht für diese Anforderung erfüllen.

Aber wenn ich für HTML angefordert wie http://localhost:8080/abc.html anfordert, konnte ich nicht die abc.html-Datei erhalten, und die service() Methode meiner Servlet aufgerufen wurde.

Warum verhalten sich Servlet-Container so?

Wenn ich mein Servlet auf diese Weise konfiguriere, bedeutet das, dass ich Anfragen für statische Dateien in meinem Servlet ausführen muss?

aktualisieren

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>Servlet test</display-name> 

    <servlet> 
     <servlet-name>myServlet</servlet-name> 
     <servlet-class>com.test.MyServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>myServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

MyServlet.java

package com.test; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 

public class MyServlet extends HttpServlet { 

    private static Logger LOG = LoggerFactory.getLogger(MyServlet.class); 

    @Override 
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     super.service(req, resp); 
     LOG.info("Served"); 
    } 
} 
+0

Können Sie auch den Code in Ihrem Servlet-Klasse teilen? –

+0

Bitte teilen Sie auch Ihre web.xml – jr593

Antwort

1

Wenn Sie <url-pattern>/</url-pattern> verwenden diese überschreibt nicht die Standard-Servlet und JSP-Servlet des Behälters . Sie sollten <url-pattern>/*</url-pattern> verwenden, wenn Sie möchten, dass alle Anfragen von Ihrem MyServlet verarbeitet werden.

Difference between/and /* in servlet mapping url pattern

+0

Vielen Dank. Ich habe viele interessante Informationen bekommen :) – RichardMZ