我編寫了一個REST API作爲Spring Boot應用程序,在我開始工作之後,嘗試添加一個Web前端,從基本的「Hello World」類型索引頁面開始。嘗試打主頁一貫導致以下消息:Spring MVC在呈現頁面時忽略servlet配置
沒有找到映射與URI [/WEB-INF/index.jsp在DispatcherServlet的名爲「的DispatcherServlet」
HTTP請求這裏是控制器(我已經驗證正在通過斷點命中):
@Controller
public class HomeController {
@RequestMapping(value = "/")
public String index() {
return "index";
}
}
這裏與視圖解析器,這似乎並基於該消息被合併的主要應用:
@Configuration
@EnableWebMvc
@EnableJpaRepositories("com.name.api.repositories")
@ComponentScan(basePackages = {
"com.name.api.controllers",
})
@EntityScan("com.name.api.entities")
@SpringBootApplication
public class RestApiApplication {
public static void main(String[] args) {
SpringApplication.run(RestApiApplication.class, args);
}
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/");
bean.setSuffix(".jsp");
return bean;
}
}
這裏是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/views/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/*</url-pattern>
</servlet-mapping>
</web-app>
正如你所看到的,該消息中的名稱始終是「DispatcherServlet的」,即使我重新命名上面的servlet這是不變的。
我也有一個dispatcher-servlet.xml,我懷疑它正在被使用。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>
有一個index.html文件,以及一個index.jsp的一個下面的WebContent/WEB-INF /(當我加入了動態網頁面到我的項目創建的文件夾)。它始終無法找到它們,即使我將WEB-INF複製到與WebContent相同級別的自己的文件夾中,而不是它下面(或者如果在src/main/webapp /下複製了WEB-INF)。我已經介紹了一個調試器,並發現當它找不到處理程序映射時會打印該消息,但是當servlet的名稱與內容不匹配時,我懷疑它太深入到基本內容中配置(甚至故意將不正確的xml添加到文件中並沒有什麼區別,儘管這可能只是編譯器在識別錯誤後不會用好的代碼替換不好的代碼)。將相同的<load-on-startup>
標記添加到「jsp」servlet中也不會執行任何操作。
這似乎是一個相當基本的錯誤,我確信有人問過它並回答了這個問題,但我在這裏經歷了很多類似的問題,但似乎沒有任何解決方案可行。
dispatcher-servlet.xml是在WEB-INF下,但就像我說我懷疑它實際上正在讀取。 @Controller類型註釋已被我的REST API使用,以及我作爲第一位代碼包含的HomeController。我的RestApiApplication已經告訴程序在哪個程序包中找到控制器,存儲庫等,以及那些東西的工作原理。這是沒有被閱讀的XML的東西。我試着擴展AbstractAnnotationConfigDispatcherServletInitializer來複制xml,但調試器顯示沒有調用它的函數。 – WindowsWeenie