Spring mvc Spring4MVC不识别JSP
我正在尝试使用gradle和Spring4制作一个MVC项目Spring mvc Spring4MVC不识别JSP,spring-mvc,gradle,jetty,spring-4,Spring Mvc,Gradle,Jetty,Spring 4,我正在尝试使用gradle和Spring4制作一个MVC项目 @Bean public UrlBasedViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); resolver.setSuffix(".jsp"); return resolver; }
@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>
但是只有html呈现服务器端的东西不起作用首先,您需要知道Servlet容器(我也假设Jetty)有一个用于呈现JSP的Servlet。此Servlet通常是映射到
*.jsp
的扩展
/WEB-INF/jsp/index.jsp
Servlet容器将该路径与映射到的DispatcherServlet
匹配
/*
这发生在容器能够匹配映射到*.JSP
的JSP servlet之前
因此,它使用您的DispatcherServlet
来服务(..)
请求。但是您的DispatcherServlet
没有用于的处理程序
/WEB-INF/jsp/index.jsp
简单的解决方案是将您的DispatcherServlet
映射到
/
如果找不到匹配项,则将其设置为备用
Servlet
。让我们看看您的web.xml。好了,我已将web.xml添加到其中,因为它在使用Websphere@JackieDispatcherServlet
是否映射到/*
或类似于/something/*
的东西?不,它设置为/*我使用registry.addResourceHandler(“/css/**”).addResourceLocations(“/static/css/”).setCachePeriod(31556926);我试过了,但是如果我为JSPOk尝试这个,它不会呈现jsp,所以添加/app/*反而让它工作了,但我真的不想这样。我想我可以重写,但我想避免这种情况。你能再解释一下这句话吗“如果找不到匹配项,就让它成为备用Servlet。”@Jackie我必须查看你发布的链接,但要回答你的问题。映射到/
的Servlet被视为“默认”Servlet。正如您在匹配列表中所看到的,如果没有匹配其他servlet来处理请求,那么将使用默认servlet。因为它位于最后,像blabla.jsp
这样的路径将匹配到jsp Servlet并进行处理。但是,使用/*
时,该路径首先由DispatcherServlet
匹配,而DispatcherServlet无法正确处理该路径。
/