我正在尝试使用gradle和Spring4创建一个MVC项目。
@Bean
public UrlBasedViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
...
@RequestMapping("/home")
public String welcome() {
return "index";
}
但是当我使用gradle jettyRun运行时,我得到......
http://localhost:8080/personal-war/home
HTTP ERROR 404
Problem accessing /personal-war/WEB-INF/jsp/index.jsp. Reason:
NOT_FOUND
更新Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.proj.spring.config</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
我添加了这一行
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
但是只有html呈现服务器端的东西不能正常工作
答案 0 :(得分:1)
首先,你需要知道Servlet容器(我也假设Jetty)有一个用于呈现JSP的Servlet。此Servlet通常是扩展映射到*.jsp
。
Servlet Specification gives the order of url-pattern
matching
- 容器将尝试查找请求路径与servlet路径的完全匹配。成功的比赛选择 的servlet。
- 容器将递归尝试匹配最长的路径前缀。这是通过将路径树踩到目录来完成的 一次,使用'/'字符作为路径分隔符。最长的 match确定所选的servlet。
- 如果URL路径中的最后一个段包含扩展名(例如.jsp),,servlet容器将尝试匹配处理的servlet 请求延期。扩展名被定义为 最后一个'。'字符后的最后一段。
- 如果前三个规则都没有导致servlet匹配,则容器将>尝试提供适合所请求资源的内容。 如果为应用程序定义了“默认”servlet,则将使用它。许多容器提供隐式 用于提供内容的默认servlet。
醇>
在你的情况下,当你转发到
/WEB-INF/jsp/index.jsp
Servlet容器将匹配映射到
的DispatcherServlet
的路径
/*
这在容器可以匹配映射到*.jsp
的JSP servlet之前发生。
因此,它会使用您的DispatcherServlet
至service(..)
请求。但是你的DispatcherServlet
没有
/WEB-INF/jsp/index.jsp
简单的解决方案是将DispatcherServlet
映射到
/
如果找不到匹配项,请将其作为后备Servlet
。