【发布时间】:2016-05-05 12:05:16
【问题描述】:
我使用的是 Spring 4.2.5。当我第一次运行 Spring 项目并访问localhost 时,映射的控制器方法将被调用 3 次。之后,当我访问localhost 时,它只被调用一次。
如果你不明白我的意思,请评论,因为我的英语不是很好。
public class AppWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] {
WebConfig.class
};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("utf-8");
characterEncodingFilter.setForceEncoding(true);
return new Filter[]{characterEncodingFilter};
}
}
还有我的网络配置
@Configuration
@EnableWebMvc
@ComponentScan({"kyzs.web"})
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("utf-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(mainResolver());
return templateEngine;
}
@Bean
public TemplateResolver mainResolver() {
TemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
控制器
@Controller
public class HomeController {
@Autowired
private HttpLogin httpLogin;
@RequestMapping(value = "/",method = RequestMethod.GET)
public String home(){
System.out.println("home"); //print three times ,when first called.
return "home";
}
}
我的 pom.xml
<packaging>war</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
日志
2016-05-10 14:59:04 DEBUG DispatcherServlet:139 - Servlet 'dispatcher' configured successfully
[2016-05-10 02:59:04,136] Artifact KyZsBackend:war: Artifact is deployed successfully
[2016-05-10 02:59:04,136] Artifact KyZsBackend:war: Deploy took 4,901 milliseconds
2016-05-10 14:59:04 DEBUG DispatcherServlet:861 - DispatcherServlet with name 'dispatcher' processing GET request for [/]
2016-05-10 14:59:04 DEBUG RequestMappingHandlerMapping:301 - Looking up handler method for path /
2016-05-10 14:59:04 DEBUG RequestMappingHandlerMapping:308 - Returning handler method [public java.lang.String kyzs.web.HomeController.home()]
2016-05-10 14:59:04 DEBUG DefaultListableBeanFactory:251 - Returning cached instance of singleton bean 'homeController'
2016-05-10 14:59:04 DEBUG DispatcherServlet:947 - Last-Modified value for [/] is: -1
home
2016-05-10 14:59:04 DEBUG DispatcherServlet:1240 - Rendering view [org.thymeleaf.spring4.view.ThymeleafView@2b57f853] in DispatcherServlet with name 'dispatcher'
2016-05-10 14:59:04 DEBUG DispatcherServlet:998 - Successfully completed request
2016-05-10 14:59:04 DEBUG DispatcherServlet:861 - DispatcherServlet with name 'dispatcher' processing GET request for [/]
2016-05-10 14:59:04 DEBUG RequestMappingHandlerMapping:301 - Looking up handler method for path /
2016-05-10 14:59:04 DEBUG RequestMappingHandlerMapping:308 - Returning handler method [public java.lang.String kyzs.web.HomeController.home()]
2016-05-10 14:59:04 DEBUG DefaultListableBeanFactory:251 - Returning cached instance of singleton bean 'homeController'
2016-05-10 14:59:04 DEBUG DispatcherServlet:947 - Last-Modified value for [/] is: -1
home
2016-05-10 14:59:04 DEBUG DispatcherServlet:1240 - Rendering view [org.thymeleaf.spring4.view.ThymeleafView@2b57f853] in DispatcherServlet with name 'dispatcher'
2016-05-10 14:59:04 DEBUG DispatcherServlet:998 - Successfully completed request
2016-05-10 14:59:05 DEBUG DispatcherServlet:861 - DispatcherServlet with name 'dispatcher' processing GET request for [/]
2016-05-10 14:59:05 DEBUG RequestMappingHandlerMapping:301 - Looking up handler method for path /
2016-05-10 14:59:05 DEBUG RequestMappingHandlerMapping:308 - Returning handler method [public java.lang.String kyzs.web.HomeController.home()]
2016-05-10 14:59:05 DEBUG DefaultListableBeanFactory:251 - Returning cached instance of singleton bean 'homeController'
2016-05-10 14:59:05 DEBUG DispatcherServlet:947 - Last-Modified value for [/] is: -1
home
2016-05-10 14:59:05 DEBUG DispatcherServlet:1240 - Rendering view [org.thymeleaf.spring4.view.ThymeleafView@2b57f853] in DispatcherServlet with name 'dispatcher'
2016-05-10 14:59:05 DEBUG DispatcherServlet:998 - Successfully completed request
【问题讨论】:
-
你能为
org.springframework.web包添加一些DEBUG级别的日志吗? -
尝试在您的配置中删除
configurer.enable();。现在会发生什么? -
您是如何部署您的应用程序的?您是否在 Tomcat 中使用 IntelliJ 及其运行配置?
-
是的。我使用 IntelliJ 及其与 Tomcat 的运行配置
标签: java spring spring-mvc intellij-idea