Java.Web学习笔记 Struts2
来源:互联网 发布:linux 判断进程假死 编辑:程序博客网 时间:2024/06/06 01:26
Struts2
1. Struts2是起源于Web Work框架另一个MVC框架,不是起源于Struts1的,两个没有直接关系。
2. Struts2的Action中就有JSP表单的属性,然后要设置相应的getter和setter属性,同样Action中有execute但是不需要用request和response传参了。
3. Struts2的配置文件也有很大的不同,多了一个包名,然后用标签替代了struts1的标签。如果是全局的标签配置那么任何页面都可以使用这个页面。
4. Struts2的标签支持主题使用的是
5. 配置流程
(1) 新建一个web project
(2) 导入支持包
(3) 自己新建Action继承ActionSupport
(4) 定义相关的属性
(5) 然后自己重写execute()方法
(6) 之后再struts.xml配置一下package,也配置一下
(7) 自己写几个JSP文件作为显示
(8) 配置一下web.xml
6. 工作流程
- 注意到最后工作流程会丢弃该Action实例,这说明了Struts2是线程安全的,每次都会新生成一个实例
配置Struts2 - 程序的入口是FilterDispatcher,这个东西能够截获所有的URI,如果URI以.action结尾那么Struts2会去查找对应的Action或者JSP。如果URI包含”/struts/”那么Struts2会返回它集成的资源,例如
http://localhost:8080/struts2/struts/xhtml/styles.css这个文件并不存在,而是位于Struts2的jar包中,所以配置的时候要把所有的URI都转到Filter中,而不仅仅是.action结尾的URI - Struts2的配置文件,常用的有web.xml, struts.properties, struts.xml等
在web.xml配置Struts2的分发器,在struts.xml配置Struts2的Action,在struts.properties里配置struts2的一些属性,比如Struts2后缀,上传文件大小,上传文件夹等。 - 配置package,Struts2的Action、JSP等都配置在中,如果子package继承了父package的东西,那么可以引用父package中所有的资源。也可以配置namespace,如果配置了namespace那么访问的时候就可以加上namespace。
Action - 自定义的Action一般直接继承ActionSupport类,定义变量,覆盖execute()方法,变量的值会被Struts2的setter方法自动赋值,直接使用就可以了。返回值可以在struts.xml中的标签配置。
- 也可自己定义一个Action接口里面只有一个execute()方法,然后就是预置结果名称。之后自己写个类继承这个Action然后定义属性
- 也可以自己直接在POJO上写一个public String execute()方法,这样的话可以不予Struts2发生耦合,代码不依赖于Struts2的类库
- 执行非默认方法可以通过URL执行使用action!method.action的URL形式其中action是struts.xml中配置的Action名字,method是Action的方法名。
- 也可以将执行方法配置到Action,这时候Action名称可以随意指定,比如
这样的话那就可以通过loginPerson.action访问login()方法了。 - 还可以直接用通配符配置这个方法
/{1}.jsp
Struts2的零配置 - 不通过struts.xml配置,而是通过@Annotation配置
- 实例
AnnotationAction.java
@Namespace(value=”/test”) //命名空间
@Results( { //结果集
@Result(name=”success”,value=”/success.jsp”), //单个结果
@Result(name=”fail”,value=”/fail.jsp”)
} )
通过默认访问名称访问,即去掉Action且类名首字母小写 /struts2/annotation.action方式访问。如果有namespace那就要 /struts2/test/annotation.action访问
3. 零配置是必须在Filter中指定Action包所在位置,参数actionPackages指定被@注解标注的Action所在的Package。
4. 而且POJO在struts2的里面不一定需要用new显示创建一个POJO对象,可以只是声明,如果没有对象,会在运行时通过反射实例化一个对象,因此不会抛出NullPointerException。
5. 通配符配置Action,用*配置,{1}表示第一个通配符{2}表示第二个通配符
6. 使用Struts2的标签显示URL,<a href=”<struts:url action=”initAddBook”/>
“/> 这时候会自动把.action加到后面,如果在struts.properties中修改了.action后缀,那该标签也会自动添加新的后缀。
数据类转换器
1. 如果觉得默认的数据类型转换器不能满足需求,可以自定义数据类型转换器。
2. 一般直接继承DefaultTypeConverter类,并且实现convertValue()方法就可以了。
3. convertValue(Map context, Object value, Class toType)方法有三个参数,value是待转换的数据,toType是要转换的类型。注意value是request.getParameterValues(String name)返回的String[]类型对象
4. 需要把转换器配置到xwork-conversion.properties中,在这里配置的话,key是要转换的类型,value是你这个转换器类,把这个资源放到/WEB-INF/classes/下。这是全局的
5. 还可以在struts.xml下只为某个Action配置转换器
<action name=”xxx” class=”xxx” converter=”xxxx”></action>
获取request、response
1. 利用ServletActionContext类来维护Servlet对象,它是利用ThreadLocal来维护不同线程的Servlet对象。只要用静态方法就可以获得当前用户、当前进程的request、response
2. 利用相关的Aware接口,Struts在实例化一个Action实例的时候,如果发现它实现了相应的Aware接口,会把相应的资源通过Aware接口方法注射进去,这种方法也叫注射方式(IoC方式)
3. Application,request,response, session对应的Aware接口分别是ServletContextAware,ServletRequestAware,ServletResponseAware,SessionAware,对应的方法就是setServletxxx()方法
使用Validator检验数据
1. 使用XML配置数据校验Validator,使用XML配置时,需要在Action类所在的package内添加一个XML文件,文件名格式是Action类名-validation.xml或者Action类名-Action别名-validation.xml,而且支持校验的Action必须实现Validateable接口,一般继承ActionSupport就可以了。
2. 配置客户端的Validator,也可以使用JS进行校验。
再讲JSP的标签添加validatr=”true”属性就可以了。
3. 使用@Java注解配置Validator
@Validations( requiredStrings={ @RequiredStringValidator(), …}dateRangeFields={ @DateRangeFieldValidator(), …} …)
- 利用注解Validator时候,如果某个方法不想被这样校验,那么就使用@SkipValidation
Struts 2.x标签 - Struts2标签和EL表达式,一开始是支持的从Struts2.0.11开始就不支持EL表达式
- Struts2标签都是使用同一的前缀,都在Struts-tags.tld文件中。
OGNL语言
(1) OGNL全称是Object-Graph Navigation Language
(2) 优势
可以访问对象的方法,例如list.size();
能够访问静态属性和方法,在类名前和方法前加上@。比如@java.lang.Math@PI,@java.lang.String@format(‘foo%s’,’bar’);
支持赋值操作和表达式串联:赋值#value=5;
访问OGNL上下文(OGNL context)和ActionContext(也就是所有的Servlet资源)
操作集合类对象。
(3) “#”声明OGNL表达式 能够访问OGNL上下文与ActionContext资源
用于过滤或者筛选集合 books.{?#this.price<20}
- 用于构造Map,如#{‘foo1’:’var1’ , ’foo2’:’var2’}
(4) 用%显示声明OGNL表达式
%表示某一个字符串为OGNL表达式,这个会被执行
<struts:label label=”#request.account”></struts:label> //输出#request.account字符串<struts:label label=”%{#request.account}”></struts:label> //输出request的account属性
(5)
在struts.xml中
ListPhotos.action?albumId=${albumId}
(6) 控制标签if、elseif、else标签控制流程
(7) Append标签链接多个List,用于把多个list追加在原来的list后面连成一个list
(8) Generator标签将字符转化为List
(9) Iterator标签遍历集合
(10) Merge标签取集合的并集
(11) Subset标签过滤集合元素
(12) Action标签包含Action页面
(13) Struts:bean用于引用某个Java Bean
(14) Struts:date用于输出日期格式
(15) Struts2中的任何标签都可以使用%{getText(‘resource.key’)}
(16) z这个可以把另一个JSP页面的执行结果包含进来。相当于JSP中的
(17) 标签传递参数
(18) 标签设置变量的值
(19) Property标签输出变量的值
表单UI标签
(1) form标签输出表单,标签不仅生成标记还会生成table标记,
, ,等UI标签也会生成标记,所以JSP中不需要写任何布局代码
(2) textfield,textarea,file,checkbox,radio标签,会生产HTML里的标签,同form一样,这些标签也会根据当前主题生产布局代码。
(3) select, autocomplete标签下拉框
select标签是标准的下拉框,生成的是HTML里的标签
autocomplete标签具有自动完成功能的下拉框,必须使用Ajax主题,因为用到DOJO的JavaScript库
(4) checkboxlist标签多选框组
(5) combobox标签复合框
(6) datetimepicker标签日期选择器要使用DOJO标签
(7) doubleselect标签联动选择框
(8) optiontransferselect两边各有一个列表
(9) optgroup标签选项组
非表单UI标签
(1) debug标签输出调试信息
(2) fielderror,actionerror,actionmessage标签错误信息
fielderror显示数据校验错误信息
actionerror显示Action中的错误信息
actionmessage标签用于显示Action中的消息
(3) div,submit,a标签实现无刷新获取数据
(4) 无刷新实现登录,注销,主要使用Ajax
(5) tabbedPanel标签页,就是实现了标签页
(6) tree标签输出树DOJO标签
<sx:tree><sx:treenode ….> <sx:treenode/> </sx:treenode></sx:tree>
(7) tree标签动态加载
Struts 2.x拦截器
1. 拦截器类似于Filter,在执行Action方法前执行
2. Timer计时
3. Token防止重复提交拦截器
4. execAndWait执行等待拦截器
5. 自定义权限验证拦截器,使用还有标签设置自己的拦截器
Struts2文件上传
1. 要获取文件的原始名称,还需要定义一个String类型的属性,属性名必须是xxxFileName,其中xxx为File属性的名称。
2. 如果要获取改文件的原始MIME类型,还需要定义一个xxxContentType,其中xxx也是File属性的名称。MIME类型是指文件内容类型
3. 还可以使用默认的fileUpload拦截器指定参数
- Java.Web学习笔记 Struts2
- Java Web学习笔记(七)struts2
- Java web 学习笔记
- java web 学习笔记
- Java Web学习笔记
- java web学习笔记
- java web学习笔记
- java WEB学习笔记
- Java Web学习笔记
- Java web学习笔记
- java web 学习笔记
- Java Web学习笔记
- Struts2 学习笔记 09 访问Web元素
- web学习笔记23-Struts2简介,配置
- web学习笔记24-Struts2结果视图
- Java Web学习笔记(2)——一个简单的Struts2例子
- java-web开发 之struts2.0学习
- !!java web学习笔记(一到五)
- 2016多校联赛6H (hdu5800) To My Girlfriend
- 微信红包随机算法初探
- android studio UI 通过material palette配置颜色
- 没事别想不开去创业公司,创业时常是一个人的夜路,胆小者勿入。
- 使用tortoiseGit在github上协同开发项目
- Java.Web学习笔记 Struts2
- 重新组织函数(重构手法一)
- HDU1532 Drainage Ditches 网络流模板
- 【排序】插入排序,希尔排序,选择排序,冒泡排序,堆排序详解及稳定性分析
- Jinja模板继承实现Html页面划分
- 利用nfs调试rootfs
- ios开发中使用通知中心传值
- 大整数相加,
- python的一些非常基础的但不影响使用的事