的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文件
我想这是非常好的工作
BBBBBBBBBBBUUUUUUUTTTTTTTT,但是
WHY ???? 为什么???? 为什么???? WHY ????
更奇怪的
???????????????????????????????????????????? ??????????????????????
控制器工作!!但是不要显示浏览器
发生了什么?
请帮帮我。
并记录
DispatcherServlet,名称为&#39; dispatcher&#39;处理[/WEB-INF/views/index.jsp]
的GET请求在DispatcherServlet中找不到带有URI [/WEB-INF/views/index.jsp]的HTTP请求的映射,其名称为&#39; dispatcher&#39;
答案 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
并使用它。