struts2课堂笔记
2013-12-08 22:51
537 查看
========================
目录:
1.为什么学习Struts框架
2.MVC模式在JavaWeb中的应用
3.了解Struts历史
4.HelloWord入门实例
5.项目示例(资费列表显示)
6.OGNL技术的使用
7.OGNL技术在Struts的使用
8.Action组件的相关使用
9.stream Result组件
10.json Result组件
11.Struts2表单标签
12.拦截器组件
========================
====================
day01
====================
梁建全 liangjq@tarena.com.cn
------------------------------------------
1.为什么学习Struts框架
a.Struts框架好处
--简化开发工作量,提高开发效率
--采用了优秀的设计思想(MVC)
b.如何学习Struts框架
先重点掌握框架使用,原理性有余力可以多了解些。
2.MVC模式在JavaWeb中的应用
*a.什么是MVC
MVC思想就是根据组件职责不同,将系统中组件分成以下3个组成部分。
--V视图:负责与用户交互,一种是展示数据,另一种是接收数据。
--M模型:负责业务处理,一种是业务逻辑模型,另一种是数据模型。
--C控制器:负责协调视图部分和模型部分协同工作。
b.为什么使用MVC
企业程序更强调结构灵活,易于扩展和升级。所以广泛选用MVC模式开发。
*c.JavaWeb中如何实现MVC结构
JavaWeb技术主要有:Servlet,JSP,JavaBean,Filter,Listener等
V部分:JSP组件 (cart.jsp)
M部分:JavaBean组件(entity,dao)
C部分:Servlet,Filter组件 (ShoppingCartServlet)
*d.MVC处理流程
--首先浏览器发出请求
--请求进入C控制器
--C控制器调用M模型组件处理
--M模型组件处理后返回处理结果
-- C控制器调用V视图组件生成响应信息
*e.Struts框架的MVC实现
原有ShoppingCart程序,虽然符合MVC结构,但不适合大型项目开发,因为请求一多,ShoppingCartServlet会出现大量的if..else... ,可以进行以下方式的改造
为ShoppingCartServlet配置一个XML文件,该文件定义不同请求和不同Action组件的对应关系,将原有if..else..分支处理用Action组件封装。
**f.Struts框架的处理流程
--浏览器发出struts请求
--请求进入struts控制器
--struts控制器解析xml配置文件
(xml定义了请求和Action对应关系)
--控制器根据不同请求,调用不同的Action
--Action调用DAO处理请求,之后返回结果
--控制器根据结果调用视图组件为用户响应
3.了解Struts历史
Struts框架分成Struts1和Struts2.Struts2和Struts1没有必然联系。Struts2是以WebWork框架核心(xwork)为基础构建起来
*4.Struts基本使用
a.引入struts2核心开发包(5个)
--struts2-core-2.1.8.jar (核心包)
--xwork-core-2.1.6.jar (webwork内核包)
--commons-fileupload-1.2.1.jar (上传包)
--ognl-2.7.3.jar (OGNL表达式工具包)
--freemarker-2.3.15.jar (模板视图工具包)
b.在web.xml中配置下struts控制器
c.根据请求编写Action,JSP
d.在struts.xml定义Action和请求对应关系
5.HelloWord入门实例
welcome.action-->Struts控制器
-->struts.xml-->WelcomeAction
-->welcome.jsp
(Action请求可以是/welcome.action或者/welcome两种写法)
======struts.xml基本配置========
struts.xml放在src根目录下。
a) <struts>根元素,可以包含多个<package>元素
b)<package>元素主要用于将Action分组定义。name属性用于指定包名;extends一般指定为struts-default。struts-default这个包在struts-default.xml中定义,其中包含了struts2运行所需的必要组件。
c)一个<package>元素可以包含多个<action>.<action>主要用于定义请求和Action组件的对应关系。name属性指定请求名;class属性指定Action的包名.类名
d)一个<action>元素可以包含多个<result>.
<result>主要用于定义视图响应。name属性与Action.execute()返回值一致。
=======================
扩展HelloWorld示例
a.隐藏JSP组件
b.从WelcomeAction向Welcome.jsp传值
c.WelcomeAction接收welcome.action请求带过来的表单信息
d.页面跳转可以采用下面配置
<action name="请求名">
<result name="success">
jsp页面
</result>
</action>
如果不指定class属性,会默认调用框架底层的ActionSupport类处理。
6.项目示例(资费列表显示)
a.显示默认主页面
index.action-->struts控制器-->index.html
b.资费列表显示
feeList.action-->struts控制器
-->FeeListAction-->FeeDAO-->COST
-->fee_list.jsp
1)编写COST对应的Entity实体类
2)编写DAO,DBUtil
--引入oracle驱动包
3)编写Action
4)配置Action
5)编写JSP
--引入jstl.jar,standard.jar
==========课后练习==================
1.完成helloworld示例
2.完成资费列表显示示例
====================
day02
====================
------------回顾---------------
1.了解Struts2的MVC实现,及其工作流程
2.掌握Struts2的核心应用
-------------------------------
任务描述:
1)为资费列表添加分页功能
1页:1-2
2页:3-4
3页:5-6
page=1
pageSize=2
int begin = (page-1)*pageSize+1;
int end = page*pageSize;
select * from
(select rownum rn,c.*
from COST c where rownum<=6)
where rn>=5
2)利用Struts2标签+OGNL技术重构资费列表
--------------------------------
1.OGNL技术的使用
1)什么是OGNL
源于ognl.jar工具包
Object Graphics Navigation Language
(对象图导航语言)
主要用于访问对象的数据和方法。
2)OGNL基本原理
OGNL工具主要由3部分构成,具体如下
a.OGNL引擎
负责解析ONGL表达式,定位数据
b.Root根存储区(Object类型)
负责存储要访问的目标对象。
c.Context变量存储区(Map类型)
负责存放多个要访问的目标对象。
*3)OGNL基本语法
a.访问Root区域对象基本语法
--访问简单数据:"属性" 例如"name"
--访问数组或List集合:"属性[0]"
例如"arr[1]"
--访问Map集合:"属性['key']"或"属性.key"
例如"map.two"或"map['two']"
--访问方法:"属性值.方法()",
例如"list.size()"
--访问构造方法:"new 包名.构造方法"
例如"new java.util.Date()"
--访问静态成员:"@包名.类名@成员"
例如"@java.lang.Math@PI"
--创建List对象:"{元素1,元素2}"
--创建Map对象:
"#{key1:value1,key2:value2}"
b.访问Context区域对象基本语法
采用"#Key"开头.
2.OGNL技术在Struts的使用
在Struts2中有一个ValueStack数据对象,该对象存储了请求相关的所有数据信息。例如request,session,application,action等.
Struts2采用OGNL工具对ValueStack进行操作。
1)xwork对OGNL进行了部分改造
在xwork中将原来OGNL标准结构中的Root存储区改造成了一个栈结构(CompoundRoot)
当利用"属性"表达式访问时,优先去栈顶对象寻找,没有再去次栈顶寻找。
2)ValueStack结构(OgnlValueStack)
(参考valuestack.jpg)
3)Struts2标签的使用
在JSP中,利用Struts2标签显示数据,需要为标签指定OGNL表达式,标签利用表达式定位ValueStack中的数据,进行相应操作。
a) debug标签:显示valuestack状态
b) iterator标签:循环集合元素
value属性:指定ognl
var属性:指定循环变量,会被存放到 ValueStack的context区域。
status属性:指定循环状态变量,会被存放到ValueStack的context区域.该变量有count属性表示一共循环了多少个元素。
index属性表示当前循环元素的索引。
c) if...else...标签:判断分支
test属性:指定ognl判断表达式
d) property标签:显示数据
value属性:指定ognl表达式
e) date标签:将date数据格式化输出
name属性:指定ognl表达式
format属性:指定日期模板
====================
day03
====================
------------总结------------
1.了解ValueStack结构
2.Struts2标签+OGNL基本法
------------------------------
1)登录-->如何使用session,request
2)控制一页显示几条记录-->Action属性注入
3)资费记录删除-->result组件使用
-------------------------------
1.Action组件的相关使用
1)Action组件的原理
--客户发出action请求给struts控制器
--struts控制器会创建valuestack对象
--struts控制器根据请求创建Action对象
并将Action压入valuestack的root栈顶
(Action线性安全,不用考虑并发问题)
--struts控制器将请求相关request,
session对象放入到valuestack的 context区域
--struts控制器执行Action对象的execute方法处理请求
--struts控制器根据execute结果生成响应信息输出。
--请求处理完毕,销毁valuestack和Action对象。
*2)Action中如何使用session,request
a.利用ActionContext和ServletActionContext工具类
ActionContext返回是Struts框架封装成Map之后的request,session,application.
ServletActionContext返回的是Servlet中使用的request,session,application原有类型。
(使用建议:存值取值建议用Map结构API,如果有特殊需求再采用Servlet原有类型)
3)Action属性注入
4)Action通配符配置
login.action-->LoginAction-->AdminInfoDAO
-->admin_info
----如何将原有HttpSession封装成Map------
public class SessionMap extends AbstractMap{
private HttpSession session;
public SessionMap(HttpSession session){
this.session = session;
}
public void put(Object key,Object val){
session.setAttribute(key,val);
}
public Object get(Object key){
session.getAttribute(key);
}
}
====================
day04
====================
-----------前期课程回顾-------------
1)第一天
理论:Struts2的MVC结构和处理流程
技能:掌握Struts2基本使用
2)第二天
理论:Struts2中ValueStack结构
技能:OGNL基本语法
Struts2常规标签
3)第三天
理论:Action原理,Result原理
技能:Request,Session等对象使用
Action属性注入
dispatcher,redirect,
redirectAction,chain
=========补充EL问题===========
在JSP中,利用EL表达式可以从page,request,session,application范围取值显示。
在Struts2中,利用EL表达式可以page,
request,valuestack(root),
session,application.
原因是Struts2将原有Request对象进行了封装。
public class StrutsRequestWrapper extends HttpServletRequestWrapper{
// 重写
public Object getAttribute(String key){
// 寻找原request信息
Object obj = super.getAttribute(key);
if(obj == null){
// 寻找valuestack信息
obj = valuestack.findValue(key);
// Ognl.getValue(key,context,root);
}
return obj;
}
}
${name} -->request.getAttribute("name")
-->Ognl.getValue("name",context,root)
=========第四天===========
1.任务描述
1)完成登录验证码-->stream Result
2)完成资费添加-->json Result
3)完成资费更新-->Struts2表单标签
2.stream Result组件
主要负责将Action中的一个InputStream类型的属性以字节流方式输出。
验证码功能流程设计:
image.action-->ImageAction-->stream响应------------------------------
练习:大家练习下上午的验证码示例
------------------------------
3.json Result组件
主要负责将Action的属性以json字符串格式输出。
json Result的使用步骤:
a.引入struts2-json-plugin.jar
b.将<package>元素的extends继承
"json-default"
c.<result>使用配置
// 只返回Action中一个属性值
<result type="json">
<param name="root">属性名</param>
</result>
// 返回Action中多个属性值
<result type="json">
<param name="includeProperties">
属性名1,属性名2,属性名3
</param>
</result>
// 返回Action中所有属性值
<result type="json">
</result>
---------------------------------------
资费添加前,检测资费名称是否重复操作。
流程设计:
焦点离开时-->(ajax)-->validFeeName.action
-->ValidFeeNameAction-->FeeDAO
-->json (result)返回一个检测结果
-->ajax回调函数处理
=========练习===========
1.完成资费添加处理
fee_add.action-->FeeAction-->FeeDAO
-->fee_add.jsp
2.完成登录处理
3.扩展要求:完成资费更新,查看处理
====================
day05
====================
1.Struts2表单标签
标签封装了界面显示逻辑,用于简化JSP。
a) textfield
以输入框方式显示属性值.
name属性指定ognl表达式
b) textarea
以文本域方式显示属性值.
name属性指定ognl表达式
c) radio
以一组单选框方式显示,并可以根据属性值决定哪个选项选中。
list属性指定集合ognl,用于生成若干radio选项。
name属性指定ognl,用于决定哪个raido选中。
---------资费更新操作---------
1)把以前数据调出来显示
fee_load.action-->FeeAction-->FeeDAO
-->fee_modi.jsp
2)把修改后的表单数据保存到数据库
fee_update.action-->FeeAction-->FeeDAO
-->fee_modi.jsp(提示成功还是失败)
====================
day06
====================
1
1.拦截器组件
Struts2框架提供了大量的拦截器组件,如果不能满足开发者需要,可以进行自定义。
一般利用拦截器封装一些通用性功能。例如请求参数给action赋值,文件上传,权限检查等。
1)拦截器作用
拦截器可以在Action和Result组件调用之前执行,也可以在Action和Result组件之后执行。
2)拦截器原理
a.所有拦截器组件实现类都必须实现Interceptor接口的interceptor方法。
public class MyInterceptor implements
Interceptor{
public String intercept
(ActionInvocation in){
// 拦截器的前期处理逻辑
in.invoke();// 执行Action和Result
// in.invokeActionOnly();//仅执行Action
// 拦截器的后期处理逻辑
}
}
注意:intercept 方法返回的String,当内容部执行了invoke()方法时,返回值无效。如果没有执行invoke(),返回值有效。控制器会根据该返回值调用一个Result生成响应信息
b.所有拦截器都具有下列注册配置
<package>
<interceptors>
<interceptor name="拦截器名"
class="拦截器实现类"/>
<interceptor name="" class=""/>
</interceptors>
</package>
c.拦截器的使用
--为所有Action指定默认使用配置
<package>
<default-interceptor-ref
name="拦截器名"/>
</package>
--为某一个Action指定使用配置
<action>
<interceptor-ref name="拦截器名"/>
</action>
注意:如果为某个Action指定了拦截器配置,不会再调用指定的默认拦截器.
3)fileUpload内置拦截器的使用
a)fileUpload拦截器功能
用于实现文件上传功能。
首先fileUpload拦截器调用上传组件对请求提交的表单信息进行解析。
然后将解析出的上传文件放置在一个临时目录下。并将该文件对象给Action的File属性赋值。
执行Action和Result组件处理。
最后将临时目录下的上传文件删除。
b)上传示例
注意事项:
--需要引入commons-io.jar)
--form表单method必须为post;enctype必须为multipart/form-data
--Action组件按下面规则接收表单信息
<input type="file" name="xxx">
Action属性如下:
private File xxx;
private String xxxFileName;
private String xxxContentType;
===========
总结\:
===========
----------Struts2课程总结-----------
1)第一部分
理论:Struts2的MVC结构和流程
(参考struts2流程图)
技能:Struts2基本使用
2)第二部分
理论:了解ValueStack结构和OGNL语法
技能:利用Struts2标签显示数据
利用Struts2标签表单标签显示数据
3)第三部分
理论:Action组件原理
技能:Action组件相关应用
--request,session等使用
--Action属性注入
--通配符配置
4)第四部分
理论:了解Result组件的原理
技能:掌握常用的Result组件的使用
--JSP : dispatcher(默认),redirect
--Action : chain,redirectAction
--Stream : stream
--JSON : json
5)第五部分
理论:了解拦截器组件的原理
技能:掌握拦截器组件的使用
--掌握如何自定义一个拦截器
--如何使用fileUpload实现文件上传
目录:
1.为什么学习Struts框架
2.MVC模式在JavaWeb中的应用
3.了解Struts历史
4.HelloWord入门实例
5.项目示例(资费列表显示)
6.OGNL技术的使用
7.OGNL技术在Struts的使用
8.Action组件的相关使用
9.stream Result组件
10.json Result组件
11.Struts2表单标签
12.拦截器组件
========================
====================
day01
====================
梁建全 liangjq@tarena.com.cn
------------------------------------------
1.为什么学习Struts框架
a.Struts框架好处
--简化开发工作量,提高开发效率
--采用了优秀的设计思想(MVC)
b.如何学习Struts框架
先重点掌握框架使用,原理性有余力可以多了解些。
2.MVC模式在JavaWeb中的应用
*a.什么是MVC
MVC思想就是根据组件职责不同,将系统中组件分成以下3个组成部分。
--V视图:负责与用户交互,一种是展示数据,另一种是接收数据。
--M模型:负责业务处理,一种是业务逻辑模型,另一种是数据模型。
--C控制器:负责协调视图部分和模型部分协同工作。
b.为什么使用MVC
企业程序更强调结构灵活,易于扩展和升级。所以广泛选用MVC模式开发。
*c.JavaWeb中如何实现MVC结构
JavaWeb技术主要有:Servlet,JSP,JavaBean,Filter,Listener等
V部分:JSP组件 (cart.jsp)
M部分:JavaBean组件(entity,dao)
C部分:Servlet,Filter组件 (ShoppingCartServlet)
*d.MVC处理流程
--首先浏览器发出请求
--请求进入C控制器
--C控制器调用M模型组件处理
--M模型组件处理后返回处理结果
-- C控制器调用V视图组件生成响应信息
*e.Struts框架的MVC实现
原有ShoppingCart程序,虽然符合MVC结构,但不适合大型项目开发,因为请求一多,ShoppingCartServlet会出现大量的if..else... ,可以进行以下方式的改造
为ShoppingCartServlet配置一个XML文件,该文件定义不同请求和不同Action组件的对应关系,将原有if..else..分支处理用Action组件封装。
**f.Struts框架的处理流程
--浏览器发出struts请求
--请求进入struts控制器
--struts控制器解析xml配置文件
(xml定义了请求和Action对应关系)
--控制器根据不同请求,调用不同的Action
--Action调用DAO处理请求,之后返回结果
--控制器根据结果调用视图组件为用户响应
3.了解Struts历史
Struts框架分成Struts1和Struts2.Struts2和Struts1没有必然联系。Struts2是以WebWork框架核心(xwork)为基础构建起来
*4.Struts基本使用
a.引入struts2核心开发包(5个)
--struts2-core-2.1.8.jar (核心包)
--xwork-core-2.1.6.jar (webwork内核包)
--commons-fileupload-1.2.1.jar (上传包)
--ognl-2.7.3.jar (OGNL表达式工具包)
--freemarker-2.3.15.jar (模板视图工具包)
b.在web.xml中配置下struts控制器
c.根据请求编写Action,JSP
d.在struts.xml定义Action和请求对应关系
5.HelloWord入门实例
welcome.action-->Struts控制器
-->struts.xml-->WelcomeAction
-->welcome.jsp
(Action请求可以是/welcome.action或者/welcome两种写法)
======struts.xml基本配置========
struts.xml放在src根目录下。
a) <struts>根元素,可以包含多个<package>元素
b)<package>元素主要用于将Action分组定义。name属性用于指定包名;extends一般指定为struts-default。struts-default这个包在struts-default.xml中定义,其中包含了struts2运行所需的必要组件。
c)一个<package>元素可以包含多个<action>.<action>主要用于定义请求和Action组件的对应关系。name属性指定请求名;class属性指定Action的包名.类名
d)一个<action>元素可以包含多个<result>.
<result>主要用于定义视图响应。name属性与Action.execute()返回值一致。
=======================
扩展HelloWorld示例
a.隐藏JSP组件
b.从WelcomeAction向Welcome.jsp传值
c.WelcomeAction接收welcome.action请求带过来的表单信息
d.页面跳转可以采用下面配置
<action name="请求名">
<result name="success">
jsp页面
</result>
</action>
如果不指定class属性,会默认调用框架底层的ActionSupport类处理。
6.项目示例(资费列表显示)
a.显示默认主页面
index.action-->struts控制器-->index.html
b.资费列表显示
feeList.action-->struts控制器
-->FeeListAction-->FeeDAO-->COST
-->fee_list.jsp
1)编写COST对应的Entity实体类
2)编写DAO,DBUtil
--引入oracle驱动包
3)编写Action
4)配置Action
5)编写JSP
--引入jstl.jar,standard.jar
==========课后练习==================
1.完成helloworld示例
2.完成资费列表显示示例
====================
day02
====================
------------回顾---------------
1.了解Struts2的MVC实现,及其工作流程
2.掌握Struts2的核心应用
-------------------------------
任务描述:
1)为资费列表添加分页功能
1页:1-2
2页:3-4
3页:5-6
page=1
pageSize=2
int begin = (page-1)*pageSize+1;
int end = page*pageSize;
select * from
(select rownum rn,c.*
from COST c where rownum<=6)
where rn>=5
2)利用Struts2标签+OGNL技术重构资费列表
--------------------------------
1.OGNL技术的使用
1)什么是OGNL
源于ognl.jar工具包
Object Graphics Navigation Language
(对象图导航语言)
主要用于访问对象的数据和方法。
2)OGNL基本原理
OGNL工具主要由3部分构成,具体如下
a.OGNL引擎
负责解析ONGL表达式,定位数据
b.Root根存储区(Object类型)
负责存储要访问的目标对象。
c.Context变量存储区(Map类型)
负责存放多个要访问的目标对象。
*3)OGNL基本语法
a.访问Root区域对象基本语法
--访问简单数据:"属性" 例如"name"
--访问数组或List集合:"属性[0]"
例如"arr[1]"
--访问Map集合:"属性['key']"或"属性.key"
例如"map.two"或"map['two']"
--访问方法:"属性值.方法()",
例如"list.size()"
--访问构造方法:"new 包名.构造方法"
例如"new java.util.Date()"
--访问静态成员:"@包名.类名@成员"
例如"@java.lang.Math@PI"
--创建List对象:"{元素1,元素2}"
--创建Map对象:
"#{key1:value1,key2:value2}"
b.访问Context区域对象基本语法
采用"#Key"开头.
2.OGNL技术在Struts的使用
在Struts2中有一个ValueStack数据对象,该对象存储了请求相关的所有数据信息。例如request,session,application,action等.
Struts2采用OGNL工具对ValueStack进行操作。
1)xwork对OGNL进行了部分改造
在xwork中将原来OGNL标准结构中的Root存储区改造成了一个栈结构(CompoundRoot)
当利用"属性"表达式访问时,优先去栈顶对象寻找,没有再去次栈顶寻找。
2)ValueStack结构(OgnlValueStack)
(参考valuestack.jpg)
3)Struts2标签的使用
在JSP中,利用Struts2标签显示数据,需要为标签指定OGNL表达式,标签利用表达式定位ValueStack中的数据,进行相应操作。
a) debug标签:显示valuestack状态
b) iterator标签:循环集合元素
value属性:指定ognl
var属性:指定循环变量,会被存放到 ValueStack的context区域。
status属性:指定循环状态变量,会被存放到ValueStack的context区域.该变量有count属性表示一共循环了多少个元素。
index属性表示当前循环元素的索引。
c) if...else...标签:判断分支
test属性:指定ognl判断表达式
d) property标签:显示数据
value属性:指定ognl表达式
e) date标签:将date数据格式化输出
name属性:指定ognl表达式
format属性:指定日期模板
====================
day03
====================
------------总结------------
1.了解ValueStack结构
2.Struts2标签+OGNL基本法
------------------------------
1)登录-->如何使用session,request
2)控制一页显示几条记录-->Action属性注入
3)资费记录删除-->result组件使用
-------------------------------
1.Action组件的相关使用
1)Action组件的原理
--客户发出action请求给struts控制器
--struts控制器会创建valuestack对象
--struts控制器根据请求创建Action对象
并将Action压入valuestack的root栈顶
(Action线性安全,不用考虑并发问题)
--struts控制器将请求相关request,
session对象放入到valuestack的 context区域
--struts控制器执行Action对象的execute方法处理请求
--struts控制器根据execute结果生成响应信息输出。
--请求处理完毕,销毁valuestack和Action对象。
*2)Action中如何使用session,request
a.利用ActionContext和ServletActionContext工具类
ActionContext返回是Struts框架封装成Map之后的request,session,application.
ServletActionContext返回的是Servlet中使用的request,session,application原有类型。
(使用建议:存值取值建议用Map结构API,如果有特殊需求再采用Servlet原有类型)
3)Action属性注入
4)Action通配符配置
login.action-->LoginAction-->AdminInfoDAO
-->admin_info
----如何将原有HttpSession封装成Map------
public class SessionMap extends AbstractMap{
private HttpSession session;
public SessionMap(HttpSession session){
this.session = session;
}
public void put(Object key,Object val){
session.setAttribute(key,val);
}
public Object get(Object key){
session.getAttribute(key);
}
}
====================
day04
====================
-----------前期课程回顾-------------
1)第一天
理论:Struts2的MVC结构和处理流程
技能:掌握Struts2基本使用
2)第二天
理论:Struts2中ValueStack结构
技能:OGNL基本语法
Struts2常规标签
3)第三天
理论:Action原理,Result原理
技能:Request,Session等对象使用
Action属性注入
dispatcher,redirect,
redirectAction,chain
=========补充EL问题===========
在JSP中,利用EL表达式可以从page,request,session,application范围取值显示。
在Struts2中,利用EL表达式可以page,
request,valuestack(root),
session,application.
原因是Struts2将原有Request对象进行了封装。
public class StrutsRequestWrapper extends HttpServletRequestWrapper{
// 重写
public Object getAttribute(String key){
// 寻找原request信息
Object obj = super.getAttribute(key);
if(obj == null){
// 寻找valuestack信息
obj = valuestack.findValue(key);
// Ognl.getValue(key,context,root);
}
return obj;
}
}
${name} -->request.getAttribute("name")
-->Ognl.getValue("name",context,root)
=========第四天===========
1.任务描述
1)完成登录验证码-->stream Result
2)完成资费添加-->json Result
3)完成资费更新-->Struts2表单标签
2.stream Result组件
主要负责将Action中的一个InputStream类型的属性以字节流方式输出。
验证码功能流程设计:
image.action-->ImageAction-->stream响应------------------------------
练习:大家练习下上午的验证码示例
------------------------------
3.json Result组件
主要负责将Action的属性以json字符串格式输出。
json Result的使用步骤:
a.引入struts2-json-plugin.jar
b.将<package>元素的extends继承
"json-default"
c.<result>使用配置
// 只返回Action中一个属性值
<result type="json">
<param name="root">属性名</param>
</result>
// 返回Action中多个属性值
<result type="json">
<param name="includeProperties">
属性名1,属性名2,属性名3
</param>
</result>
// 返回Action中所有属性值
<result type="json">
</result>
---------------------------------------
资费添加前,检测资费名称是否重复操作。
流程设计:
焦点离开时-->(ajax)-->validFeeName.action
-->ValidFeeNameAction-->FeeDAO
-->json (result)返回一个检测结果
-->ajax回调函数处理
=========练习===========
1.完成资费添加处理
fee_add.action-->FeeAction-->FeeDAO
-->fee_add.jsp
2.完成登录处理
3.扩展要求:完成资费更新,查看处理
====================
day05
====================
1.Struts2表单标签
标签封装了界面显示逻辑,用于简化JSP。
a) textfield
以输入框方式显示属性值.
name属性指定ognl表达式
b) textarea
以文本域方式显示属性值.
name属性指定ognl表达式
c) radio
以一组单选框方式显示,并可以根据属性值决定哪个选项选中。
list属性指定集合ognl,用于生成若干radio选项。
name属性指定ognl,用于决定哪个raido选中。
---------资费更新操作---------
1)把以前数据调出来显示
fee_load.action-->FeeAction-->FeeDAO
-->fee_modi.jsp
2)把修改后的表单数据保存到数据库
fee_update.action-->FeeAction-->FeeDAO
-->fee_modi.jsp(提示成功还是失败)
====================
day06
====================
1
1.拦截器组件
Struts2框架提供了大量的拦截器组件,如果不能满足开发者需要,可以进行自定义。
一般利用拦截器封装一些通用性功能。例如请求参数给action赋值,文件上传,权限检查等。
1)拦截器作用
拦截器可以在Action和Result组件调用之前执行,也可以在Action和Result组件之后执行。
2)拦截器原理
a.所有拦截器组件实现类都必须实现Interceptor接口的interceptor方法。
public class MyInterceptor implements
Interceptor{
public String intercept
(ActionInvocation in){
// 拦截器的前期处理逻辑
in.invoke();// 执行Action和Result
// in.invokeActionOnly();//仅执行Action
// 拦截器的后期处理逻辑
}
}
注意:intercept 方法返回的String,当内容部执行了invoke()方法时,返回值无效。如果没有执行invoke(),返回值有效。控制器会根据该返回值调用一个Result生成响应信息
b.所有拦截器都具有下列注册配置
<package>
<interceptors>
<interceptor name="拦截器名"
class="拦截器实现类"/>
<interceptor name="" class=""/>
</interceptors>
</package>
c.拦截器的使用
--为所有Action指定默认使用配置
<package>
<default-interceptor-ref
name="拦截器名"/>
</package>
--为某一个Action指定使用配置
<action>
<interceptor-ref name="拦截器名"/>
</action>
注意:如果为某个Action指定了拦截器配置,不会再调用指定的默认拦截器.
3)fileUpload内置拦截器的使用
a)fileUpload拦截器功能
用于实现文件上传功能。
首先fileUpload拦截器调用上传组件对请求提交的表单信息进行解析。
然后将解析出的上传文件放置在一个临时目录下。并将该文件对象给Action的File属性赋值。
执行Action和Result组件处理。
最后将临时目录下的上传文件删除。
b)上传示例
注意事项:
--需要引入commons-io.jar)
--form表单method必须为post;enctype必须为multipart/form-data
--Action组件按下面规则接收表单信息
<input type="file" name="xxx">
Action属性如下:
private File xxx;
private String xxxFileName;
private String xxxContentType;
===========
总结\:
===========
----------Struts2课程总结-----------
1)第一部分
理论:Struts2的MVC结构和流程
(参考struts2流程图)
技能:Struts2基本使用
2)第二部分
理论:了解ValueStack结构和OGNL语法
技能:利用Struts2标签显示数据
利用Struts2标签表单标签显示数据
3)第三部分
理论:Action组件原理
技能:Action组件相关应用
--request,session等使用
--Action属性注入
--通配符配置
4)第四部分
理论:了解Result组件的原理
技能:掌握常用的Result组件的使用
--JSP : dispatcher(默认),redirect
--Action : chain,redirectAction
--Stream : stream
--JSON : json
5)第五部分
理论:了解拦截器组件的原理
技能:掌握拦截器组件的使用
--掌握如何自定义一个拦截器
--如何使用fileUpload实现文件上传
相关文章推荐
- struts2操作
- ubuntu eclipse 相关设置
- ubuntu12.04 相关设置
- struts2标签
- java学习之路----内存的分析
- JAVA笔记【20131208】
- Java基础之创建窗口——使用卡片布局管理器(TryCardLayout)
- ubuntu 下java环境变量设置
- 轻松使用super关键字
- struts2实现上传文件
- struts2实现验证码
- Java基础之创建窗口——使用边界布局管理器(TryBorderLayout)
- Java 多线程与并发编程专题
- Java 集合类图
- spring-framework-3.2.1.jar
- struts2拦截器
- MyEclipse取消验证Js的两种途径.
- struts配置xml
- spring jar包 官网下载方法
- eclipse内存溢出