1、导入依赖
需要导入spring依赖和web相关依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--以下三个坐标为获取前端json数据时需要用到的-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
2、配置web.xml文件
配置该文件用于打通web,最好使用3.1+版本的约束(默认生成的可能是低版本约束)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
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>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置加载springmvc.xml文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置对象创建时机:服务器启动的时候,让DispatcherServlet对象创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 前端参数中文乱码(get方式已解决,post方式未解决)过滤器 -->
<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>
</web-app>
3、配置springmvc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描,表现层的注解扫描由该文件单独控制-->
<context:component-scan base-package="cao.zhanpeng.control"/>
<!--配置视图解析器-->
<bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--指定跳转视图所在位置的前缀和后缀-->
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 在前端页面中引入外部的静态资源时,默认会被核心控制器拦截,
需要设置静态资源不过滤,静态资源需要放在web路径(webapp)下-->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/img/" mapping="/img/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/plugins/" mapping="/plugins/**" />
<!--开启springmvc的注解支持
会自动加载RequestMappingHandlerMapping(处理映射器)
和RequestMappingHandlerAdapter(处理适配器 )
这两个组件用于定位控制器方法并执行,和视图解析器并称SpringMVC三大组件
只有三大组件齐全,才能执行方法并成功跳转页面-->
<mvc:annotation-driven/>
</beans>
SpringMVC的执行流程
启动服务器后发生了什么
- 前端控制器DispatcherServlet对象创建
- 读取springmvc.xml文件
- 创建控制器类对象------是根据@Controller注解来创建的
常用注解
@RequestMapping注解
用于指定资源路径及其相关属性,通常作用于方法上,如果作用于方法所在的类上,相当于给资源路径加了个一级目录。
常用属性
- path和value属性等同,用于指定资源路径
- method属性,用于指定该方法能接受什么样的请求,比如=RequestMethod.POST,此时如果用GET请求,将报405异常
- params属性,用于指定请求参数的限制条件,它支持简单的表达式
- 比如params={“accountName”},表示请求参数中必须要有accountName。
- 再比如params={"money!100"},表示请求参数中money不能是100
- 如果不满足限制条件将报400错误
- headers属性,指定请求消息中必须要有的请求头,用的较少。
@RequestParam注解
当【请求参数名称】和【方法中接收数据的参数名称】不一致时,可以用该注解来将两者对应上。属性name和value通用,用来指定请求参数名称,会将该名称的值传递给方法的参数。
@RequestBody注解
用于POST请求时获取整个请求体内容。
在方法上定义一个字符串参数来接收,并且用@RequestBody来修饰即可
@RequestHeader注解
修饰参数,用于获取请求头的值,value属性用来指定请求头名称。
@CookieValue注解
修饰参数,用于拿到指定cookie名称的值,value用于指定cookie名称。
@SessionAttributes注解
用于多次执行控制器方法间的数据共享。
- 只能作用于类上
- 类中方法设置的键值对,可以在类上通过键将键值对存入到session域中,这样其他方法也可以通过对象来获取了。