1).Struts2 -- action的3中创建方式
1.创建一个POJO类.
单的Java对象(Plain Old Java Objects) 指的是没有实现任何接口,没有继承任何父类(除了Object)
优点:无耦合。
缺点:功能需要自己实现。
2.创建一个类,实现Action接口. com.opensymphony.xwork2.Action
优点:耦合低。提供了五种结果视图,定义了一个行为方法。 缺点:所以工作都要自己实现。
五种结果视图
3.创建一个类,继承自ActionSupport类. com.opensymphony.xwork2.ActionSupport(ActionSupport类实现了Action接口。)
优点:表单校验、错误信息设置、读取国际化信息 三个功能都支持.
缺点:耦合度高。
2). Struts2值栈
1.值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action、Result、Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱。
2.值栈是一个数据存储中心,在strust2每次请求都实例化一个Action,Struts2会为每个请求创建一个新的值栈。
3.正是因为值栈和请求的对应关系,因此值栈能保证线程安全的为每个请求提供公共的数据存取服务。
4.ROOT根对象,ognl访问值栈不用加任何的访问前缀,是ArrayList类型
5.值栈的特点:如果访问的值栈里有多个对象,且相同的属性在多个对象中同时出现,则值栈会按照从栈顶到栈底的顺序,寻找第一个匹配的对象。
6.Context是Map类型的、
3).1、支持对象方法调用,如xxx.doSomeSpecial();
2、支持类静态的方法调用和值访问,表达式的格式:
@[类全名(包括包路径)]@[方法名 | 值名],例如:
@java.lang.String@format('foo %s', 'bar')
或@tutorial.MyConstant@APP_NAME;
设置 struts.ognl.allowStaticMethodAccess=true
3、访问OGNL上下文(OGNL context)和ActionContext;访问值栈
4、支持赋值操作和表达式串联,如price=100, discount=0.8,
calculatePrice(),这个表达式会返回80;
5、操作集合对象。
4).
5).spring为hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供了两个方法:
public final HibernateTemplate getHibernateTemplate() ;
public final void setSessionFactory(SessionFactory sessionFactory) ;
其中,setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了配置在Spring 中的SessionFactory实例,getHibernateTemplate方法用来利用刚才的SessionFactory生成Session, 再生成HibernateTemplate来完成数据库的访问。
6).
7).
8).
9).Mybaits创建Dao的两种方式:
1.调用实现文件里面的方法
SessionFactory.openSession()在方法体内
Session是线程不安全的,所以要放在方法体内
Session调用方法select方法:(参数1,命名空间+select的Id,参数2,查询参数)
这种方法用的很少,如果用的话,有一些自定义业务的东西,放在DAO中
2.Mapper接口代理的方式:
UserMapper.xml文件
在SqlMapConfig.xml文件中引入Mapper.xml,或者引入包扫描
映射文件的编写;传入参数通过parameteType属性指定,返回结果集类型通过resultType属性指定。
hibernate和Mybaits的对比:
hibernate中SQL语句无法优化
SQL注入:在页面或者action加sql校验
输入映射:输入的参数,
占位符,
输入符,
增加时候用po,查询时候用vo
输出映射:
返回单个PO对象(user)
返回List<泛型>
返回基本类型:返回是一行一列的可以是基本类型,例如:分页的时候,先查询记录,
动态SQL,不确定查询条件有多少个
高级查询
where的作用:会自动向SQL语句中添加where关键字
会去掉第一个条件的and关键字
forEach遍历集合:
select * from user where id in (1,16,25)【避免使用Or,使用性能急剧下降】
SELECT * FROM USER WHERE username LIKE ‘%zhang%’ AND id IN (10,89,16)
foreach 循环传入的集合参数
Collection :传入的集合的变量名称
item:每次循环出的数据放入这个变量中
open:循环开始拼接的字符传
close:循环结束的字符串
separator:循环拼接的分隔符
映射:
一对一自动映射:
一对多查询:
Mybaits整合Spring
凡是Spring的配置文件就加classpath;
UserDaoImpl 需要集成SqlSessionDaoSuppor(自动引入sqlSessionFactory)
Strust2和SpringMvc
SpringMVC:
1.从请求中接受参数
2.把处理完的结果返回给页面
SpringMVC是一个表现层框架,从请求中接收传入的参数,将处理完的结果返回给页面
用户发送请求 前端控制器DispatcherServle Handler处理器 返回结果 处理结果返回给页面 响应用户
架构流程
1、 用户发送请求至前端控制器DispatcherServlet
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、 执行处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、 ViewReslover解析后返回具体View
10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户
struts2的工作流程如下:
客户端初始化一个指向Servlet容器(例如Tomcat)的请求(request),因为http是请求响应模型
请求经过一系列的过滤器(Filter)
接着StrutsPrepareAndExecuteFilter被调用,其询问ActionMapper(判断请求是否需要struts2来处理)来决定请求调用哪个Action
如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter就把请求交给ActionProxy(Action代理,用于获取Action,实现了url与Action之间的映射)
ActionProxy通过Configuration Manager(配置管理)询问框架的配置文件struts.xml,找到需要调用的Action类,并创建一个ActionInvocation(负责Interceptor、Action和Result等一系列元素的调度)的实例
ActionInvocation实例使用命名模式(命名规范)来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用,调用是栈(或递归)的规律:调用Action前是从前往后执行,每次判断是否向后执行,调用后是从后往前执行
一旦Action执行完毕,ActingInvocation负责根据struts.xml中的配置找到相对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示JSP。在表示的过程中可以使用Struts2框架中继承的标签。这个过程需要涉及到ActionMapper
注解模式:
非注解模式:
实现controller接口
试图解析器
前对控制器
处理器映射
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图
springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
处理器,适配器,试图解析器
ssm整合:
1)Dao层
pojo和映射文件以及接口使用逆向工程生成
SqlMapConfig.xml mybatis核心配置文件
ApplicationContext-dao.xml 整合后spring在dao层的配置
数据源
会话工厂
扫描Mapper
2)service层
事务 ApplicationContext-trans.xml
@Service注解扫描 ApplicationContext-service.xml
3)controller层
SpringMvc.xml
注解扫描:扫描@Controller注解
注解驱动:替我们显示的配置了最新版的处理器映射器和处理器适配器
视图解析器:显示的配置是为了在controller中不用每个方法都写页面的全路径
4)web.xml
springMvc前端控制器配置
spring监听
springMVc参数绑定:
Strust获得参数
SpringMvc和Strust的异同
过滤器,拦截器
模型驱动,全局的,线程不安全,每个方法就那一个对象,所以Struct必须做成多例的
SpringMvc是线程安全的,单例的
Strust2是通过值栈往页面返回数据
Springmvc是同request域
返回数据的时候,
Redis复习:
RDB持久化默认生成的文件名为dump.rdb,Append-only file(缩写aof)持久化
aof 比快照方式有更好的持久化性
Mysql的相关知识: