Spring:servlet-mapping - > url-pattern:/ *工作但无法显示

时间:2014-08-28 15:19:45

标签: java spring jsp spring-mvc servlets

的web.xml

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

/WEB-INF/spring/webmvc-config.xml

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="atom" value="application/atom+xml" />
            <entry key="html" value="text/html" />
            <entry key="json" value="application/json" />
        </map>
    </property>
    <property name="viewResolvers">
        <list>
            <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
            <bean
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/views/" />
                <property name="suffix" value=".jsp" />
            </bean>
        </list>
    </property>
    <property name="defaultViews">
        <list>
            <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
        </list>
    </property>
</bean>

控制器

@Controller
@RequestMapping ( "/" )
public class IndexController extends BaseController
{
    @RequestMapping ( "/" )
    public String index ( Model model ){
        System.out.println("AA");
        return index2(model);
    }

    @RequestMapping ( "/index" )
    public String index2 ( Model model ){
        System.out.println("BB");
        return "index";
    }
}

并且存在index.jsp文件

enter image description here

我想这是非常好的工作

BBBBBBBBBBBUUUUUUUTTTTTTTT,但是

enter image description here

WHY ???? 为什么???? 为什么???? WHY ????

更奇怪的

enter image description here

???????????????????????????????????????????? ??????????????????????

控制器工作!!但是不要显示浏览器

发生了什么?

请帮帮我。


并记录

DispatcherServlet,名称为&#39; dispatcher&#39;处理[/WEB-INF/views/index.jsp]

的GET请求

在DispatcherServlet中找不到带有URI [/WEB-INF/views/index.jsp]的HTTP请求的映射,其名称为&#39; dispatcher&#39;

1 个答案:

答案 0 :(得分:11)

Servlet容器有关于如何映射和处理URI请求的规则。这些可以在Servlet Specification中找到。同样重要的是要注意,大多数Servlet容器都有Servlet来处理JSP,映射到*.jsp,这是一个扩展映射。 Tomcat有JspServlet来执行此操作。

您已将DispatcherServlet映射到

<url-pattern>/*</url-pattern>

这是一个路径映射。路径映射优先于扩展映射。所以当你提交你的观点名称时

return "index";

Spring将使用ViewResolver

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

解决使用RequestDispatcher的{​​{1}}方法的路径。该路径为forward。现在,Servlet容器将接收该路径并尝试查找/WEB-INF/views/index.jsp来处理它。由于您Servlet映射到Servlet,它会使用它,但您的/*没有该路径的映射,因此会以404响应。

简单的解决方案是将映射更改为DispatcherServlet,如果未找到其他匹配项,则为{1}}。在这种情况下,当您提交视图并且容器必须找到映射的/时,它会找到Servlet并使用它。