SSH总结Word文档下载推荐.docx
- 文档编号:20856294
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:34
- 大小:1.22MB
SSH总结Word文档下载推荐.docx
《SSH总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SSH总结Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
文件上传
案例
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"
struts>
<
packagename="
"
extends="
struts-default"
namespace="
<
actionname="
login"
class="
study.shop.action.LoginAction"
resultname="
success"
/success.jsp<
/result>
/action>
<
/package>
/struts>
解释:
✧package包对一类action的封装extends继承了struts-default.xml文件中struts-default默认的包,其包提供了struts2基本处理(比如拦截器,文件上传下载,参数的处理等等)。
Namespace问包提供一个访问的命名空间。
✧action从jsp页面中传递请求class指明的是该请求交给此类来处理,默认的情况交给此类中的execute方法处理也可以通过method属性来指明该action由其某个方法处理
✧result代表以上类处理返回的结果此结果可以由name属性指定其结果值type指明其结果类型默认的是dispatcher类型(此类型是与jsp页面交互)。
⏹通过发布此项目即可测试。
通过此项目简单了解struts2的处理流程如下:
Ø
Jsp:
formaction=”login.action”>
发送请求
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中
利用正则表达式验证
DOCTYPEvalidatorsPUBLIC"
-//OpenSymphonyGroup//XWorkValidator1.0//EN"
>
validators>
fieldname="
name"
field-validatortype="
requiredstring"
paramname="
trim"
true<
/param>
message>
必须输入名字<
/message>
/field-validator>
regex"
expression"
[CDATA[(\w{6,15})]]>
只能是字母和数组,长度6~15<
/field>
pass"
必须输入密码<
age"
int"
min"
1<
max"
150<
年纪必须在1到150之间<
birth"
date"
1900-01-01<
2050-02-21<
年纪必须在${min}到${max}之间<
/validators>
类型转换
HTTP协议中传递的任何内容都是String类型的。
Struts2内置了类型转换机制,VO属性是Struts2支持的类型的话,Struts2就会自动把字符类型转换成相应的类型。
Struts2的类型转换是基于OGNL表达式的,只要我们把HTML输入项(表单元素和其他GET/POET的参数)命名为合法的OGNL表达式,就可以充分利用Struts2的转换机制。
流程图
Struts2异常处理概述
用配置文件来处理异常,快捷方便
可以作为亡羊补牢的措施
配置局部异常处理
例:
在struts.xml中配置异常
hwch"
class="
org.cjh.actions.LoginAction"
error"
/error.jsp<
input"
/index.jsp<
--添加一个出现未知异常的物理视图-->
actionException"
/actionException.jsp<
--局部异常与result映射-->
exception-mapping
result="
exception="
java.lang.Exception"
/exception-mapping>
配置全局异常处理
在struts.xml中配置全局异常出来
--全局result和异常必须放在Action元素上,局部异常优先-->
global-results>
globalException"
/globalException.jsp<
/global-results>
global-exception-mappings>
exception="
/global-exception-mappings>
--<
-->
国际化概述
(1)国际化常用类:
java.util.ResourceBundle//用于加载资源包
java.util.Locale//对应一个特定国家/区域/语言环境
java.text.MessageFormat//用于将消息格式化
(2)国际化流程
Struts2支持国际化(简写为i18n)
◆UI标签<
s:
textfieldname=“username”key=“username_lable”/>
◆Action/字段错误信息.
propertyvalue="
getText('
some.key'
)"
/>
textname="
'
i18nname="
some/package/bundle"
/s:
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("
application
包含当前ServletContext的属性的Map
#application.uName
等同application.getAttribute("
uName"
attr
用于按requestsessionapplication
顺序访问其属性
#attr.userName相当于按顺序在以上三个范围内读取userName属性
(2)“%”符号:
主要用途是在标签的属性为字符串类型时,计算ONGL表达式的值。
--includeParams:
把请求参数也传过去-->
urlvalue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 总结