Web框架梳理:第一章:Struts2入门、传值、分页、对象、值栈、OGNL、响应方式、标签、拦截器
2016-12-01 08:53
471 查看
一、Struts2框架:
是web Mvc框架
基于Web:B/S模式。
1.什么是MVC:
M:Model Service(业务逻辑的(加工的
运算的
处理的)) Dao(数据访问层/数据持久层)
主要处理业务逻辑的.
C: Controller 控制器 Servlet
具体代码:接受页面数据
调用业务逻辑(Service
或者Dao)
页面跳转(转发 重定向)
调度
协调
指挥的
命令的 .
V:View
视图 .jsp .html json({"id":1001,"name":"张三丰"}) freemarket(模板)
jfreechart(图表)
展现 呈现
交互.
false
V(视图login.jsp)<------>发出请求-----控制器(Action/Servlet)
<---------->调用业务逻辑------->(Service/Dao)-----访问数据库------DB
|
返回业务逻辑结果
|
|
|
页面跳转(true
页面调度)
|
|
main.jsp
1. struts2前世今生(了解):
struts1: apache
扩展很差
技术理念不是很超前
webwork:
核心不变
边缘的内容
修改了
struts2=webwork的技术核心+struts1市场
apache
struts 2.3.4.1:开发包
2. Struts2
的开发
1)引入jar包
struts-core.jar
xwork-core.jar包
ognl.jar包
freemarker.jar包
commons-fileupload.jar包
commons-io.jar包
javassist.jar: 动态改变字节码文件jar包
commons-lang.jar: java.lang的扩展包
2)在web.xml中配置核心控制器(Servlet/Filter)
配置核心控制器: StrutsPrepareAndExecuteFilter主要作用是:查看请求url是否符合,
维护struts.xml配置文件
3)编写Action类
自定义方法
4)在src下 创建struts.xml。
配置请求url和Action类的对应关系
<actionname="url" class="action.HelloAction">
3.struts2的执行流程:
/hello---->核心控制器(检查url)---->struts.xml------->HelloAction------>sayHello------>"success"------>hello.jsp
4.struts2的在Eclipse中自动提示:dtd文件下载:
下载struts-core.jar
解压缩,得到struts-2.3.dtd文件
window---preferces首选项-----搜索xml-----xml catelog--add
1.Struts2 jsp到action传值问题:
1)jsp: <input name="username"> (*****)
Action: private String username;
set/get;
2)将页面很多值 封装的 传递给一个对象 (*****)
jsp:
对象名.属性名
<input name="u.username"/>
Action:
private User u;
set/get;
3)第三种传值(了解):
jsp:
<input name="username"/>
Action:
RegistAction implements ModelDriven{
User u = new User();
getModel(){
return u;
}
}
注意:
在jsp页面获取值的时候用${username}.
2.Struts的 crud:
1.Post下的分页:
<ahref="javascript:;" onclick="page(${pageNo+1})" >下一页
<form>
<!--保存页号的值-->
<input type="hidden" name="pageNo"/>
2.在struts2中怎么使用request,session,application等对象?
框架将request,session,application对象封装成Map类型
1)ActionContext
Map session =ActionContext.getContext().getSession();
Map request =(Map)ActionContext.getContext().get("request");
Map application =ActionContext.getContext().getApplication();
2)ServletActionContext
获取的原始类型 request,session,application对象封装成Map类型
注意:struts2不建议这么用
request:HttpServletRequest
session: HttpSession
application: ServletContext
3)implements RequestAware SessionAware ApplicationAware
setXxxxx();
建议用这种方式获取request等对象.
3.ValueStack(*****)
值栈结构
struts2内存的数据结构
1)ValueStack总共包含三部分区域,
第一部分:ognl引擎 主要作用是执行ognl表达式的
如果表达式没有加#
就去root区查找对应值.
如果表达式加了#
就去Context区去查找对应key的值
第二部分:Root区
栈结构
先进后出
主要用来action对象,
而且会将当前action对象 放在栈的栈顶位置.
第三部分:Context区 Map结构
key-value键值对
主要用来存放request,session,application对象.
4.OGNL(对象图导航语言)
通过提供的对象
获取对象中的属性的值.
类似el表达式,获取对象的值
,
el表达式独立使用的.
Ognl表达式不能独立使用,结合struts2标签使用的
Ognl表达式远远比el表达式强大
ognl的表达式的写法:
ognl其实就是一个有规则的字符串
1.Struts2
标签
1)控制标签
<s:property value="ognl">
<s:date name="ognl"/>
<s:iftest="ognl
必须是boolean值">
<s:iteratorvalue="" var="" status="">
<s:set value="" var="">
2)UI标签
最终转换成了原始form标签:
可以将action的值传递给标签.
<s:form>
<s:textfiledname="name">
<s:password>
<s:radio>
<s:select>
<s:doubleselect>
<s:checkbox>
<s:checkboxList>
<s:textarea>
<sx:datetimepickername="">
日历挂件的使用方法:
1)
引入struts-dojo-plugin.jar
2)
引入dojo的标签库路径
<%@ taglib taglib uri="/struts-dojo-tags"prefix="sx"%>
3)<sx:head parseContent="true">
4)<sx:datetimepickername="">
扩展:
ckeditor:
文本域编辑软件插件
1)
在WEBroot下引入ckeditor文件
2) <script type="text/javascript"src="ckeditor/ckeditor.js"></script>
3) cssClass="ckeditor"
dojo:前端独立的技术 ui,
异步技术
交互技术 jquery(jquery-ui,)
struts-dojo-plugin.jar
2.
几种响应方式:
dispatcher:转发到jsp
action中的属性:
传递到jsp
redirect :
重定向 jsp
action中的属性 jsp接受不到action属性的值
redirectAction:
重定向到别的action
jsp ---- action01 -------action02
chain: 转发到别的action
实际用的不是很多
jsp ---- action01 -------action02
stream:
流响应
响应回去的是流 格式
下载
生成验证码(特殊的下载
只不过是不需要保存这些提示等)
json响应:
一般结合异步请求:
响应回去的是形如:{"key":"value","key2":"value2",.....}
[{"key":"value","key2":"value2",.....},{"key":"value","key2":"value2",.....}]
{"key":["北京","北京大学"]}
这种格式的字符串.
验证用户输入的验证码是否正确.
文本框自动补全提示:
a.引入struts-json-plugin.jar
b.<package extends="json-default">
c.<result type="json">
<!--什么不写
默认会将action类的所有属性
都以json格式响应-->
<!--root: 将指定的属性的值 以json响应-->
<paramname="root">flag</param>
<!--includeProperties:将指定的属性名 以及属性值都以json格式响应
-->
<paramname="includeProperties">flag</param>
jfreechart图表响应(扩展):
响应回去的是图表(饼状图 ,柱状图,曲线折线图等)
统计分析的功能:jfreechart highchart
1.Struts中拦截器(Interceptor)
作用1:将很多Action中公共的逻辑代码抽取出来,形成一个拦截器类,
然后通过配置的形式作用到所需要的action上.
作用2:根据请求url的访问路径,从而决定这个访问路径是否可以继续访问action.
注意:struts2默认提供了很多内置的拦截器.
发出请求-------核心控制器------拦截器1----拦截器2------ Action(execute)-----result(dispacher/redirectAction/json/chart/stream/chain/freemarker).
发出请求-------核心控制器------拦截器1----拦截器2-----result(dispacher).
1)自定义拦截器
自己编写拦截器类.
a.继承AbstractInterceptor抽象类
b.将拦截器的逻辑代码 重写在interceptor方法
c.
在struts.xml中声明并且配置拦截器.
<interceptors>
<interceptor name="拦截器的名字" class="全类名">
</interceptors>
<action>
<interceptor-ref name="拦截器的名字">
<interceptor-ref name="defaultStack">
</action>
需求:计算当前所有的action的方法的执行花费的时间.
session验证:
没有登录 不让直接操作main.jsp
跳转到login.jsp,
如果登录了 就可以直接访问main.jsp.
2)内置拦截器
拦截器类不需要自己编写.
例如::fileUpload:
上传拦截器
控制上传的大小 和类型
阻止表单重复提交(token):
当用户发出请求后,
刷新页面,发出新的请求给予阻止.
将上传失败后的提示信息 国际化成我们中国语言文字.
国际化: i18n
将一个软件中的语言文字 国际化成
对应国家的语言文字.
是web Mvc框架
基于Web:B/S模式。
1.什么是MVC:
M:Model Service(业务逻辑的(加工的
运算的
处理的)) Dao(数据访问层/数据持久层)
主要处理业务逻辑的.
C: Controller 控制器 Servlet
具体代码:接受页面数据
调用业务逻辑(Service
或者Dao)
页面跳转(转发 重定向)
调度
协调
指挥的
命令的 .
V:View
视图 .jsp .html json({"id":1001,"name":"张三丰"}) freemarket(模板)
jfreechart(图表)
展现 呈现
交互.
false
V(视图login.jsp)<------>发出请求-----控制器(Action/Servlet)
<---------->调用业务逻辑------->(Service/Dao)-----访问数据库------DB
|
返回业务逻辑结果
|
|
|
页面跳转(true
页面调度)
|
|
main.jsp
1. struts2前世今生(了解):
struts1: apache
扩展很差
技术理念不是很超前
webwork:
核心不变
边缘的内容
修改了
struts2=webwork的技术核心+struts1市场
apache
struts 2.3.4.1:开发包
2. Struts2
的开发
1)引入jar包
struts-core.jar
xwork-core.jar包
ognl.jar包
freemarker.jar包
commons-fileupload.jar包
commons-io.jar包
javassist.jar: 动态改变字节码文件jar包
commons-lang.jar: java.lang的扩展包
2)在web.xml中配置核心控制器(Servlet/Filter)
配置核心控制器: StrutsPrepareAndExecuteFilter主要作用是:查看请求url是否符合,
维护struts.xml配置文件
3)编写Action类
自定义方法
4)在src下 创建struts.xml。
配置请求url和Action类的对应关系
<actionname="url" class="action.HelloAction">
3.struts2的执行流程:
/hello---->核心控制器(检查url)---->struts.xml------->HelloAction------>sayHello------>"success"------>hello.jsp
4.struts2的在Eclipse中自动提示:dtd文件下载:
下载struts-core.jar
解压缩,得到struts-2.3.dtd文件
window---preferces首选项-----搜索xml-----xml catelog--add
1.Struts2 jsp到action传值问题:
1)jsp: <input name="username"> (*****)
Action: private String username;
set/get;
2)将页面很多值 封装的 传递给一个对象 (*****)
jsp:
对象名.属性名
<input name="u.username"/>
Action:
private User u;
set/get;
3)第三种传值(了解):
jsp:
<input name="username"/>
Action:
RegistAction implements ModelDriven{
User u = new User();
getModel(){
return u;
}
}
注意:
在jsp页面获取值的时候用${username}.
2.Struts的 crud:
1.Post下的分页:
<ahref="javascript:;" onclick="page(${pageNo+1})" >下一页
<form>
<!--保存页号的值-->
<input type="hidden" name="pageNo"/>
2.在struts2中怎么使用request,session,application等对象?
框架将request,session,application对象封装成Map类型
1)ActionContext
Map session =ActionContext.getContext().getSession();
Map request =(Map)ActionContext.getContext().get("request");
Map application =ActionContext.getContext().getApplication();
2)ServletActionContext
获取的原始类型 request,session,application对象封装成Map类型
注意:struts2不建议这么用
request:HttpServletRequest
session: HttpSession
application: ServletContext
3)implements RequestAware SessionAware ApplicationAware
setXxxxx();
建议用这种方式获取request等对象.
3.ValueStack(*****)
值栈结构
struts2内存的数据结构
1)ValueStack总共包含三部分区域,
第一部分:ognl引擎 主要作用是执行ognl表达式的
如果表达式没有加#
就去root区查找对应值.
如果表达式加了#
就去Context区去查找对应key的值
第二部分:Root区
栈结构
先进后出
主要用来action对象,
而且会将当前action对象 放在栈的栈顶位置.
第三部分:Context区 Map结构
key-value键值对
主要用来存放request,session,application对象.
4.OGNL(对象图导航语言)
通过提供的对象
获取对象中的属性的值.
类似el表达式,获取对象的值
,
el表达式独立使用的.
Ognl表达式不能独立使用,结合struts2标签使用的
Ognl表达式远远比el表达式强大
ognl的表达式的写法:
ognl其实就是一个有规则的字符串
1.Struts2
标签
1)控制标签
<s:property value="ognl">
<s:date name="ognl"/>
<s:iftest="ognl
必须是boolean值">
<s:iteratorvalue="" var="" status="">
<s:set value="" var="">
2)UI标签
最终转换成了原始form标签:
可以将action的值传递给标签.
<s:form>
<s:textfiledname="name">
<s:password>
<s:radio>
<s:select>
<s:doubleselect>
<s:checkbox>
<s:checkboxList>
<s:textarea>
<sx:datetimepickername="">
日历挂件的使用方法:
1)
引入struts-dojo-plugin.jar
2)
引入dojo的标签库路径
<%@ taglib taglib uri="/struts-dojo-tags"prefix="sx"%>
3)<sx:head parseContent="true">
4)<sx:datetimepickername="">
扩展:
ckeditor:
文本域编辑软件插件
1)
在WEBroot下引入ckeditor文件
2) <script type="text/javascript"src="ckeditor/ckeditor.js"></script>
3) cssClass="ckeditor"
dojo:前端独立的技术 ui,
异步技术
交互技术 jquery(jquery-ui,)
struts-dojo-plugin.jar
2.
几种响应方式:
dispatcher:转发到jsp
action中的属性:
传递到jsp
redirect :
重定向 jsp
action中的属性 jsp接受不到action属性的值
redirectAction:
重定向到别的action
jsp ---- action01 -------action02
chain: 转发到别的action
实际用的不是很多
jsp ---- action01 -------action02
stream:
流响应
响应回去的是流 格式
下载
生成验证码(特殊的下载
只不过是不需要保存这些提示等)
json响应:
一般结合异步请求:
响应回去的是形如:{"key":"value","key2":"value2",.....}
[{"key":"value","key2":"value2",.....},{"key":"value","key2":"value2",.....}]
{"key":["北京","北京大学"]}
这种格式的字符串.
验证用户输入的验证码是否正确.
文本框自动补全提示:
a.引入struts-json-plugin.jar
b.<package extends="json-default">
c.<result type="json">
<!--什么不写
默认会将action类的所有属性
都以json格式响应-->
<!--root: 将指定的属性的值 以json响应-->
<paramname="root">flag</param>
<!--includeProperties:将指定的属性名 以及属性值都以json格式响应
-->
<paramname="includeProperties">flag</param>
jfreechart图表响应(扩展):
响应回去的是图表(饼状图 ,柱状图,曲线折线图等)
统计分析的功能:jfreechart highchart
1.Struts中拦截器(Interceptor)
作用1:将很多Action中公共的逻辑代码抽取出来,形成一个拦截器类,
然后通过配置的形式作用到所需要的action上.
作用2:根据请求url的访问路径,从而决定这个访问路径是否可以继续访问action.
注意:struts2默认提供了很多内置的拦截器.
发出请求-------核心控制器------拦截器1----拦截器2------ Action(execute)-----result(dispacher/redirectAction/json/chart/stream/chain/freemarker).
发出请求-------核心控制器------拦截器1----拦截器2-----result(dispacher).
1)自定义拦截器
自己编写拦截器类.
a.继承AbstractInterceptor抽象类
b.将拦截器的逻辑代码 重写在interceptor方法
c.
在struts.xml中声明并且配置拦截器.
<interceptors>
<interceptor name="拦截器的名字" class="全类名">
</interceptors>
<action>
<interceptor-ref name="拦截器的名字">
<interceptor-ref name="defaultStack">
</action>
需求:计算当前所有的action的方法的执行花费的时间.
session验证:
没有登录 不让直接操作main.jsp
跳转到login.jsp,
如果登录了 就可以直接访问main.jsp.
2)内置拦截器
拦截器类不需要自己编写.
例如::fileUpload:
上传拦截器
控制上传的大小 和类型
阻止表单重复提交(token):
当用户发出请求后,
刷新页面,发出新的请求给予阻止.
将上传失败后的提示信息 国际化成我们中国语言文字.
国际化: i18n
将一个软件中的语言文字 国际化成
对应国家的语言文字.
相关文章推荐
- Struts2之OGNL表达式与值栈对象及常用标签的使用
- 框架 day29 Struts2-上传,下载,OGNL与Struts2的结合(值栈与ActionContext),Struts2标签,Token机制
- Struts2 入门 四(Struts 获得 web元素的几种方式 ).
- Struts2标签: 三种给<s:a>,<a>标签传值的方式
- Struts2获取web对象的4种方式
- Web框架梳理:第三章:Mybatis入门、Mybatis代理开发、log4j:日志管理工具
- 【JavaWeb-17】国际化、自定义拦截器、struts2文件上传与下载、OGNL、contextMap
- JAVA_WEB Struts2学习:Struts2解耦、耦合方式获取request、session、aplication对象
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- Struts2获取web对象的4种方式
- S5.1_Struts2_AccessWebElements action访问web对象的4种方式
- Struts2 Action访问Web对象的四种方式
- Struts2标签: 三种给<s:a>,<a>标签传值的方式
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
- Struts2基础之七点五:补充action用动态方式给jsp传参(写web对象)
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- Struts2学习笔记(七):OGNL之<s:property>标签访问值栈(value Stack)对象属性
- Struts2 入门3:Ognl表达式语言与struts标签
- Struts2标签: 三种给<s:a>,<a>标签传值的方式
- Struts2自学入门(六)——OGNL数据标签和控制标签