网络.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文件
我想这是很好的工作
BBBBBBBBBBBUUUUUUUUTTTTTTTTT,但是!
为什么???? 为什么???? 为什么???? 为什么????
更奇怪
??????????????????????????????????? ????????????????
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>
解析路径以与 RequestDispatcher
的 forward
方法一起使用。该路径将是 /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/