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. 工作流程

  1. 注意到最后工作流程会丢弃该Action实例,这说明了Struts2是线程安全的,每次都会新生成一个实例
    配置Struts2
  2. 程序的入口是FilterDispatcher,这个东西能够截获所有的URI,如果URI以.action结尾那么Struts2会去查找对应的Action或者JSP。如果URI包含”/struts/”那么Struts2会返回它集成的资源,例如
    http://localhost:8080/struts2/struts/xhtml/styles.css这个文件并不存在,而是位于Struts2的jar包中,所以配置的时候要把所有的URI都转到Filter中,而不仅仅是.action结尾的URI
  3. Struts2的配置文件,常用的有web.xml, struts.properties, struts.xml等
    在web.xml配置Struts2的分发器,在struts.xml配置Struts2的Action,在struts.properties里配置struts2的一些属性,比如Struts2后缀,上传文件大小,上传文件夹等。
  4. 配置package,Struts2的Action、JSP等都配置在中,如果子package继承了父package的东西,那么可以引用父package中所有的资源。也可以配置namespace,如果配置了namespace那么访问的时候就可以加上namespace。
    Action
  5. 自定义的Action一般直接继承ActionSupport类,定义变量,覆盖execute()方法,变量的值会被Struts2的setter方法自动赋值,直接使用就可以了。返回值可以在struts.xml中的标签配置。
  6. 也可自己定义一个Action接口里面只有一个execute()方法,然后就是预置结果名称。之后自己写个类继承这个Action然后定义属性
  7. 也可以自己直接在POJO上写一个public String execute()方法,这样的话可以不予Struts2发生耦合,代码不依赖于Struts2的类库
  8. 执行非默认方法可以通过URL执行使用action!method.action的URL形式其中action是struts.xml中配置的Action名字,method是Action的方法名。
  9. 也可以将执行方法配置到Action,这时候Action名称可以随意指定,比如

    这样的话那就可以通过loginPerson.action访问login()方法了。
  10. 还可以直接用通配符配置这个方法

    /{1}.jsp

    Struts2的零配置
  11. 不通过struts.xml配置,而是通过@Annotation配置
  12. 实例
    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(),    …}        …)
  1. 利用注解Validator时候,如果某个方法不想被这样校验,那么就使用@SkipValidation
    Struts 2.x标签
  2. Struts2标签和EL表达式,一开始是支持的从Struts2.0.11开始就不支持EL表达式
  3. 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表达式
  4. 能够访问OGNL上下文与ActionContext资源

  5. 用于过滤或者筛选集合 books.{?#this.price<20}

  6. 用于构造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) OGNLstruts.xml.propertiesValidation.require={getText(fileName)} is required
在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拦截器指定参数

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 充电小米note2手机闪烁怎么办 小米6x上网慢怎么办 小米5数据上网慢怎么办 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办 百度网盘容量不够怎么办 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办