SpringMVC学习笔记—基础知识总结

一、SpringMVC 概述

1.基本概念

SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的,是servlet的一个升级。
web开发底层是servlet , 框架是在servlet基础上面加入一些功能,让你做web开发方便。

SpringMVC就是一个Spring。 Spring是容器,ioc能够管理对象,使用, @Component, @Repository, @Service, @Controller
SpringMVC能够创建对象, 放入到容器中(SpringMVC容器), springmvc容器中放的是控制器对象,

我们要做的是 使用@Contorller创建控制器对象, 把对象放入到springmvc容器中, 把创建的对象作为控制器使用这个控制器对象能接收用户的请求, 显示处理结果,就当做是一个servlet使用。
使用@Controller注解创建的是一个普通类的对象, 不是Servlet。 springmvc赋予了控制器对象一些额外的功能。

web开发底层是servlet, springmvc中有一个对象是Servlet : DispatherServlet(中央调度器)
DispatherServlet: 负责接收用户的所有请求, 用户把请求给了DispatherServlet, 之后DispatherServlet把请求转发给我们的Controller对象, 最后是Controller对象处理请求。

2.使用

核心对象:DispatcherServlet
1.加入依赖 : spring-webmvc, servlet依赖
2.在web.xml 注册DispatcherServlet

作用:
1.创建springmvc的容器对象, WebApplicationContext. 在创建容器对象的同时,读取配置文件
把controller控制器对象都创建好。 web项目启动后,所有对象都创建了,准备好了
2.它是一个servlet,能够接收用户的请求,并显示请求的处理结果

二、SpringMVC 注解式开发

1.@Controller: 创建控制器对象

2.@RequestMapping: 请求映射,把请求指定给某个方法处理
value:请求的uri地址,唯一值
method:表示请求的方式,get,post。 RequestMethod枚举值

3.接收请求的参数
逐个接收: 请求中参数名需要和控制器方法的形参名一样;逐个接收中,如果名称不一样使用@RequestParam
java对象接收参数:要求属性名和请求中参数名一样
提交请求参数有中文乱码,使用字符集的过滤器, CharacterEncodingFilter

4.返回值,表示请求的处理结果
ModelAndView:表示数据和视图
String:表示视图
void:可以响应ajax请求
Object:对象,表示数据,响应ajax请求

1.返回一个Student,转为json对象

2.返回List<Student>,转为的json array

3.返回String,表示数据

springmvc中控制器方法返回对象,转为json响应ajax步骤:

1.加入处理json的工具库。加入依赖,默认是jackson处理json

2.springmvc配置文件,加入<mvc:annotation-driven>

3.在控制器方法的上面,加入@ResponseBody

控制器方法返回对象,转为json:使用的核心对象HttpMessageConveter和他的实现类

5.静态资源:
为什么要处理静态资源:中央调度器的url-pattern设置为“/” 导致静态资源的请求交给了中央调度器,而默认框架中是没有处理静态资源的控制器对象的,所以访问静态资源是404

解决方式:增加控制器对象,让加入的控制器对象处理静态资源的请求

1.在配置文件加入< mvc:default-servlet-hanlder > , < mvc:annotation-driven >,创建DefaultServletHttpRequestHandler这个控制器对象
2.在配置文件加入< mvc:resources mapping="请求静态资源的uri地址" location="静态资源的目录" />
< mvc:annotation-driven >,创建ResourceHttpRequestHandler这个控制器对象

三、SSM 整合开发

SSM整合也叫做SSI (IBatis也就是mybatis的前身), 整合中有容器。

1.第一个容器SpringMVC容器, 管理Controller控制器对象的。

2.第二个容器Spring容器,管理Service,Dao,工具类对象的

我们要做的把使用的对象交给合适的容器创建,管理。 把Controller还有web开发的相关对象交给springmvc容器, 这些web用的对象写在springmvc配置文件中,service,dao对象定义在spring的配置文件中,让spring管理这些对象。

springmvc容器和spring容器是有关系的,关系已经确定好了
springmvc容器是spring容器的子容器, 类似java中的继承。 子可以访问父的内容
在子容器中的Controller可以访问父容器中的Service对象, 就可以实现controller使用service对象

实现步骤:
0.使用springdb的mysql库, 表使用student(id auto_increment, name, age)

1.新建maven web项目

2.加入依赖
springmvc,spring,mybatis三个框架的依赖,jackson依赖,mysql驱动,druid连接池, jsp,servlet依赖

3.写web.xml
1)注册DispatcherServlet ,目的:
.创建springmvc容器对象,才能创建Controller类对象。
.创建的是Servlet,才能接受用户的请求。
2)注册spring的监听器:ContextLoaderListener,目的: 创建spring的容器对象,才能创建service,dao等对象。
3)注册字符集过滤器,解决post请求乱码的问题

4.创建包, Controller包, service ,dao,实体类包名创建好

5.写springmvc,spring,mybatis的配置文件
1)springmvc配置文件
2)spring配置文件
3)mybatis主配置文件
4)数据库的属性配置文件

6.写代码, dao接口和mapper文件, service和实现类,controller, 实体类。

7.写jsp页面

四、SpringMVC 核心技术

1.请求重定向和转发

当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。

注意,对于请求转发的页面,可以是WEB-INF中页面;而重定向的页面,是不能为WEB-INF中页的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问 WEB-INF 中资源的。

forward:表示转发,实现 request.getRequestDispatcher("xx.jsp").forward()
redirect:表示重定向,实现 response.sendRedirect("xxx.jsp")

2.异常处理:

springmvc框架采用的是统一,全局的异常处理。
把controller中的所有异常处理都集中到一个地方。 采用的是aop的思想。把业务逻辑和异常处理代码分开。解耦合。

使用两个注解
1.@ExceptionHandler
2.@ControllerAdvice

3.拦截器:

1)拦截器是springmvc中的一种,需要实现HandlerInterceptor接口。

2)拦截器和过滤器类似,功能方向侧重点不同。 过滤器是用来过滤器请求参数,设置编码字符集等工作。
拦截器是拦截用户的请求,做请求做判断处理的。

3)拦截器是全局的,可以对多个Controller做拦截。
一个项目中可以有0个或多个拦截器, 他们在一起拦截用户的请求。
拦截器常用在:用户登录处理,权限检查, 记录日志。

拦截器的使用步骤:
1.定义类实现HandlerInterceptor接口
2.在springmvc配置文件中,声明拦截器, 让框架知道拦截器的存在。

拦截器的执行时间:
1)在请求处理之前, 也就是controller类中的方法执行之前先被拦截。
2)在控制器方法执行之后也会执行拦截器。
3)在请求处理完成后也会执行拦截器。

拦截器:看做是多个Controller中公用的功能,集中到拦截器统一处理。使用的aop的思想

4.拦截器和过滤器的区别

1.过滤器是servlet中的对象, 拦截器是框架中的对象

2.过滤器实现Filter接口的对象, 拦截器是实现HandlerInterceptor

3.过滤器是用来设置request,response的参数,属性的,侧重对数据过滤的。拦截器是用来验证请求的,能截断请求。

4.过滤器是在拦截器之前先执行的。

5.过滤器是tomcat服务器创建的对象,拦截器是springmvc容器中创建的对象

6.过滤器是一个执行时间点,拦截器有三个执行时间点

7.过滤器可以处理jsp,js,html等等
拦截器是侧重拦截对Controller的对象。 如果你的请求不能被DispatcherServlet接收, 这个请求不会执行拦截器内容

8.拦截器拦截普通类方法执行,过滤器过滤servlet请求响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anton丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值