基于配置文件的web项目维护起来可能会更方便,但是有时候我们会有一些特殊的需求,比如防止客户胡乱更改配置,这时候我们需要给配置隐藏到代码中。
1.创建一个动态web项目(无需web.xml)
2.右键项目添加几个package: com.easyweb.config (保存项目配置) com.easyweb.controller (保存springMvc controller)
3.在 com.easyweb.config 新建一个类 WebApplicationStartup ,这个类实现WebApplicationInitializer 接口,是项目的入口,作用类似于web.xml,具体代码如下:
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
68
69
70
71
72
|
<code
class
=
"hljs"
java=
""
>
package
com.easyweb.config;
import
javax.servlet.MultipartConfigElement;
import
javax.servlet.ServletContext;
import
javax.servlet.ServletException;
import
javax.servlet.ServletRegistration.Dynamic;
import
org.springframework.web.WebApplicationInitializer;
import
org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import
org.springframework.web.servlet.DispatcherServlet;
/**
* 服务器启动入口类
*
* @author Administrator
*
*/
public
class
WebApplicationStartup
implements
WebApplicationInitializer {
private
static
final
String SERVLET_NAME = Spring-mvc;
private
static
final
long
MAX_FILE_UPLOAD_SIZE =
1024
*
1024
*
5
;
// 5 Mb
private
static
final
int
FILE_SIZE_THRESHOLD =
1024
*
1024
;
// After 1Mb
private
static
final
long
MAX_REQUEST_SIZE = -1L;
// No request size limit
/**
* 服务器启动调用此方法,在这里可以做配置 作用与web.xml相同
*/
@Override
public
void
onStartup(ServletContext servletContext)
throws
ServletException {
// 注册springMvc的servlet
this
.addServlet(servletContext);
// 注册过滤器
// servletContext.addFilter(arg0, arg1)
// 注册监听器
// servletContext.addListener(arg0);
}
/**
* 注册Spring servlet
*
* @param servletContext
*/
private
void
addServlet(ServletContext servletContext) {
// 构建一个application context
AnnotationConfigWebApplicationContext webContext = createWebContext(SpringMVC.
class
, ViewConfiguration.
class
);
// 注册spring mvc 的 servlet
Dynamic dynamic = servletContext.addServlet(SERVLET_NAME,
new
DispatcherServlet(webContext));
// 添加springMVC 允许访问的Controller后缀
dynamic.addMapping(*.html, *.ajax, *.css, *.js, *.gif, *.jpg, *.png);
// 全部通过请用 “/”
// dynamic.addMapping(/);
dynamic.setLoadOnStartup(
1
);
dynamic.setMultipartConfig(
new
MultipartConfigElement(
null
, MAX_FILE_UPLOAD_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD));
}
/**
* 通过自定义的配置类来实例化一个Web Application Context
*
* @param annotatedClasses
* @return
*/
private
AnnotationConfigWebApplicationContext createWebContext(Class<!--?-->... annotatedClasses) {
AnnotationConfigWebApplicationContext webContext =
new
AnnotationConfigWebApplicationContext();
webContext.register(annotatedClasses);
return
webContext;
}
}</code>
|
4.在com.easyweb.config 下添加类 SpringMVC 继承 WebMvcConfigurerAdapter,这个类的作用是进行SpringMVC的一些配置,代码如下:
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
|
<code
class
=
"hljs"
java=
""
>
package
com.easyweb.config;
import
org.springframework.context.annotation.ComponentScan;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import
org.springframework.web.servlet.config.annotation.EnableWebMvc;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
//指明controller所在的包名
@ComponentScan
(basePackages = {com.easyweb.controller})
public
class
SpringMVC
extends
WebMvcConfigurerAdapter {
/**
* 非必须
*/
@Override
public
void
configureDefaultServletHandling(
final
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* 如果项目的一些资源文件放在/WEB-INF/resources/下面
* 在浏览器访问的地址就是类似:https://host:port/projectName/WEB-INF/resources/xxx.css
* 但是加了如下定义之后就可以这样访问:
* 非必须
*/
@Override
public
void
addResourceHandlers(
final
ResourceHandlerRegistry registry) {
registry.addResourceHandler(/resources
/**/
*).addResourceLocations(/WEB-INF/resources/);
}
}</code>
|
5.添加view配置文件com.easyweb.config下新建类ViewConfiguration,里面可以根据自己的需要定义视图拦截器:
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
|
<code avrasm=
""
class
=
"hljs"
>
package
com.easyweb.config;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
import
org.springframework.web.servlet.ViewResolver;
import
org.springframework.web.servlet.view.JstlView;
import
org.springframework.web.servlet.view.UrlBasedViewResolver;
import
org.springframework.web.servlet.view.tiles2.TilesConfigurer;
import
org.springframework.web.servlet.view.tiles2.TilesView;
@Configuration
public
class
ViewConfiguration {
@Bean
public
ViewResolver urlBasedViewResolver() {
UrlBasedViewResolver viewResolver;
viewResolver =
new
UrlBasedViewResolver();
viewResolver.setOrder(
2
);
viewResolver.setPrefix(/WEB-INF/);
viewResolver.setSuffix(.jsp);
viewResolver.setViewClass(JstlView.
class
);
// for debug envirment
viewResolver.setCache(
false
);
return
viewResolver;
}
@Bean
public
ViewResolver tilesViewResolver() {
UrlBasedViewResolver urlBasedViewResolver =
new
UrlBasedViewResolver();
urlBasedViewResolver.setOrder(
1
);
urlBasedViewResolver.setViewClass(TilesView.
class
);
//urlBasedViewResolver.
return
urlBasedViewResolver;
}
@Bean
public
TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer =
new
TilesConfigurer();
tilesConfigurer.setDefinitions(
new
String[] { classpath:tiles.xml });
return
tilesConfigurer;
}
}</code>
|
6.本例中还用了tiles视图解析器,替换了原始的include方式