我正在努力使用servlet配置的Spring MVC web-app
。
spring-boot-starter-parent
,版本1.1.8.RELEASE,作为Maven的pom.xml中的父级,spring-boot-starter-web
和spring-webmvc
作为依赖项; `
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"sblog", "sblog.controller", "sblog.repository", "sblog.service"})
@EnableJpaRepositories("sblog.repository")
@EnableTransactionManagement
@EnableWebMvc
public class Config {
...
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
@Bean
public ServletRegistrationBean dispatcherRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet(), "/*", "/index");
registration.setLoadOnStartup(1);
System.err.println(registration.getServletName());
System.err.println(registration.getUrlMappings());
return registration;
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/resources/");
resolver.setSuffix(".jsp");
return resolver;
}
`
public class Application {
public static void main(String[] args) {
SpringApplication.run(Config.class, args);
}
}
` - 增加了一个简单的控制器:
`
@Controller
public class ApplicationController {
@RequestMapping(method = GET, value = "/")
public String index(Model model) {
System.err.println("Index");
return "index";
}
`
sblog/
├── pom.xml
├── sblog.iml
├── src
│ ├── main
│ │ └── java
│ │ └── sblog
│ │ ├── Application.java
│ │ ├── Config.java
│ │ ├── controller
│ │ │ ├── ApplicationController.java
│ │ │ ├── PageController.java
│ │ │ ├── PostController.java
│ │ │ └── SessionController.java
│ │ ├── orm
│ │ │ ├── Author.java
│ │ │ └── Post.java
│ │ ├── repository
│ │ │ ├── AuthorRepository.java
│ │ │ └── PostRepository.java
│ │ ├── service
│ │ │ └── PostService.java
│ │ └── WebMVCApplicationInitializer.java
│ └── resources
│ └── index.jsp
`
但是每次访问root时我都会o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/resources/index.jsp] in DispatcherServlet with name 'dispatcherServletRegistration'
提前感谢您,任何帮助将不胜感激! :)
答案 0 :(得分:0)
首先,我使用了相同的结构,除了我的资源'文件夹位于' main'夹。其次,我使用了如下配置。
@Configuration
@EnableAutoConfiguration
public class CoreConfig {
@Bean
public WebMvcConfigurerAdapter initAdapter(){
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
};
}
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setSuffix(".jsp");
return resolver;
}
}
如果您想了解更多详情,请查看GitHub上的示例项目。
答案 1 :(得分:0)
首先,我建议阅读Spring Boot可以为您做什么,您正在努力不使用Spring启动。
我建议删除@Configuration
,@EnableAutoConfiguration
和@ComponentScan
之外的所有注释。其他所有内容都将由Spring Boot添加/提供。我还建议将您的Config
和Application
类合并为一个。离开时请注意以下事项(是的,没有@Bean
方法)..
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Config.class, args);
}
}
您只需要添加spring-boot-starter-web
和spring-boot-starter-data-jpa
作为依赖项,其他必要的依赖项(spring-webmvc
等)将自动添加。当然,您仍然需要将hibernate添加为依赖项。
Spring Boot将检测Spring Web并为您配置DispatcherServlet
和其他bean。
接下来,src/resources
目录尚不清楚,因此它不会作为资源提供,因此无法找到。我还建议不要使用JSP作为视图层。如the reference guide中所述,JSP和Spring Boot存在一些问题。如果您真的必须明确配置InternalResourceViewResolver
,但要将application.properties
文件添加到src/main/resources
,并将以下内容添加到属性中。
spring.view.prefix=
spring.view.suffix=.jsp
对应于InternalResourceViewResolver
的前缀和后缀属性。有关属性列表,请选中the reference guide。
我建议不要使用src/main/resources/resources
文件夹来存储JSP页面,因为该目录也是公开可读的(默认情况下在Spring Boot中)。我建议使用views
目录。这将导致以下属性
spring.view.prefix=/views/
spring.view.suffix=.jsp
最后一点说明Spring Boot驱动的应用程序无法检测到WebApplicationInitializer
所以如果你在其中做了一些事情,那么Spring Boot应用程序将无法完成(除非它是特定的Spring Boot {{1} })。