SSH框架期末复习重点
该文本主要介绍了以下主要内容:
Struts2三种方式实现动态方法的调用:
- 不指定method属性
- 指定method属性
- 通配符映射
OGNL表达式:- 获取action属性:<s:property value="name"/>
- 获取request属性:<s:property value="#request.name"/>
- 获取session属性:<s:property value="#session.name"/>
- 获取application属性:<s:property value="#application.name"/>
< s:iterator>标签:
主用于对集合进行迭代操作
Struts2拦截器:
包括文字过滤拦截器、表单元素的key值与资源文件的key对应等
Hibernate5一对多关联关系:
示例代码显示如何配置一对多双向关联映射
Spring5注入的两种方式:
设置注入和构造注入
Spring5创建通知:
示例代码显示如何配置代理工厂和拦截器
数据标签:
包括<s:action>、<s:bean>、<s:include>、<s:param>等标签及其常用属性
Struts2的工作原理:
用户请求提交后经过多个拦截器拦截后交给核心控制器处理
Hibernate5持久化对象状态:
介绍临时态、持久态和脱管态的特点及区别
Session类的方法分类:
根据用途分为获取对象、持久化操作、查询操作等五类方法
Spring5框架组件功能:
核心容器(BeanFactory和ApplicationContext)、Spring上下文、AOP模块(Spring AOP)、DAO模块(Spring DAO)、ORM模块(JDO/Hibernate/iBatisSQL Map)、Web模块(Spring Web MVC)及控制反转(IoC)
依赖注入与控制反转:
介绍依赖注入的概念及其作用机制
选择题
Struts2中实现动态方法调用的三种途径
第一种方式是不指定method属性;
第二种方式是明确指定method属性;
第三种方式则是通过通配符实现映射功能。
OGNL表达式
提取action属性:<s:property value="name"/>
解析request信息:<s:property value="#request.name"/>
读取session状态:<s:property value="#session.name"/>
分析应用信息:<s:property value="#application.name"/>
< s:iterator>标签专用于对数据结构进行迭代操作,这些数据结构包括List、Map、Set以及数组等多种类型.
Struts2国际化
<!--使用text标签输出国际化消息-->
<titile><s:text name="loginTitle"/></title>
<!--表单元素的key值与资源文件的key对应-->
<s:textfield name="UserName" key="loginName" size="20"/>
<s:password name="UserPassWord" key="loginPassword" size="20"/>
Struts2拦截器
<interceptors>
<!--文字过滤拦截器配置,replace是拦截器的名字-->
<interceptor name="replace" class="interceptor.MyInterceptor"/>
</interceptors>
<!--使用自定义拦截器-->
<interceptor-ref name="replace"/>
Hibernate5一对多关联关系
<!--一对多双向关联映射customer到orders,单的一方配置-->
<set name="orders" table="orders" cascade="all" inverse="true" lazy="false">
<key column="CUSTOMER_ID"/>
<one-to-many class="PO.Orders"/>
</set>
该参数inverse被定义为在双向关联中起被动作用的那一端。当inverse设为false时(即不为true),相应的那一方将承担维护这种关联关系的责任。该参数的默认取值设定为false。
Spring5注入的两种方式
依赖注入通常有两种方式:设置注入和构造注入。
1.配置注射
配置注射采用的是通过setter方法为被调用对象提供实例的方式。
2.结构注射
采用构造方法进行依赖配置的技术被称为结构注射。
Spring 5版本提供了五种不同的通知机制:其中包括前置性提醒、后置性提醒以及环绕性提示(AroundAdvice),此外还支持在发生异常时发出处理建议(ThrowsAdvice)以及通过引入机制实现特定业务逻辑扩展(IntroductionAdvice)。
简答题
当用户发起请求时, 系统会依次经过多个拦截器进行检查, 并最终将请求转发给核心控制器StrutsPrepareAndExecuteFilter进行处理。该核心控制器首先读取配置文件struts.xml, 根据配置信息确定由特定的业务控制器及其对应的Action来负责处理用户的请求数据。在这一过程中, 系统会调用相关的业务组件(如链接)来进行数据处理, 这些组件之间可能还会协同调用其他模型组件共同完成复杂的任务。当某一个Action完成任务后, 会在完成任务后, 该Action返回一个结果给核心控制器, 核心控制器根据返回的结果重新解读配置文件struts.xml的内容, 最终决定下一步操作是跳转到目标页面还是继续触发另一个Action以完成后续的数据流程。
Struts2的数据标签
1.<s:action>标签
action标签用于在JSP页面中直接调用Action。常用属性如下所示:
(1)id:指定被调用Action的引用ID,可选项。
(2)name:指定被调用Action的名字,必选项。
(3)namespace:指定被调用Action所在的namespace,可选项。
(4)executeResult:指定是否将Action处理结果包含到当前页面中默认值为false,即不包含,可选项。
(5)ignoreContextParams:指定当前页面的数据是否需要传给被调用的Action,默认值为false,即默认将页面中的参数传给被调用的Action,可选项。
该标签用于在JSP页面中创建JavaBean实例。当创建JavaBean实例时,可以使用标签为JavaBean实例注入参数。其常见属性包括:
(1)指定实例化JavaBean实现类的名称;
(2)设置变量名,默认可选。
<s:include>标签用于在一个网页中嵌入另一个JSP页面或Servlet文件。
<s:param>标签用于为其他类型的元素或标签传递必要的参数信息。例如include元素和其他Bean相关的元素等。
Struts 2 的拦截器系统
其核心组件体现在基于 Struts 2 构建的一系列过滤机制中,并且这些机制共同构成了该框架的基础架构。
其强大的过滤能力主要得益于整合了众多内置过滤机制的支持。
params intercepted通过解析HTTP request中的参数,并将其赋值给Action组件的属性字段;servlet-config intercepted将HttpServletRequest和HttpServletResponse实例传递给Action组件进行处理;I18N国际化 intercept进行操作;此外还有数据校验 intercepted负责对数据校验信息实施监控与管理。
Hibernate5的持久化对象分为三种状态:分别是临时态、持久态和脱管态;其中临时态亦被称为临时状態、持久态亦被称为长效存储备份;而脱管态则又被叫做解耦存储备份
1.临时态
由new命令开辟内存空间刚生成的Java对象处于临时态。
虚拟对象的性质:虚拟对象是在内存中独立存在的实体,在系统层面具备特定的功能特性。它不依赖于实际存在的物理设备运行,并且与数据库中的数据无任何关联。该对象的主要功能是作为存储和管理信息的核心实体存在,并且能够与其他系统组件进行交互操作而不涉及底层硬件资源管理的问题。
实体处在一个特定的状态,在存储系统中对应地存储了记录信息,并具备一个持久化的唯一标识符。
持久对象的特点:
(1)与Session实例关联。
(2)在数据库中有与它关联的记录。
当与某持久对象相关联的Session被关闭后,该持久对象随后转变为脱管状态的对象。当该脱管状态的对象重新建立与Session的关联时,则会恢复为持久状态的对象。
脱管对象的特点如下:
(1)其根本特征在于与临时对象具有相同的属性,在未被任何变量引用或调用的情况下,JVM系统会自动地将这些对象归还到内存中以释放资源。
(2)相对于临时对象而言,在功能上脱管对象额外包含了存储一个独特的数据库记录标识值的能力或特征。
根据用途可将Session类的方法划分为以下五种类型:
- 用于获取持久化对象的方法包括get()和load()等。
- 针对持久化对象的保存、更新及删除操作提供save()、update()、saveOrUpdate()和delete()等方法。
- createQuery()方法用于从Session生成Query对象。
- beginTransaction()方法用于从Session生成Transaction对象。
- 用于管理Session的操作包括isOpen()、flush()、clear()、evict()和close()等方法。
基于控制反转模式的核心组件设计实现了对Spring 5框架基本功能的实现
通过控制反转模式实现应用层与业务逻辑层的有效分离,并动态管理应用所需的资源与依赖项
- Spring 上下文
Spring 上下文是一种配置文件,为 Spring 5 框架提供上下文信息。
3.Spring AOP
通过实现了管理特性。
该模块整合了面向切面的编程功能到Spring5框架中。
该模块为基于Spring5的应用程序中的对象提供了事务管理服务。
- Spring DAO
Spring DAO抽象层支持了重要的异常层次结构。该层次结构便于有效地处理异常以及接收各数据库供应商发送的错误信息。
Spring5框架整合了多种ORM技术。进而为开发者提供了ORM功能集合。其中包含JDO、Hibernate和iBatisSQL Map等主流ORM框架。
基于应用程序上下文架构设计的Spring Web模块为构建Web应用提供了基础结构。为此开发的Spring5框架成功实现了与Struts框架的整合。
7Spring MVC
Spring MVC模块是一个具备全面功能的设计用于构建Web应用程序的核心框架。在使用策略接口的情况下,基于MVC架构的应用程序能够实现高度可配置性。该框架不仅整合了多种视图开发工具,并且支持包括JSPVelocityTiles和iText在内的多种视图技术。
在Spring框架版本5中采用的控制反转模式(即IoC),使得默认情况下一个对象获取另一个对象作为其依赖关系的过程中,默认情况下是被依赖的对象主动去获取提供者。然而,在这种模式下,默认情况下被依赖的对象会被动地等待提供者来满足其需求。
IoC的简称——依赖注入
即为依赖注入技术(IoC),它指的是由IoC容器在运行时主动向对象注入所需的各种辅助资源。
由此可见,依赖注入与控制反转分别从两个不同维度阐述同一个概念:即通过借助IoC(依赖注入)容器的帮助,在系统中采用基于依赖关系的注入方式来实现各实体间的松耦合设计。
代码分析题
Struts2数据标签
在struts.xml中配置Action
<action name="tag1" class="actionTagAction.ActionTagAction">
<result name="success">/success3.jsp</result>
</action>
<action name="tag2" class="actionTagAction.ActionTagAction"
method="login">
<result name="success">/loginSuccess3.jsp</result>
</action>
使用action标签调用Action的JSP页面
<!--使用action标签调用Action类,Action处理返回success3页面,并将结果包含在页面中-->
<s:action name="tag1" executeResult="true"/>
<hr/>
下面调用第二个Action,并将结果包含到本页面中,阻止当前页面的参数传入Action.
<br>
<s:action name="tag2" executeResult="true" ignoreContextParams="true"/>
<hr/>
下面调用第二个Action,并不将结果包含到本页面中,但接受当前页面的参数传入Action.
<br>
<s:action name="tag2"/>
当前页面传递的参数name的值:
<s:property value="#request.name"/>
Struts2控制标签
<s:set var="score" value="100"/>
<s:if test="#score>=90">优秀</s:if>
<s:elseif test="#score>=80">良好</s:elseif>
<s:elseif test="#score>=70">中等</s:elseif>
<s:elseif test="#score>=60">及格</s:elseif>
<s:else>不及格</s:else>
Hibernate5的Query接口
实体类对应的映射文件
<!--设置命名查询,query元素中的name指定要被调用的HQL名字-->
<query name="queryUser_byAgeAndName">
<![CDATA[from UserInfoPO u where u.age>:minAge and u.userName
like:userName]]>
</query>
字段name属性用于指定查询外部HQL时的名称,请参考以下示例代码
Query query=session.getUserNameQuery("queryUser_byAgeAndName");//使用命名为“queryUser_byAgeAndName”的HQL语句进行查询
query.setInteger("minAge",22); //设置变量minAge的值为22
query.setString("userName","%志%"); //设置变量userName的值为“%志%”
List list=query.list();
for(int i=0;i<list.size();i++){
ui=(UserInfoPo)list.get(i);
System.out.println(ui.getUserName());
}
该Query中调用list()方法以获取查询结果,并将其转换为一个遵循List接口规范的对象。随后利用for循环逐项输出所有的查询结果。
封装数据库操作的类
public boolean saveInfo(Stuinfo info){
try{
session=HibernateSessionFactory.getSession(); //获得Session对象
transaction=session.beginTransaction(); //开启事务
session.save(info); //调用save()方法保存数据
transaction.commit(); //提交事务
session.close(); //关闭Session
return true;
}catch(Exception e){
message("saveInfo.error:"+e);
e.printStackTrace();
return false;
}
}
Spring创建通知
<!--使用Spring代理工厂配置一个代理-->
<bean id="reception"
class="org.springframework.aop.framework.ProxyFactoryBean">
<!--指定代理接口-->
<property name="proxyInterfaces"
value="beforeadviceexample.Reception"></property>
<!--指定通知-->
<property name="interceptorNames"
value="gettingBeforeAdvice"></property>
<!--指定目标对象-->
<property name="target" ref="target"></property>
</bean>
程序补充题
Struts2如何配置OGNL表达式
注册成功的jsp页面使用OGNL表达式获取数据
<body>
<h1>${name}</h1>
<hr>
获取action属性:<s:property value="name"/>
获取request属性:<s:property value="#request.name"/>
获取session属性:<s:property value="#session.name"/>
获取application属性:<s:property value="#application.name"/>
<hr>
</body>
注册页面对应的业务控制器核心代码(OGNLAction.java)
public String execute() throws Exception{
//获取request,并添加信息
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("name",getName());
//获取session,并添加信息
Map session=ActionContext.getContext().getSession();
session.put("name",getName());
//获取application,并添加信息
Map application=ActionContext.getContext().getApplication();
application.put("name",getName());
return SUCCESS;
}
