【SSH】---【Struts2、Hibernate5、Spring4】【散点知识】
一、Struts2
1.1、Struts2的概念
Struts2是一个用来开发MVC应用程序的框架,它提供了Web应用程序开发过程中的一些常见问题的解决方案:
->对来自用户的输入数据进行合法性验证;
->统一的布局;
->可扩展性;
->国际化和本地化;
->支持Ajax
->表单的重复提交
->文件的上传下载(文件上传中文件的类型不是普通类型,而是多媒体数据类型【*.txt、*.doc、*.xls等】,由于表单中存放的不是普通数据,所以表单类型也随之概念,在上传的时候表单的一个属性enctype的值必须是multipart/form-data)
1.2、Struts2的核心
->过滤器StrutsPrepareAndExecuteFilter(概念、工作业务流程)
1.3、Struts2的访问请求路径后缀
->*.action
->*.do
->*.input(自定义)
具体做法:<constant name="struts.action.extension" value="action,jsp,input" />
1.4、在Strus2中访问Web资源的方法/方式
1.4.1、什么是Web资源?
HttpServletRequest、HttpSession、ServletContext等原生的Servlet API。
1.4.2、为什么要访问Web资源?
B/S的应用 Controller中必然要访问WEB资源:如向域对象中读写属性,读写Cookie等。
域对象中读写属性(域对象就是四个作用域):request.setAttribute("xxx")
1.4.3、访问Web资源的方式:
1.4.3.1、通过要与Servlet API(application program interface)解耦的方式进行访问
1.4.3.1.1、通过com.opensymphony.xwork.ActionContext
1.4.3.1.2、通过Action实现如下的接口
->org.apache.struts2.interceptor.ApplicationAware
->org.apache.struts2.interceptor.RequestAware
->org.apache.struts2.interceptor.SessionAware
1.4.3.2、通过要与Servlet API(application program interface)耦合的方式进行访问
1.4.3.2.1、org.apache.struts2.ServletActionContext
1.4.3.2.2、通过实现对应的ServletxxxAware接口(ServletRequestAware,ServletContextAware,ServletResponseAware)
1.4.4、四个作用域范围:
1.4.4.1、page(作用域范围是当前页面有效)
1.4.4.2、request(作用域范围是一次请求,什么叫一次请求?当我们使用浏览器打开网络上的一个资源就算一次请求),应用场景举例:向服务器提交数据,如注册人人网账号等。
1.4.4.3、session(作用域的范围是一次会话,会话的概念就是当我们通过浏览器去真正的去访问上网络当中的一个资源(JSP/SERVLET/……)直到我们关闭浏览器这段时间就算一次请求),应用场景举例:跟踪用户会话状态。
1.4.4.4、application(作用域的范围是服务器范围(也就是服务器从开启开始到服务器关闭结束)),应用场景举例:检测当前网站的在线人数。
1.5、struts.xml配置相关
1.5.1、package—用来划分系统模块,相当于我们java包
1.5.2、action—配置请求要访问的行为类(行为是什么,java里面有属性和行为/方法的概念)
1.5.3、id—前台提交数据到后台action的请求路径
1.5.4、class—前台提交数据到后台action的请求路径(这里指类的全名)
1.5.5、method—前台提交数据具体要执行的方法/行为
1.5.6、extends—struts给我们提供了部分功能,如重定向、内部跳转等等
1.5.7、type—相应类型(具体来说有以下几种:chain、dispatcher、redirect、redirectAction)
Chain:表示转发到一个Action
Dispatcher:表示转发(默认值)
Redirect:表示重定向
redirectAction:表示重定向到一个action(通过redirect的结果相应类型也可以重定向到action)
1.5.8、name—action业务执行完毕要跳转的逻辑路径,一般是配合type使用
1.5.9、namespace—命名空间(可以跨命名空间访问请求路径)
1.5.10、result—action的一个子节点/请求路径
1.6、action中具体action的访问方法
1.6.1、通过通配符访问方式
1.6.2、通过动态方法调用(Struts2的动态方法调用默认处于禁用状态,如果要使用,必须开启,方法如下,在Struts.xml中配置: strict-method-invocation="false")
1.7、国际化
国际化的作用是为了同一套程序在不同的语言环境下能够正常显示,如在中国编写的中文网页如果想在岛国能够正常显示,那么就需要能够在日文环境下显示的native2ascii编码。
另外需要注意的是关于英文的显示,建议采用美式英语,而不是英式英语。
1.8、Struts2的表单标签,我们一般用JSTL替代
1.9、Struts2的工作流程(切记一定要去记忆)
二、Hibernate5
2.1、Hibernate5核心思想?
2.1.1、Object-Relational-Mapping(对象关系映射)
2.2、怎么做到ORM的?
2.2.1、要求有以下几点:
2.2.1.1、实体类的属性必须要和数据库表的字段一一对应;
2.2.1.2、实体类中必须有一个字段能够体现数据库行的唯一性,hibernate要求是自增的;
2.2.1.3、要求要和数据库表映射的实体类必须有相应的映射文件;
2.3、hibernate核心配置文件具体要配置哪些内容?
2.3.1、数据源(包括驱动地址、连接地址、用户名、密码)
2.3.2、方言 工作中一定要注意你用的是什么数据库平台以及版本(切记切记)
2.3.3、hbm2ddl 工作中我们都用update
2.3.4、加载实体类与表的映射文件
2.3.4.1、方式一、XML方式(写法是:<mapping resource="类的全路径,路径必须用/表示"/>)
2.3.4.2、方式二、Annotation方式(写法是:<mapping class="类的全路径,路径必须用.表示">)
2.3.5、此外还可以配置是否让hibernate显示和格式化sql
2.3.5.1、显示的写法:show_sql 值是:true
2.3.5.2、格式化的写法:format_sql 值是:true
2.4、Hibernate5的核心api
2.4.1、Configuration—作用是用来加载核心配置文件,官方建议核心配置文件的文件名和路径分别是hibernate.cfg.xml,路径是src下。
2.4.2、SessionFactory—作用是用来创建sessionFactory,他的对象是由Configuration来创建。
2.4.3、Session—作用是用来创建session,他的对象是由SessionFactory来创建,相当于jdbc里面的connection
2.4.4、Transaction—事务,表示哪些方法处于事务的控制之下(如果对事务有所疑问去问度娘,但是必须得知道有四个属性ACID-原子性、隔离性、持久性、一致性)
2.5、hibernate的主键生成策略(这里仅指出需要大家记住的)
2.5.1、native(根据数据库底层机制来进行自增)
2.5.2、uuid(由hibernate生成一个由32位字符组成的字符串,这个生成的时候采用当前时间,当前电脑网卡MAC地址以及时间戳来综合生成,所以是唯一的)
2.6、缓冲
2.6.1、缓冲概念(自己看去吧)
2.6.2、一级缓冲(session级别缓冲)
2.6.3、二级缓冲(工作中我们采用第三方缓冲机制实现,常用的有Shiro、Redis、Memcached)
2.6.4、缓冲特性(在获取数据的时候首先找的是缓冲,如果能找到就返回数据,如果找不到就去数据库里面去查询,查到后紧接着放到缓冲里面,下一次再找同样还是直接找缓冲)
2.7、Hibernate事务
2.7.1、事务概念,特性
2.7.2、如何使用事务
2.7.2.1、通过在spring的核心配置文件中配置
2.7.2.2、通过annotation的方式去使用(记住这个也得配置一部分xml)
2.8、Hiberante常用API
2.8.1、Query
2.8.2、Criteria
2.8.3、SQLQuery(知道即可,我们从来不用)
2.9、Hibernate关系映射(一定记住hibernate是双向关系维护的)
2.9.1、one-to-many
2.9.2、many-to-many
2.9.3、实现方式
2.9.3.1、XML配置
2.9.3.2、Annotation
2.9.4、级联操作(cascade)
2.9.5、维护权限放弃(inverse)
2.10、hibernate查询方式
2.10.1、对象导航图
2.10.2、OID(对象ID查询)
2.10.3、HQL
2.10.4、QBC
2.10.5、本地SQL
2.11、hibernate检索策略
2.11.1、get(只要一执行程序马上就会发送SQL语句给数据库去执行)
2.11.2、load(执行后不会马上发送sql语句给数据库执行,而是用到对象里面的具体属性的时候才会发送,相当于延迟加载)
2.11.3、批量抓取
2.11.4、Lazy(尽量少用)
2.11.4.1、true(延迟)-要用
2.11.4.2、false(不延迟)-不用
2.11.4.3、extra(相当滴延迟)-不用
2.12、数据库连接池(我们不用,因为我们框架集成要交给spring管理)
2.13、hibernate工作流程
三、Spring4
3.1、Spring的工作流程
3.2、Spring的两大核心
3.2.1、AOP—面向切面编程
3.2.2、IOC/DI—(IOC控制反转/反转控制,目的是把对对象的创建交给spring进行管理,DI依赖注入,可以注入的属性包括基本属性和对象属性)
3.3、bean标签
3.3.1、id—类的对象的名称
3.3.2、class—类的全名
3.3.3、name—功能和id是一样的,但是已经抛弃,不用了。只是一个遗留的属性,为了兼容struts1.
33.4、scope—单例和多例(需要大家知道因为我们采用struts的action操作,action是多例的,所以在开发的时候scope的值是prototype)
3.4、bean实例化的三种方式
3.4.1、通过无参构造方法(必须得会)
3.4.2、通过静态工厂类(必须得会)
3.4.3、通过实例化工厂(了解即可)
备注:对bean的实例化有两种方式:1、XML;2、Annotation
3.5、事务配置
3.5.1、首先得有数据源(前提条件)
2.5.2、配置事务sessionFactory、注入DataSource、注入hibernatetemplate(如果使用的话)
3.6、配置连接池(我们常用c3p0)
2017-08-18 18:49:37