2016-08-10 3 views
1

Я настроил сервлет как сервлет по умолчанию в web.xml.Confused about mapping of servlet

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

Когда я просил для JSP, как запрос http://localhost:8080/abc.jsp, я получил правильный ответ с правильным содержанием HTML и сервлет не служит для этого запроса.

Но когда я просил для HTML, как запрос http://localhost:8080/abc.html, я не мог получить abc.html файл, а service() метод моего сервлета был вызван.

Почему контейнеры сервлетов действуют таким образом?

Если я настроил свой сервлет таким образом, значит ли это, что я должен обслуживать запросы на статические файлы в моем сервлете?

Update

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

Вы можете поделиться код в классе сервлета, а? –

+0

Пожалуйста, также поделитесь своим web.xml – jr593

ответ

1

Если вы используете <url-pattern>/</url-pattern> это не отменяет сервлет по умолчанию и JSP сервлет контейнера , Вы должны использовать <url-pattern>/*</url-pattern>, если хотите, чтобы весь запрос обрабатывался вашим MyServlet.

Difference between/and /* in servlet mapping url pattern

+0

Спасибо. У меня много интересной информации :) – RichardMZ