Spring、Springmvc合成

spring:
开源的(可以查看源代码),免费的,轻量级的(依赖的jar少)
IOC AOP

框架:代码的半成品

spring两个重要部分:
1.IOC AOP
2.控制反转和面向切面编程

spring是一个一站式的框架
三层框架
1.表示层:springMVC
2.业务逻辑层:spring ioc
3.数据访问层:提供了一个JDBCTemplate

spring的控制核心思想 IOC AOP
IOC:控制反转 将创建对象的权利交给spring管理,管理bean的生命周期。
AOP: 面向切面编程,面向对象编程

耦合度(依赖于高,关联度高)

spring提供的版本:xml,工厂,反射

spring 事务
声明式事务(hibernate)
/*spring环境搭建步骤
导包
配置spring的配置文件
spring的配置文件放到src下,名称任意
*/
使用spring
1.加载spring的配置文件(测试是否集成成功)
ApplicationContext con=new ClassPathXmlApplicationcationContext(“xml的名字”)
2.再来从xml调用getBean里的id
user user=(user)con.getBean(“user”);//强转为一个user类
user.add();//(就可以调用user里的东西了)

DI: 依赖注入,Spring管理bean与bean之间的关系
spring创建对象
1.bean标签模式
给属性赋值有多少种方法
1.set方法赋值
property
字符串 value
对象赋值 ref–引用另一个对象
list
string[]
map
2.构造方法赋值
//啃死chua kete
2.bean静态工厂模式

方法:
给属性赋值
用构造方法给属性赋值

DI:依赖注入
ref:引用另一个对象

生命周期:(scope属性调用)
singleton:单实例对象(默认是单实例)
prototype:多实例对象
request:在一次HTTP请求中,一个bean定义对应的一个实列
session:在一次HTTP Session中,一个bean定义对应一个实列

SpringORM:对象关系映射
SpringAOP:核心内容
SpringCore:核心包

sessionStatus使用例子:
@RequestMapping(“test2”)
public ModelAndView totest2(SessionStatus status){
ModelAndView mv=new ModelAndView();
//isComplete 只用于销毁modelAndview中放session中的值
//如果session没销毁
if (!status.isComplete()) {
//就让session销毁
status.setComplete();
}
mv.setViewName(“forward:/index.jsp”);
return mv;

}

静态代理模式:
代理一种借口,创建一个被代理接口的一模一样的对象出来,调用方法的时候,可以修改代码
动态代理模式(InvocationHandler):
可以代理任何接口,创建一个被代理接口的一模一样的对象出来,调用方法的时,可以修改代码

日志功能:调用现在这个方法的同时把另一个方法也调用出来 、



Aop术语:
连接点:可以添加新功能方法
切入点:真正添加日志的功能的方法
增强/通知:新添加的功能
切面:将日志的功能添加到切入点的过程

异常通知参数:Throwable
环绕通知参数:ProceedingJoinPoint 再用参数名调用proceed(前进的意思)

前置通知:在调用切入点方法之前执行
后置通知:在调用切入点方法之后执行
环绕通知:在调用方法之前执行一次,方法执行之后执行
异常通知:切入点方法出现异常,会执行这个方法

spring 管理事务
声明式事务
只需要声明即可,不需要使用代码
xml配置
配置事务的步骤
1.配置事务管理器
2.配置增强(事务),事务增强,spring
3.配置切面
注解版本
配置事务的步骤
1.配置事务管理器
2.开启事务注解
3.在需要添加事务的类上添加注解
每一个action方法都可以访问到
spring mvc让所有的controller和handler方法都可以访问到

事务只读:只能用到查询身上,增删改不能使用只读事务

springmvc也是让所有的controller/handler方法都可以访问到

BS架构执行流程(BS 浏览器到服务器 CS客户端到服务器)

处理器映射器(handlerMapping):配置文件中中配置
处理器适配器(handleradpter):执行controller方法
controller返回ModelAndView
视图解析器:得到真正的视图
视图渲染:将数据存储作用于中

springmvc 执行原理
BS 执行流程 B 浏览器 到 S服务器
CS cient 客户端 到 S服务器

springmvc执行流程
(请求)
1.前段控制器
2.处理器映射
3.处理器适配器
4.controller方法
5.视图解析器

BS MVC(model view controller)三层框架
(“fowrd”,“hello”)

forward:转发 地址栏不发生变化,request 作用域中的值没有丢失
redirect:重定向 重定向 地址栏发生变化,request 作用域中的值丢失
转发和重定向不经过视图解析器,不用加前缀和后缀

@Requestparam 直接接受前台参数

defaultValue :默认值
required=true 是否必须指定
简单参数
对象作为参数
spring mvc对象作为参数, 前台页面上直接写对象里面的属性就可以了
复杂的数据类型
数组
声明数据类型 数据名和前台页面上的name属于一致
集合
不能直接在参数中声明,在实体类中声明

获取前台参数

1.直接接受前台参数
@requestParam(name=“跟前台保持一致”)随机写一个名称
2.类 类型
前台页面的name属性和实体类中的属性名保持一致,就可以封装

复杂的数据类型
数组 名称一致即可
集合 名称一致,但是需要在实体类中

@ModelAttribute
1.指定存在作用域的键值
2.将类对象直接存储在作用域中存储的时候键是类的名称首字母小写(回显)
Model和ModelMap两个作用一样

@CookieValue:浏览器中的一个文本 键值对形式存在
@RequestHeader:浏览器中的一个文本 键值对形式存在
@SessionStatus:发到session里面
spring mvc 不支持string类型换成date类型因为日期的格式是多种多样的
然后提供了转换接口提供了转换器,将string类型转成date类型
requestScope:默认存储的作用域是request取值
sessionScope:默认存储的作用域是session取值
ssionAttributes:作用就是讲ModelAndView中的数据绑定到session作用域范围内

国际化
1.让spring 开启国际化
2.创建语音包
3.使用国际化

springmvc支持校验
1.导包hibenrate
2.在spring.xml配置localValidatorFactoryBean 供应商hibernate
3.<mvc:annocation-driven validator=""/>
4.使用校验
(NotEmpty Pattern)
1.在实体类中添加校验器
2.在controller方法中,要校验的对象钱,添加@Validated。BindingResult
5.判断是否校验出错,将错误信息显示的页面上

springmvc校验支持国际化
1.localValidatorFactoryBean配置国际化属性
validationMessageSource=“国际化的bean”
2.在实体类中,校验的message属性变成{key}

分组校验:
1.创建接口,表示组 登录,注册
2.指定校验器属于哪一组,在校验器里面添加属性groups
3.在controller方法@validated()指定校验组

自定义校验
1.创建一个校验
属性@Constraint(validatedBy = {PhoneValidator.class})
2.创建校验规则 类实现ConstrainValidator
3.使用校验:注解名

上传
1.spring mvc 支持上传
2.spirng 上传

getOriginalFilename() 文件名

restFul :前段控制器如果是 / 静态资源会被拦截,必须放过静态资源
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
restful格式
1.在web配置 /
2.在路径上{占位符}
3.注解@pathVariable

spring mvc 实现拦截器
1.创建一个类,实现一个拦截器接口,handlerlnterceptor
2.spring mvc配置拦截器

springmvc 拦截器里面三个方法的使用时机?
1. preHandler:controller方法执行之前
2.postHandler:controller方法执行之后,返回modelAndview方法之前
3.afterCompletion:controller方法执行之后

enctype="multipart/form-data”(多文件格式)

拦截器:

<!-- 配置拦截器,可以设置拦截路径 -->
	<!-- <mvc:interceptor> -->
		<!-- 映射路径 **为通配符  多个路径使用多个 /目录/目录 -->
		<!-- <mvc:mapping path="/**"/> -->
		<!-- 放行的时候(放行方法),需要写全部的路径 记得加/-->
	<!--   <mvc:exclude-mapping path="/findall"/>-->
   		 <!--  <mvc:exclude-mapping path="/getmenu"/>-->
		<!-- 拦截器 Bean -->
		<!-- <bean class="cn.baisi.Interceptpor.Interceptpor"></bean> -->
	<!-- </mvc:interceptor>   -->   	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值