一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Spring MVC完全注解方式配置web項(xiàng)目

Spring MVC完全注解方式配置web項(xiàng)目

2020-06-23 13:02Lius` JAVA教程

這篇文章主要為大家詳細(xì)介紹了Spring MVC完全注解方式配置web項(xiàng)目的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在servlet 3.0 開(kāi)始web項(xiàng)目可以完全不需要web.xml配置文件了,所以本文的配置只在支持servlet 3.0及以上的web容器中有效

使用的是spring mvc (4.3.2.RELEASE) + thymeleaf(3.0.2.RELEASE), 持久層使用的 spring的 JdbcTemplate, PS:推薦一個(gè)很好用的對(duì)JdbcTemplate封裝的框架:https://github.com/selfly/dexcoder-assistant  。 下面開(kāi)始具體的配置:

配置spring mvc DispatcherServlet
DispatcherServlet 是spring mvc的核心, Spring 提供了一個(gè)快速配置DispatcherServlet的類 AbstractAnnotationConfigDispatcherServletInitializer,具體代碼如下:

其中 onStartup()  是 WebApplicationInitializer 接口中的方法,用戶配置其他的 filter 和 listener

getRootConfigClasses() 獲取配置類,我理解的相當(dāng)于 applicationContext.xml 創(chuàng)建的上下文

getServletConfigClasses()獲取配置類,相當(dāng)于 mvc-servlet.xml 創(chuàng)建的上下文

此類上不需要任何注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.liulu.bank.config;
 
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.nio.charset.StandardCharsets;
 
/**
 * User : liulu
 * Date : 2016-10-7 15:12
 */
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer implements WebApplicationInitializer {
 
 @Override
 protected Class<?>[] getRootConfigClasses() {
  return new Class<?>[]{RootConfig.class};
 }
 
 @Override
 protected Class<?>[] getServletConfigClasses() {
  return new Class<?>[]{WebConfig.class};
 }
 
 /**
  * 配置DispatcherServlet 匹配的路徑
  * @return
  */
 @Override
 protected String[] getServletMappings() {
  return new String[]{"/"};
 }
 
 /**
  * 配置其他的 servlet 和 filter
  *
  * @param servletContext
  * @throws ServletException
  */
 @Override
 public void onStartup(ServletContext servletContext) throws ServletException {
  FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);
  encodingFilter.setInitParameter("encoding", String.valueOf(StandardCharsets.UTF_8));
  encodingFilter.setInitParameter("forceEncoding", "true");
  encodingFilter.addMappingForUrlPatterns(null, false, "/*");
 }
}

配置 applicationContext.xml,由RootConfig類實(shí)現(xiàn)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.liulu.bank.config;
 
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
 
/**
 * User : liulu
 * Date : 2016-10-7 15:36
 */
@Configuration
@PropertySource("classpath:config.properties") // 導(dǎo)入屬性文件
@EnableAspectJAutoProxy // 相當(dāng)于 xml 中的 <aop:aspectj-autoproxy/>
@EnableTransactionManagement // 開(kāi)啟注解事務(wù)
@ComponentScan(basePackages = {"com.liulu.lit", "com.liulu.bank"}, excludeFilters = @ComponentScan.Filter(classes = Controller.class ))
public class RootConfig {
 
 // 上面導(dǎo)入的屬性文件中的屬性會(huì) 注入到 Environment 中
 @Resource
 private Environment env;
 
 /**
  * 配置數(shù)據(jù)庫(kù)連接池 c3p0,
  * @return
  * @throws PropertyVetoException
  */
 @Bean
 public DataSource dataSource() throws PropertyVetoException {
  ComboPooledDataSource dataSource = new ComboPooledDataSource();
  dataSource.setJdbcUrl(env.getProperty("db.url"));
  dataSource.setDriverClass(env.getProperty("db.driver"));
  dataSource.setUser(env.getProperty("db.user"));
  dataSource.setPassword(env.getProperty("db.password"));
  dataSource.setMinPoolSize(Integer.valueOf(env.getProperty("pool.minPoolSize")));
  dataSource.setMaxPoolSize(Integer.valueOf(env.getProperty("pool.maxPoolSize")));
  dataSource.setAutoCommitOnClose(false);
  dataSource.setCheckoutTimeout(Integer.valueOf(env.getProperty("pool.checkoutTimeout")));
  dataSource.setAcquireRetryAttempts(2);
  return dataSource;
 }
 
 /**
  * 配置事物管理器
  * @param dataSource
  * @return
  */
 @Bean
 public PlatformTransactionManager transactionManager(DataSource dataSource) {
  return new DataSourceTransactionManager(dataSource);
 }
 
 @Bean
 public JdbcTemplate jdbcTemplate (DataSource dataSource) {
  return new JdbcTemplate(dataSource);
 }
 
 
}

config.properties 文件在 resources 目錄下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#數(shù)據(jù)庫(kù)配置
db.url=jdbc:mysql://192.168.182.135:3306/bank
db.driver=com.mysql.jdbc.Driver
db.user=root
db.password=123456
 
#數(shù)據(jù)庫(kù)連接池配置
#連接池中保留的最小連接數(shù)
pool.minPoolSize=5
#連接池中保留的最大連接數(shù)
pool.maxPoolSize=30
#獲取連接超時(shí)時(shí)間
pool.checkoutTimeout=1000

配置 servlet.xml, 由WebConfig類實(shí)現(xiàn)
Thymeleaf  模板配置也在下面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.liulu.bank.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
 
import java.nio.charset.StandardCharsets;
 
/**
 * User : liulu
 * Date : 2016-10-7 15:16
 */
@Configuration
@EnableWebMvc // 啟用 SpringMVC ,相當(dāng)于 xml中的 <mvc:annotation-driven/>
@ComponentScan(basePackages = {"com.liulu.bank.controller", "com.liulu.lit"},
  includeFilters = @ComponentScan.Filter(classes = Controller.class),
  useDefaultFilters = false)
public class WebConfig extends WebMvcConfigurerAdapter {
 
 /**
  * 設(shè)置由 web容器處理靜態(tài)資源 ,相當(dāng)于 xml中的<mvc:default-servlet-handler/>
  */
 @Override
 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  configurer.enable();
 }
 
 /**
  * 下面三個(gè)bean 配置 Thymeleaf 模板
  * @return
  */
 @Bean
 public SpringResourceTemplateResolver templateResolver() {
  SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  templateResolver.setPrefix("/WEB-INF/templates/");
  templateResolver.setSuffix(".html");
  templateResolver.setTemplateMode(TemplateMode.HTML);
  templateResolver.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));
  return templateResolver;
 }
 
 @Bean
 public TemplateEngine templateEngine(SpringResourceTemplateResolver templateResolver) {
  SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  templateEngine.setTemplateResolver(templateResolver);
  return templateEngine;
 }
 
 @Bean
 public ViewResolver viewResolver(TemplateEngine templateEngine) {
  ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  viewResolver.setTemplateEngine(templateEngine);
  viewResolver.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));
  return viewResolver;
 }
 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 2012中文字幕中字视频 | 成人在线小视频 | 全彩孕交漫画福利啪啪吧 | 亚洲福利二区 | 亚洲天堂三区 | 99久久精品免费看国产高清 | 先锋资源av | 校服下的白嫩小乳尖h1v1 | 天堂a视频 | 极品丝袜小说全集 | 亚洲日韩男人网在线 | 91天堂素人97年清纯嫩模 | 亚洲欧美乱 | 久久久久久久尹人综合网亚洲 | 91制片厂果冻传媒杨柳作品 | 极致堕落(高h) | 日本免费在线播放 | 午夜亚洲福利 | 护士的小嫩嫩好紧好舒服 | 欧美日韩国产超高清免费看片 | 国产99热99 | 超碰成人在线播放 | 国产精品一级香蕉一区 | 朝鲜女人free性xxe | xxoo做爰猛烈动态 | 欧美亚洲国产精品久久第一页 | 干处女| 国产精品久久久久久影院 | 亚洲国产日韩成人综合天堂 | 日本免费精品视频 | 亚洲www在线 | 色综合91久久精品中文字幕 | 国产伦码精品一区二区三区 | 俄罗斯美女大逼 | 欧美性另类69xxxx | 国产精品一区二区三区免费 | 3x免费高清视频 | 白丝爆动漫羞羞动漫软件 | 情趣内衣在线观看 | 丰满艳妇亲伦视频 | 糖心vlog网页版 |