SSH总结.docx
《SSH总结.docx》由会员分享,可在线阅读,更多相关《SSH总结.docx(34页珍藏版)》请在冰豆网上搜索。
SSH总结
Struts2总结Hibernate总结
Struts2介绍
优点介绍
1.在软件设计上Struts2没有像struts1那样跟ServletAPI和strutsAPI有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和strutsAPI。
Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。
2.Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
3.Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。
在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
4.Struts2提供支持多种表现层技术,如:
JSP、freeMarker、Velocity等
5.Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。
6.提供了全局范围、包范围和Action范围的国际化资源文件管理实现
MVC模式与框架实现
什么是MVC模式
MVC组件与交互
实现MVC框架的要点
Struts2工作流程与模型驱动模式
Struts2工作流程与架构
Struts2核心组件
第一个Struts2登录案例
Struts2数据校验与类型转换
数据库校验概述
编程式校验
声名式校验
类型转换
Struts2异常处理
异常处理概述
配置局部异常处理
配置全局异常处理
国际化
国际化概述
Struts2拦截器与自定义拦截器
拦截器与拦截器栈
自定义拦截器
Struts2标签
ONCL表达式
#、%、$符号的用法
文件上传
案例
Hibernate总结
持久化技术与DAO模式
数据持久化技术介绍
Dao模式介绍
重构DAO模式的要点
Hibernate完成CRUD
ORM介绍
什么是MVC模式
MVC(Model模型、View视图、Controller控制器)是一种架构模式。
Model模型:
应用程序的主体部分,用于表示业务数据、或者业务逻辑。
如:
JavaBean、EJB、WebService。
View视图:
应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
如:
JSP、HTML、freemarker等模板技术。
Controller控制器:
用于根据用户的输入、控制用户界面数据显示,更新Model对象状态。
如:
核心组件Servlet。
(1)MVC手段与目标:
第一步:
从模型中分离表现。
第二步:
视图与控制器分离。
主要目标:
通过控制器解耦模型与视图,使不同表现(视图)可以共享相同的模型。
MVC组件与交互
实现MVC框架的要点
决定哪些视图请求/用户操作交给框架处理。
以后缀区分,如*.action,*.do以目录名区分,如/services/*
分离系统控制器与业务控制器。
系统控制器中判断用户操作并调度业务控制器:
Stringpath=request.getServletPath();
StringactionPath=path.substring(path.lastIndexOf("/")+1,path.lastIndexOf("."));
用接口来解耦合。
用反射机制或工厂模式结合配置文件获取灵活性。
要进行合理的抽象。
Struts2工作流程与架构
Struts2架构
Struts2的请求是由FilterDispatcher来进行拦截的,当接收到用户的请求时,它会在Struts.xml中查找对应的请求映射配置,得到使用哪些拦截器Interceptos、Action类和返回结果Result的信息,然后
依次做如下操作:
1)、请求通过一系列的拦截器:
Interceptos是Struts2中的一种过滤机制,它基于AOP的思想进行设计
通常可以用于日志记录、权限限制等。
拦截器和拦截器组可以按照不同的级别进行组合配置处理请求。
它们为请求提供各种预处理和切面处理的应用功能。
2)、调用Action:
产生一个新的Action对象实例,并提供请求所调用的处理逻辑的方法,并调用Model层执行业务逻辑的操作,然后返回映射配置中指定的Result值。
3)、业务处理:
业务逻辑通常由JavaBean或EJB组件实现。
4)、调用相应的Result:
通过匹配处理Action方法之后的返回值,获取相应Result类,生成并调用它的实例。
处理Result可能产生的结果之一就是对UI模板(但并非一个)进行渲染,生成HTML。
5)、响应被返回给用户:
最后一步是将控制权交还给Servlet引擎,最常见的结果是吧渲染后的HTML返回给用户
Struts2的核心组件
全局属性文件(struts.properties):
保存了系统运行的一些参数变量,整个系统只有一个属性文件。
映射文件(struts.xml):
用于配置请求映射的Action和拦截器,可以有多个映射文件。
业务控制器(Action):
可以使用任意的POJO类,也可以继承ActionSupport,在该类中我们不仅可以取得表单数据,还可以取得上下文变量。
第一个Struts2登录案例
1、第一步创建登录界面:
Form表单里,两个输入框(text),一个提交按钮(submit)。
2、创建Sturts2Action处理类
packagestudy.shop.action;
importcom.opensymphony.xwork2.ActionSupport;
publicclassLoginActionextendsActionSupport{
privateStringusername;
privateStringpass;
//是从jsp页面获取username的值
publicStringgetUsername(){
returnusername;
}
//相当于把其存入到request中
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPass(){
returnpass;
}
publicvoidsetPass(Stringpass){
this.pass=pass;
}
@Override
publicStringexecute()throwsException{
returnSUCCESS;
}
}
a)创建其配置文件
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""http:
//struts.apache.org/dtds/struts-2.1.dtd">
/success.jsp
解释:
✧package包对一类action的封装extends继承了struts-default.xml文件中struts-default默认的包,其包提供了struts2基本处理(比如拦截器,文件上传下载,参数的处理等等)。
Namespace问包提供一个访问的命名空间。
✧action从jsp页面中传递请求class指明的是该请求交给此类来处理,默认的情况交给此类中的execute方法处理也可以通过method属性来指明该action由其某个方法处理
✧result代表以上类处理返回的结果此结果可以由name属性指定其结果值type指明其结果类型默认的是dispatcher类型(此类型是与jsp页面交互)。
⏹通过发布此项目即可测试。
通过此项目简单了解struts2的处理流程如下:
ØJsp:
发送请求
Øweb.xml文件中的StrutsPrepareAndExecuteFilter:
读取struts.xml
Ø通过拦截器处理找到actionname=”login”
Ø通过此action对应类中的setXxx()和getXxx()方法保存并专递数据到jsp
Ø执行此action类指明的方法默认是execute()方法并返回结果
Ø根据处理的结果使用resultname的属性进行匹配然后根据其type属性类型执行结果集操作
数据校验的概述
Struts2的两种校验方法
编程式校验:
继承ActionSupport类来编写校验函数Validate()
声明式校验:
基于xword的Validator框架
编程式校验
action需要继承ActionSupport,或者直接实现Validateable接口
ActionSupport类是一个工具类,它已经实现了Action接口,还实现了Validateable接口。
在Validateable接口中定义了一个validate()方法,重写该方法,就可以到表单进行校验。
validate()方法会在执行execute()方法之前执行。
声名式校验
基于XWork的Validator框架。
通过定义配置文件来完成数据校验。
校验器定义文件位于XWork的jar包的com.opensymphony.xwork2.validator.validators中
利用正则表达式验证
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0//EN"">
true
必须输入名字
[CDATA[(\w{6,15})]]>
只能是字母和数组,长度6~15
true
必须输入密码
[CDATA[(\w{6,15})]]>
只能是字母和数组,长度6~15
1
150
年纪必须在1到150之间
1900-01-01
2050-02-21
年纪必须在${min}到${max}之间
类型转换
HTTP协议中传递的任何内容都是String类型的。
Struts2内置了类型转换机制,VO属性是Struts2支持的类型的话,Struts2就会自动把字符类型转换成相应的类型。
Struts2的类型转换是基于OGNL表达式的,只要我们把HTML输入项(表单元素和其他GET/POET的参数)命名为合法的OGNL表达式,就可以充分利用Struts2的转换机制。
流程图
Struts2异常处理概述
Ø用配置文件来处理异常,快捷方便
Ø可以作为亡羊补牢的措施
配置局部异常处理
例:
在struts.xml中配置异常
class="org.cjh.actions.LoginAction">
/success.jsp
/error.jsp
/index.jsp
--添加一个出现未知异常的物理视图-->
/actionException.jsp
--局部异常与result映射-->
result="actionException"exception="java.lang.Exception">
配置全局异常处理
例:
在struts.xml中配置全局异常出来
--全局result和异常必须放在Action元素上,局部异常优先-->
/globalException.jsp
result="globalException"
exception="java.lang.Exception">
/success.jsp
/error.jsp
/index.jsp
--添加一个出现未知异常的物理视图-->
/actionException.jsp
--局部异常与result映射-->
--result="actionException"
exception="java.lang.Exception">
-->
国际化概述
(1)国际化常用类:
Øjava.util.ResourceBundle//用于加载资源包
Øjava.util.Locale//对应一个特定国家/区域/语言环境
Øjava.text.MessageFormat//用于将消息格式化
(2)国际化流程
ØStruts2支持国际化(简写为i18n)
◆UI标签textfieldname=“username”key=“username_lable”/>
◆Action/字段错误信息.
Øpropertyvalue="getText('some.key')"/>
Øtextname="'some.key'"/>
Øi18nname="some/package/bundle">
textname="'some.key'"/>
i18n>
Øi18n标签,将资源包压入栈中,允许使用除前面提到的继承链以外的资源包显示文本.
拦截器与拦截器栈
1)拦截器介绍
使用拦截器可以实现横切功能并使这些实现相对action甚至Struts2框架保持独立。
可以实现和使用自己所需的特性且不用修改框架的底层代码。
使用拦截器可以达到以下目的:
Ø在调用Action之前,提供预处理逻辑
Ø与Action进行交互,提供执行信息,比如设置请求中的参数
Ø在调用Action之后,提供后处理逻辑
Ø修改返回的结果,进而修改呈现给用户的内容
Ø捕获异常从而替换可执行的处理过程或返回一个不同结果
2)什么是拦截器栈
拦截器链(InterceptorChain,在Struts2中称为拦截器栈InterceptorStack)。
拦截器链就是将拦截器按一定的顺序联结成一条链。
在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
注意:
某些截取器会中断栈/链/流程,因此顺序是十分重要。
不好确定拦截器顺序就使用现成的拦截器栈
3)实现原理
4
4)默认拦截器
自定义拦截器
大家在开始着手创建自定义拦截器前,切记以下原则:
拦截器必须是无状态的,不要使用在API提供的ActionInvocation之外的任何东西。
要求拦截器是无状态的原因是Struts2不能保证为每一个请求或者Action创建一个实例,
所以如果拦截器带有状态,会引发并发问题。
所有的Struts2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor
或com.opensymphony.xwork2.interceptor.AbstractInterceptor。
com.opensymphony.xwork2.interceptor.Interceptor该接口提供了三个方法:
voidinit():
在该拦截器被初始化之后,在该拦截器执行拦截之前,系统回调方法。
每个拦截器只会执行一次。
voiddestroy():
该方法跟init()方法对应,在拦截器实例被销毁之前,系统将回调该方法。
Stringintercept(ActionInvocationinvocation):
该方法是用户需要实现的拦截动作,该方法会返回一个字符串作为逻辑视图。
com.opensymphony.xwork2.interceptor.AbstractInterceptor:
该抽象提供的init()和destroy()方法的空实现,只需要实现intercept()方法。
ONCL表达式
什么是ONCL表达式
ONGL是Struts2框架中使用的EL表达式,结合Struts2标签一起使用。
EL表达式可以方便获取各种来源的数据。
EL表达式调用方法。
EL表达式遍历整个对象结构图。
Struts2支持的表达式
◆OGNL(ObjectGraphNavigationLanguage):
可以方便地操作对象属性的开源表达式语言(默认)。
◆JSTL(JSPStandardTagLibrary):
JSP2.0集成的标准的表达式语言。
◆Groovy:
基于Java平台的动态语言。
◆Velocity:
严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,其性能要比JSP好。
#、%、$符号的用途
(1)“#”符号四种用途:
“#”可以访问ONGL上下文和ActionContext,相当于ActionContext.getContext()
ActionContext中属性列表:
名称
作用
说明
parameters
当前请求参数的Map
#parameters.id[0]
相当于request.getParameter("id")
request
当前请求属性的Map
#request.userName
相当于request.getAttribute("userName")
session
包含当前HttpSession的属性的Map
#session.userName
相当于session.getAttribute("userName")
application
包含当前ServletContext的属性的Map
#application.uName
等同application.getAttribute("uName")
attr
用于按requestsessionapplication
顺序访问其属性
#attr.userName相当于按顺序在以上三个范围内读取userName属性
(2)“%”符号:
主要用途是在标签的属性为字符串类型时,计算ONGL表达式的值。
--includeParams:
把请求参数也传过去-->
urlvalue