SpringMVC基本使用
1、基本配置
1.1 常规配置
1.1.1 依赖jar包配置
<!-- servlet3.1规范的坐标 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--jsp坐标-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!--spring的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--spring web的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--springmvc的坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
1.1.2 配置文件
-
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://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="org.example"/> </beans>
注:SpringMVC依赖于Spring实现,因此需要将控制器(Controller)交给Spring管理
-
web.xml
在web.xml中定义SpringMVC的核心控制器,用于将请求对象转发到对应的业务处理器中(需要配合Controller的@RequestMapping注解),等同于Servlet配置
<?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_4_0.xsd" version="4.0"> <!-- 配置核心控制器--> <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>
注:/ 与/* 的区别
-
/:在tomcat中会默认为该路径配置一个Servlet,如果在我们的项目中配置了”/“,则会覆盖tomcat的默认配置,当其他url-parrern都不能匹配时,就会执行该Servlet。
-
/* :这种配置形式是拦截所有以”/“开头的访问路径,并覆盖掉其他的所有的Servlet, 所有的请求都会在该Servlet中执行。通常这种Servlet是作为一个Filter使用,并通过doFilter() 方法来使请求继续。
1.1.3 定义控制器
//将Controller交给Spring管理
@Controller
public class DomeController {
//定义save方法的访问路径
@RequestMapping("/save")
//设置String返回值,用于指定请求完成之后的跳转页面
public String save(){
System.out.println("dome mvc controller running ....");
return "success.jsp";
}
}
1.1.4 Controller加载控制
- 在规范格式开发中,SpringMVC的处理器只加载对应的bean,为避免加入无效的Bean,可以通过Bean加载过滤器进行包含设定和排除设定
- 表现层的Bean标签通常标注为@Controller
xml方式实现加载过滤:
<context:component-scan base-package="com.itheima">
<context:include-filter
type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
Bean加载控制说明:
- 业务层与数据层的bean加载由Spring控制实现
- 表现层的Bean加载由SpringMVC单独控制
- 表现层处理器bean使用注解@Controller声明
- bean加载控制可以使用 context:include-filter 或者 context:exclude-filter 实现
- 通常通过注解进行加载控制
1.1.5 静态资源放行
- 对于惊涛资源,我们不需要处理器进行处理,可以直接放行
- 放行方法:在spring-mvc.xml文件中,配置
<mvc:default-servlet-handler/>
-
**注:**如果在spring-mvc.xml文件中使用了默认静态资源放行,就必须同时配置一个注解驱动,否则Controller中定义的 @RequestMapping("")会失效
<mvc:annotation-driven />
- 因为在原始的SpringMVC中,会默认帮我们注册一个AnnotationMethodHandlerAdapter 的bean,这个bean能够识别并处理@RequestMapping 注解,
- 当我们定义了mvc:default-servlet-handler/时,框架就不会帮我们注册,所以我们需要手动注册一个可以处理@RequestMapping 注解的bean
1.1.6 乱码处理
SpringMVC提供专用的中文字符过滤器,用于处理乱码问题
配置在 web.xml 里面
<!--乱码处理过滤器,与Servlet中使用的完全相同,差异之处在于处理器的类由Spring提供-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<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>