SSM
动态SQL
1、如果前端表单中没有传输请求参数,但在服务器端却获取了,则显示为null;
单选框和复选框不选则显示也会null;
如果是表单中有该请求项,但里面为空,提交到服务器端时为“”(空字符串)
2、mybatis中如果参数为list或者是数组,都会被放在map中
如果是List集合,则以List为键,以参数具体值为值;
数组会以Array为键,以参数值为value值。
3、mybatis的二级缓存可以使用外部第三方缓存.
Spring
1、容器:对于组件对象可以进行存储和管理。
2、Spring默认提供单例模式,通过scope=prototype可以改成多例模式。
3、IOC中使用反射+工厂模式创建对象
工厂模式代码层面上来说就是取消对new的使用,把对象的创建统一交给容器处理。
4、当根据bean类型获取时,要求IOC容器中有且只有一个类型匹配的bean。
当有多个class相同的bean时,报NoUniqueDefinitionException
异常;
如果没有相对应的bean,则报NoSuchBeanDefinitionException
。
5、一个bean对应的只能是一个对象,不能是接口,即在xml文件中bean对应的class必须是具体的类
当组件实现了接口,则可以通过接口.class获得该组件对应的bean,且bean必须唯一
6、依赖注入:为当前类的属性赋值的过程
7、字面量:基本数据类型和对应的包装类型
8、想要将IOC返回的实例模式改为多例模式,直接在bean中将scope="prototype"
bean的生命周期
实例化(使用构造器)->依赖注入->初始化(两者都为用bean中property对属性赋值)->销毁(必须将ioc转换为ConfigurableApplicationContext类型,才可以销毁)
单例模式:获取IOC容器时bean对应类的对象就会被实例化和初始化;
多例模式:在获取bean时才会实例化和初始化对应的对象,销毁方法不由IOC容器管理。
FactoryBean
1、BeanFactory是IOC最基本的实现,用来管理bean;
FactoryBean是一个工厂bean,作为一个bean被IOC管理。
2、当把FactoryBean的实现类配置为bean时,会将当前类中getobject()所返回的对象交给IOC容器管理
基于注解的自动装配
自动装配:通过指定的策略为bean中的成员变量进行赋值的操作
当实现类的成员变量上缺少@Autowired注解时,会报空指针异常
快捷键:
ctrl+alt+T :if/try-catch等
alt+insert:生成构造器
动态代理
子类转换为父类时,如果调用的方法被重写,那么输出的结果就是子类中重写的内容:
AOP
横切关注点:要改造的非核心代码
通知:方法
切面:类
目标:被改造的核心代码
连接点:位置
切入点:对连接点的定位,Pointcut
基于注解的AOP
测试类中,语句的含义:
ApplicationContext
是IOC容器基本实现的子接口,ClassPathXmlApplicationContext
是ApplicationContext
的一个实现类,作用是通过读取类路径下的 XML 格式的配置文件创建 IOC 容器
对象 。- 使用getBean()获取到组件对象,其中使用代理模式时,目标类不能直接创建,所以参数为目标类实现的接口,此时得到的是CalculatorImpl对象
声明式事务
1、将开启事务、提交事务、回滚事务抽取出来,通过添加事务注解的方式(@Transactional
)为核心代码进行事务化。
2、实现声明式事务只需要3步:
- 在Spring的配置文件中添加jdbc.datasource的事务管理组件
- 开启事务的注解驱动
- 通过注解@Transactional标识类中需要被是事务管理器管理的事务
3、四种隔离级别:
其中幻读的意思是A事务对表中的数据进行查询时,B事务对表中的数据进行增删改,而此时A事务查询出来的还是B事务没有进行修改时的视图,此时若再接着插入会显示改数据已存在。
可重复读解决不可重复读问题,当事务A读取字段值时,禁止其它事务对这个字段进行更新。
SpringMVC
web.xml文件
1、配置SpringMVC的前端控制器DispatcherServlet时,url-pattern标签中填/,因为/*包括了jsp文件,而tomcat中已经默认配置了jsp的JspServlet,jsp的请求必须使用该定义的路径。
2、webapp/WEB-INF/web.xml用来配置 servlet的关联别名和映射路径。
提交请求时获取参数
1、在路径中直接填入参数,使用占位符并在控制层获取参数的方式
2、在表单/路径中填入参数,并提交请求,在控制端直接使用形参获取请求参数
复习:Cookie和Session
服务端创建Cookie,并将Cookie通过addCookie实现添加
同一个会话域中有其它的servlet请求也会携带此Cookie
Seesion的JSESSIONID是以Cookie的形式放在响应体里。
Seesion是服务器端的技术,服务器端为每一个客户端创建空间用来存放Seesion对象,客户端在发送请求时,都可以使用自己的session。这样服务端就可以通过session来记录某个客户端的状态了
Cookie是客户端会话技术,由服务器端产生,放在浏览器中的一小部分数据,浏览器以后每次访问该服务器的时候都会将数据携带到服务器去。
Seesion原理图:
Cookie原理图:
Springmvc获取请求参数乱码问题
在设置编码方式之前,不能获取任何参数,否则设置编码失效
控制台乱码,将tomcat中的vmoption设置为-Dfile.encoding=UTF-8
域对象共享数据
使用ModelAndView必须要返回ModelAndView的对象,否则失效,其它方式都得返回字符串,字符串内容为转发页面的相对路径。
重新设置Idea,即便是关闭和重启服务器,只要浏览器没关闭,session可以依旧保留。-》钝化和活化
SpringMVC的视图
使用Thymeleaf和转发视图都是基于转发的原理
但使用forward进行转发,页面中的thymeleaf模板就不会被渲染,语法解析不了,共享资源就获取不到。
创建包含Webapp的工程
- 创建一个新的Module
- 在pom.xml文件中添加打包方式为war
- Project Structure中Module,点击项目下的web,然后添web.xml,并将路劲改成src\main\webapp\web-inf
- 部署tomcat,在Deployment中去掉其它模块,增加新模块
使用RESTful实现静态数据增删改查
携带id修改的操作,Controller里必须要有两个对应的方法
过程为:通过id找到对应的employee数据(方法1 get),然后将数据显示到页面,在该页面中对数据内容进行修改,修改后进行提交保存(方法2 put)
axios
1、get没有请求体,所有数据不能放到data{}中
2、上传文件,需要引入依赖,然后在springmvc.xml中配置响应的bean
拦截器的顺序
preHandle 是正序输出
而postHandle 和 AfterCompletion是根据interceptorIndex,逆序输出
interceptorIndex:preHandler返回false之前的拦截器索引
回顾:ModelAndView,model向请求域共享数据,view页面跳转
整合
<!--配置默认的servlet处理静态资源-->
<mvc:default-servlet-handler/>
<!--开启mvc的注解驱动-->
<mvc:annotation-driven/>
<!--配置视图控制器-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
- 先使用DispathServlet处理请求,如果处理不了使用默认的servlet处理请求
- 使得除了视图控制器以外的控制层路径也可以被解析
- 设置项目启动之后的默认页面
springmvc扫描组件是controller层的包;spring扫描组件将扫描除控制层以外
Mabatis里有内置的连接池管理,但没有Durid的性能更好
<!--配置mapper接口的扫描,可以将指定包下的所有mapper接口
通过SqlSeesion创建代理实现对象,并将这些对象交给IOC容器管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.atguigu.ssm"></property>
</bean>
标签:事务,请求,SSM,bean,Cookie,参数,IOC From: https://www.cnblogs.com/exo123/p/18625025