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

标签 java spring jsp spring-mvc servlets

网络.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

@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

我想这是很好的工作

BBBBBBBBBBBUUUUUUUUTTTTTTTTT,但是!

enter image description here

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

更奇怪

enter image description here

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

Controller 工作了!!但不显示浏览器

这是怎么回事?

请帮帮我。


和日志

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

在名为“dispatcher”的 DispatcherServlet 中未找到具有 URI [/WEB-INF/views/index.jsp] 的 HTTP 请求的映射

最佳答案

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

您已将您的 DispatcherServlet 映射到

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

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

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>

解析路径以与 RequestDispatcherforward 方法一起使用。该路径将是 /WEB-INF/views/index.jsp。现在 Servlet 容器将收到该路径并尝试找到一个 Servlet 来处理它。因为你有一个 Servlet 映射到 /* 它将使用它,但是你的 DispatcherServlet 没有那个路径的映射,因此响应带有 404。

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

关于java - Spring: servlet-mapping -> url-pattern :/* 工作但无法显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552450/

相关文章:

java - 点击操作栏中的搜索按钮时崩溃 (Android)

java - 使整个 EditText 可见?

java - WebJars 无法在 JSP 中访问

jsp - 在动态 Web 项目中处理配置(数据库登录名和密码等)的正确方法是什么?

html - 如何在java Servlet中转发到JSP页面的特定部分

java用printf创建空格

java - 有没有什么方法可以使用java读取doc文件中的表行?

spring - 在 Spring Security 中使用基于表达式的访问控制有意义吗?

java - 两种 Spring Controller 方法,一种返回 200,另一种返回 404。仅映射 URL 不同

java - 在不刷新的情况下更新jsp页面的内容