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

Jeo*_*eol 1 java spring jsp servlets spring-mvc

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>
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

调节器

@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";
    }
}
Run Code Online (Sandbox Code Playgroud)

并存在index.jsp文件

在此输入图像描述

我觉得这很好用

BBBBBBBBBBBUUUUUUUUTTTTTTTT,但是!

在此输入图像描述

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

而且更奇怪

在此输入图像描述

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

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

这是怎么回事?

请帮我.


并记录

名为"dispatcher"的DispatcherServlet处理[/WEB-INF/views/index.jsp]的GET请求

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

Sot*_*lis 11

Servlet容器具有映射和处理URI请求的规则.这些可以在Servlet规范中找到.同样重要的是要注意,大多数Servlet容器都有一个Servlet处理JSP的映射*.jsp,这是一个扩展映射.Tomcat有一个JspServlet这样做.

你把你的地图映射DispatcherServlet到了

<url-pattern>/*</url-pattern>
Run Code Online (Sandbox Code Playgroud)

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

return "index";
Run Code Online (Sandbox Code Playgroud)

春天会使用 ViewResolver

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>
Run Code Online (Sandbox Code Playgroud)

解决了使用的路径RequestDispatcherforward方法.那条道路将是/WEB-INF/views/index.jsp.现在,Servlet容器将接收该路径并尝试找到一个Servlet来处理它.由于您已Servlet映射到/*它将使用它,但您DispatcherServlet没有该路径的映射,因此以404响应.

简单的解决方案是将映射更改为/,如果未找到其他匹配项,则为默认处理程序.在这种情况下,当您提交视图并且容器必须找到映射时Servlet,它将找到JspServlet并使用它.