目录
SpringWeb介绍
SpringWeb是Spring框架中的一个模块,SpringWeb 是Spring为Web层开发提供的一整套完备的解决方案。
SpringWeb运行流程
1.用户从前端发送请求到DispatcherServlet(分配器服务程序)
2.DispatcherServlet调用HandlerMapping(处理器映射器),HandlerMapping根据请求的URL寻找相对的处理器,然后向DispatcherServlet发送响应信息。但是中间会经过拦截器,如果说DispatcherServlet并没有找到相对的处理器,则会被拦截,不再有后续操作。反之DispatcherServlet则调用找到的处理器。
3.DispatcherServlet 调用 HandlerAdapter(处理器适配器)
4.HandlerAdapter适配后调用具体的处理器。
5.Handler实现功能。
6.Controller 执行完成向前端响应结果。
其中拦截器和自定义处理器需要我们程序员自己去编写,其他的内容SpringWeb框架已经为我们编写好了。
搭建SpringWeb
1.导入SpringWeb框架的jar包
<!--spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
2.在web.xml中配置DispatcherServlet(分配器服务程序)
<servlet> <servlet-name>application</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <!--请求映射--> <servlet-mapping> <servlet-name>application</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
3.在Spring.web中开启SpringWeb注解
<!--开启springWeb注解--> <mvc:annotation-driven></mvc:annotation-driven>
处理器类
@RestController可以用在类上面,被此标签打上的类就会成为SpringWeb控制类,我们一般将其写在我们自定义的处理器上。Spring在对指定包进行扫描的时候,如果扫描到有该标签的类则会SpringIOC容器中,会在需要时进行调用。
我们对处理器类设置调用地址,并对其底下的方法也设置地址。
1.处理器类获取请求数据
1.RequestMapping(path=“*********”)
此种注解会让path中的地址被调用时接受各种类型的请求。
2.GetMapping(path=“*********”)
此种注解会让path中的地址被调用时只接受get请求
3.PostMapping(path=“*********”)
此种注解会让path中的地址被调用时只接受Post请求
2.处理器方法接收参数
1.自定义参数接收
这里要求自定义参数名和前端发来的参数名一致
如果前段数据名称和对象中属性名称不一致,我们可以使用@RequestParam("")进行参数绑定。
表单的发来adminAccount和控制器中的形参并不一致,但是@RequestParam注解的value值和表单的adminAccounr保持一致仍然可以将表单的adminAccount映射到形参的account上。
2.使用request和response
3.使用一个对象接收
还是确保对象中的属性和前端传来的数据名一致。Spring会将前端的数据自动映射到形参对象中
4.特殊情况
4.1当前端发来一个Token字符串
我们需要加入RequestBody标签来将前端提交的json格式数据,将json格式封装到对象中。
我们需要导入相关的jar包
<!--jackson--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.14.2</version> </dependency>
4.2前端传来一个日期
当前端传来一个日期,我们想将其转为我们需要的日期格式
使用@DateTimeFormat(pattern="yyyy-MM-dd")来限定我们需要的格式
4.3向前端返回一个json格式的数据
我们不需要进行其他额外操作,只肖返回一个对象即可,SpringWeb框架会自动将该对象转化成json类型的字符串。
拦截器
Spring中的拦截器有点类似于Servlet中的过滤器,然其作用位置和功能上还是有一定差异
过滤器作用在请求进入服务器之前,而拦截器是作用在处理器映射器响应给前端控制器的过程中。
拦截器实现
定义一个类实现拦截器接口HandlerInterceptor,重写preHandle方法,如果preHandle方法返回true表示继续流程(即调用下一个拦截器或处理器方法),返回false表示流程中断,不会继续调用其他的拦截器或处理器方法
1.添加拦截器依赖的jar包
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2.注册拦截器
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor> <mvc:mapping path="/**/"/><!--配置进入拦截器-->
<mvc:exclude-mapping path="/loginCtl/login"/><!--配置不进入拦截器-->
<bean id="TokenInterceptor" class="com.wjc.ssm.interceptor.TokenInterceptor"></bean><!--拦截器实现类-->
</mvc:interceptor>
</mvc:interceptors>