SpringMVC-注解驱动
web.xml配置中
- 配置了DispatcherServlet拦截所有路径请求
- 指定了所有请求的编码格式为UTF-8
注意点:
- /* 代表所有url 路径和.jsp等请求
- / 代表路径类型请求
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--乱码处理过滤器,与Servlet中使用的完全相同,差异之处在于处理器的类由Spring提供-->
<filter>
<!--字符编码过滤器起别名-->
<filter-name>CharacterEncodingFilter</filter-name>
<!--使用Spring的字符编码过滤器-->
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--指定初始化UTF-8编码-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!--字符编码过滤器映射关系-->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--设置前端控制器 拦截所有请求 由SpringMVC统一调度-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
SpringMVCapplication.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:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--扫描加载所有的控制类类-->
<context:component-scan base-package="com.xxxx"/>
<!--静态资源加载控制-->
<mvc:resources mapping="/img/**" location="/img/"/>
<!-- <mvc:resources mapping="/js/**" location="/js/"/>-->
<!--SpringMVC提供的通用资源放行格式-->
<mvc:default-servlet-handler/>
</beans>
全部用注解代替
核心接口:
-
AbstractDispatcherServletInitializer:
拦截所有路径请求,创建web应用上下文环境,中文乱码处理 -
WebMvcConfigurer:设置静态资源加载规则
@Configuration
//组件扫描过滤器 只加载@Controller注解的bean
@ComponentScan(value = "com.xxxxx",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)
)
public class SpringMVCConfiguration implements WebMvcConfigurer {
//重写默认的静态资源加载方式 设定静态资源加载规则
/*
* 替代了 <!--静态资源加载控制-->
<mvc:resources mapping="/img/**" location="/img/"/>
<!-- <mvc:resources mapping="/js/**" location="/js/"/>-->
<!--SpringMVC提供的通用资源放行格式-->
<mvc:default-servlet-handler/>
* */
//注解配置放行指定资源格式
// @Override
// public void addResourceHandlers(ResourceHandlerRegistry registry) {
// registry.addResourceHandler("/img/**").addResourceLocations("/img/");
// registry.addResourceHandler("/js/**").addResourceLocations("/js/");
// registry.addResourceHandler("/css/**").addResourceLocations("/css/");
// }
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
//使用SpringMVC默认加载
configurer.enable();
}
}
/*
* 中文编码 前端控制器拦截所有请求
* */
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
//创建servlet应用上下文环境 使用注解的方式加载SpringMVC配置类中的信息,并加载成WEB专用的Application对象
//该对象放入了ServletContext范围,后期在整个WEb容器中可以随时调用
@Override
protected WebApplicationContext createServletApplicationContext() {
//创建注解配置web应用上下文环境
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//将SpringMVC配置类注册到web应 用上下文环境
ctx.register(SpringMVCConfiguration.class);
return ctx;
}
//设置拦截所有路径请求
//代替:DispatcherServlet配置
@Override
protected String[] getServletMappings() {
// "/" 路径url
// "/*" 所有url 路径和.jsp
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
//中文乱码处理 使用filter过滤器实现
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
FilterRegistration.Dynamic registration = servletContext.addFilter("characterEncodingFilter", characterEncodingFilter);
registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST,DispatcherType.FORWARD,DispatcherType.INCLUDE),false,"/*");
}
}