晒一下,我以前struts2学习笔记

struts2 拦截器 配置示例
<struts>
 <package name="testInterceptor" extends="struts-default">
  <!-- 所有的拦截器与拦截器栈都定义在此元素下 -->
  <interceptors>
   <!-- 定义一个拦截器 -->
   <interceptor .../>
   <!-- 定义一个拦截器栈 -->
   <interceptor-stack ....>
  </interceptors>
  <!-- 为此配置一个默认拦截器或拦截器栈 -->
  <default-interceptor-ref name="拦截器(栈)的名字"/>
  <!-- Action 可以有多个-->
  <action ....../>
 </package>
</struts>

自定义拦截器
struts2.0提供一个Interceptor 接口,
public interface Interceptor extends Serializable{
 void destory();
 void init();
 String intercept(ActionInvocation invocation) throws Exception;
}
开发者只需要直接或间接实现这个接口即可
AbstractInterceptor 抽象类
///
MethodFilterInterceptor 重写AbstractInterceptor 抽象类  ,提供doInterceptor(ActionInvocation invocation)抽像方法
提供拦截方法的过滤
setExcludeMethods(String excludeMethods);设置不需要过滤的方法,所有列出的方法都不会被拦截
setIncludeMethods(String includeMethods);设置需要过滤的方法,所有列出的方法都会被过滤
<interceptor-ref name="methodInterceptor">
  <param name="excludeMethods">exectue1,execute2,exectue3</param><!-- 不拦截  -->
  <param name="includeMethods">exectue3,checkLogin</param><!-- 拦截 -->
  <!--如果上面两个都进行配置,如exectue3 则exectue3会进行拦截 -->
</interceptor-ref>

///拦截结果监听器
public class MethodInterceptor extends MethodFilterInterceptor

ai.addPreResultListener(new MyPreResultListener());
  System.out.println("方法执行之前....");
  String result =  ai.invoke();
  System.out.println("方法执行之后....");
  return result;
  
///
拦截器的拦截顺序
 配置在前面的拦截器,在被拦截方法之前的拦截动作,将会先对用户的请求起作用;
 如果是被拦截方法之后的拦截动作,则会(后)对用户用户的请求起作用
 
 上面的意思如下
 
 配置文件拦截器顺序如下:
 拦截器1
 拦截器2
 拦截器3
 
 执行拦截   则是
  拦截器1 执行
  拦截器2 执行
  拦截器3 执行
  拦截。。。。执行。。。。
  拦截器3 执行
  拦截器2 执行
  拦截器1 执行
   
//覆盖拦截器中的参数
<param name="name">新值</param>
或者
<param name="first.name">新值</param> first 是一个拦截器

 

实现ACTION控制类,由于Struts2.0采用了低侵入式设计,所以Struts2.0r Action可以不用继承或实现任何类或接口
本身更像一个普通的POJO,代码利用性好。
但Strust2.0提供了一个Action接口和一个ActionSupport类,为了简化开发,通常会继承或实现接口

struts.xml
name 客户端发送请求的地址映射名称
class 指定进行业务逻辑处理的ACTION的名称
method 指定进行业务逻辑处理的ACTION中的方法名称
struts.xml 框架默认支持以下技术或result类型
chain 该类型是Action链式处理
chart 该类型用来整合JFreeChart
dispatcher 该类型用来整合JSP,该类型是result元素默认的类型,若不指定result的属性,则type 属性的值就是JSP
freemarker 该类型用来整合FreeMarker
httpheader 该类型用为处理特殊HTTP行为
jasper该类型用来整合JasperReport
jsf 整合JSF
redirect 用来重定向到其他页面
redirect-action 重定向到其他Action
stream 向浏览器返回一个InputStream
tile 整合title
velocity 整合velocity
xslt 整合xml/xslt
plaintext 用来显示页面的原始代码

redirect 重定向到其它页面视图,会丢失所有的参数以及结果,
dispatccher 请求转发给页面视图
/
如果一个视图被多次使用,可配置成一个全局结果
<global-results>
 <result name="login">../login.jsp</result>
 <result name="error">/error.jsp</result>
</global-results>
<action name="" class="" method="">
 <result type="redirect-action">newsList.action</result>
</action>

///使用通配符
<action name="math_*" class="" method="{1}">
 <result>/{1}.jsp</result>
</action>
简单类型 int,boolean,double struts2.0会自动转换成数据格式
日期类型 struts2.0会采用当前区域Locale 的短日期格式来转换客户端的字符串格式的日期。
集合类型 如Collection,List,Set 等request.getParameterValues();方法返回字符串数据转换成集合类型

OGNL Object-Graph Navigation Language
支持对象方法调用xxx.xxx();
支持类表达的方法调用和值访问,
 表达式的格式为@[类全名(包括包路径)]@[方法名|值名],
 @java.lang.String@format('foo %s','bar') 或@tutorial.MyConstant@APP_NAME
#访问OGNL上下文和Action上下文#相当于ActionContext.getContext()
 ActionContext 中常用的属性介绍
 parameters 包含HTTP请求参数的MAP #parameters.id[0]作用相当于request.getParameter("id")
 Request 包含HttpServletRequest 属性的MAP,#request.userName相当于request. getAttribute("userName")
 Session 包含当前HttpSession的属性Map #session.userName 相当于session.getAttribute("userName")
 Application 包含当前应用的ServletContext的属性Map #application.userName 相当于application.getAttribute("userName")
用于过滤和投影集合,如books.{?#this.price<100};
用于构造Map 如#{'book1':'23','book2':'55'} 

%的用途,
 当标签的属性为字符串类型时,计算OGNL表达式的值

$的用途
  用于国际化资源文件中引用OGNL表达式
   在Struts2.0 配置文件中引用OGNL表达式

if elseif else

iterator
 value指定被迭代输出的集合,可以是OGNL指定,也可以通过Action 返回一个集合类型的变量
 id 属性用来指定集合中元素的ID的属性
 status指定集合中元素的status属性,
  int getCount()返回迭代 了几个元素
  int getIndex();返回索引
  boolean isEven()是否为偶数
  boolean isFirst()是否为第一个
  boolean isLast()是否为最后一个
  boolan isOdd()是否为奇数

append 多个集合合并成一个新的集合,原来的样子一个一个的排序
generator 将一个字符串解析成一个集合
 count 属性用来指定所生成的集合中元素的总数
 separator 属性指定分隔符
 converter属性 指定一个转换器,该转换器负责将集合中的每个字符串转换成对象

merge 与append标签一样用于将多个集合合并成一个新的集合,但方式有所不同,排序方式不一样
sort 用于对集合进行排序
subset 用于截取集合的一部分形成一个新的子集合
 source 属性,该属性用来指定源集合
 count 指定元素中集合元素的个数,不指定默认取得全部
 start 指定起始位置,默认从第一个元素start='0'开始
 decider属性指定是否选中当前元素
 
数据标签
 主要用来实现或访问各种数据的功能,常用于显示Action中的属性及国际化输出等场合
1,action 用于JSP页面中直接调用一人ACTION
 ID
 NAME
 namespace
 executeResult 默认false 不包含,是否把ACTION的结果包含到当前页面中
 ignoreContextParams 默认false 传入,页面的参数是否传入ACTION
2,bean创建一个javabean实例
 id 属性指定可以实例化Javabean的实现类
 name 指定可以直接通过id来访问这个JAVABEAN
3,debug 用于生成一个超链接,单击链接时可以看到当前ValueStack和StackContext中的内容
4,i18n 指定国际化资源文件
5,param用于设置一个参数,为其它标签提供参数。通常用做bean标签,url标签的子标签
 <param name="color">red</param>
 <param name="color" value="red"></param>
6,property 用于输出某个值,输出value 属性指定的值
 default 该属性用于指定属性值为null时输出的值
 escape 指定是否escapeHTML代码
 value 指定要输出的属性值
 ID 指定该元素的引用ID

7,set 设置一个新的变量,并把一个已有的变量值复制给这个新变量
  同时可以把这个新的变量放到指定的范围
 name 定义新的变量名字
 scope 变量被放置的范围
 value 定义要赋给新变量的值
 id 定义该元素引用的ID
  
8,text输出国际化消息
9,url 生成一个url地址
10,date 格式化输出 一个日期,还可以 计算指定日期到当前时间的时间差
 format 指定日期格式化
 nice 指定是否输出指定日期到当前时间的时间差,默认false 即不输出
 id
 format 与nice 不能同时指定,如果同时指定则format 会失效
 
UI 标签 通用属性
 模板
 templateDir 属性:该属性用来指定标签使用的模板文件的目录
 theme 指定标签使用的主题
 template 使用的模板
JavaScript
 onclick ondbclick onmousedown onmouseup onmouseover onmouseout
 onfocus onblur onkeypress onkeyup onkeydown onselect onchange
tooltip 相关属性该属性用来为表单元素设置提示信息,当鼠标悬停时出现提示信息
 tooltip,tooltipIcon tooltipBorderColor tooltipFontColor tooltipFontSize

表单标签其他通用的属性
 title 指定元素的title属性
 disabled 是否可用
 label 设置元素的labeln属性
 labelPosition 设置label显示的位置,可接受的值有top left
 name 设置表单元素的name,该属性的值与Action中的属性名相对应
 value

checkboxlist 创建 多个复选框,
 list 属性指定集合来生成多个复选框,如果list是一个字符串集合就不用指定其他属性了
 如果是一个Map或者JAVA多个对象要指定listKey listValue两个属性了
 listKey该属性用来指定元素中的某个属性作为复选框的value 如果是MAP 则使用key
 listValue 该属性用来指定元素中某个属性作为复选框的标签 如果是Map 则使用value
radio 与checkboxlist 差不多

datetimepicker
 该标签可以生成一个动态日历,当单击文本框时就会弹出日历选择框供我们选择日期,时间
 选择日期后系统就会把日期,时间输入到文本框中
属性
 displayFormat 指定日期的显示格式,如yyyy-mm-dd
 displayWeeks 该属性用来指定日历显示出星期数
 endDate 指定最后显示的日期
 language 指定日历显示的语言zh_CN
 startDate 指定开始的日历
 toggleDruation 指定日历选择框出现和隐藏的切换时间
 toggleType 用来指定日历选择框出现和隐藏的切换效果,有4个值可供选择plain wipe explode fade
 type 指定选择框的类型 ,有两个值可以选择date time分别表示日期选择框和时间选择框
 value 该属性用来指定当前日期,时间
 weekStartsOn 属性 指定哪一天才是一周的第一天,默认周日是0
 必须指定,<s:head theme="ajax"/>否则时间选择框将不能显示
 
token 防止多次提交表单 

updownselect 标签 可以上移 下移全选
属性
 allowMoveUp 设置是否显示支持上移的按钮,默认true,显示
 allowMoveDown 设置是否显示支持下移的按钮,默认true,显示
 allowSelectAll 设置是否显示支持全选按钮,默认true,显示
 moveUpLabel 支持上移按钮的文本,默认,
 moveDownLabel 支持上移按钮的文本,默认, ^
 selectAllLabel 支持全选按钮,默认*
 
optiontransferselect
属性
 addAllToLeftLabel 设置全部左移按钮上的文本
 addAllToRightLabel 设置全部右移按钮上的文本
 addToLeftLabel 设置左移按钮上的文本
 addToRightLabel 设置右移按钮上的文本 
 
 allowAddAllToLeft 设置是否出现全部左移按钮
 allowAddAllToRight 设置是否出现全部右移按钮
 allowAddToLeft 设置左移按钮
 allowAddToRight 设置右移按钮 
 
 leftTitle 左列表框的标题
 rightTitle 设置右列表框的标题
 
 allowSelectAll 是否出现全部选择按钮
 selectAllLabel 全选按钮的文本
 
 name 设置第二个列表框的name属性
 value 设置第二个列表框的value属性
 multiple 设置第二个列表框是否可以多选
 
 list 设置第一个列表框的集合
 listKey 设置第一个列表框的选项value的集合
 listValue 设置第一个列表框的选项value的集合
 
 doubleList 设置第二个列表的集合
 doubleListKey 设置第二个列表框的选项value集合
 doubleListValue 设置第二个列表框的选项label集合
 doubleName 设置第二个列表框的name属性
 doubleValue 设置第二个列表框的VALUE属性
 doubleMultiple 设置第二个列表框是否可以多选

非表单标签
 actionerror 主要用来输出Action 实例的getActionError() 方法返回的错误提示信息
 actionmessage 主要用来输出Action 实例的getActionMessage() 方法返回的错误提示信息
 component 用来生成一个自定义组件
  经常性用的某段代码片段可以考虑定义一个自定义组件
  theme 指定组件所使用的主题,如果不指定属性则默认使用xhtml主题
  templateDir 指定使用的主题目录,如果不指定则默认使用template
  template 定义自定义组件所使用的模板文件
 
 tree 生成一个树形结构
 treenode 生成树形结构的节点,与tree标签一起使用
 
 
校验
 addFiledError("name","2222222222"); 
所有的ACTION方法执行前,会先执行validte()
validate()方法 发现有不符合要求的输入法时,调用父类的addFiledError()
重写: public void validate(){}
validateXxx()方法
针对每一个ACTIOIN方法进行校验比如login action 进行前可以针对login
 进行校验 validateLogin()
 
如果同时出现validate() validateLogin() 则两个都同时进行校验
 但是先行进行validateXxx()方法,然后再进行validate()方法
无论执行那个Action 都会执行validate()方法
正则表达式校验
!Pattern.matches("\\w{6,15}",pass.trim())
 
 开始
   |
   |
 类型转换出错---是--->保存错误信息到ActionContent
   |       |
   否       |
   |      将其转换为fieldError
   |
 执行validateXxx()
   |
   |
 执行validate()
   |
   |
   包含fieldError------是----->返回input视图
   |        |
   否        |
   |        |
 调用Action -----------------> 呈现视图

内置校验器
 <ActionName>-validation.xml
 xwork-2.0.4.jar  validators 下有default.xml文件
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
    <field name="name">
        <field-validator type="requiredstring">
         <message>用户名不能为空</message>
        </field-validator>
    </field>
    <field name="pass">
        <field-validator type="requiredstring">
            <!--  <message key="requiredstring"/> -->
            <message>密码不能为空</message>
        </field-validator>
    </field>
</validators>

 

 

备注一下,这笔记至少有半年的历史了,在图书馆借的书看,在电脑上做例子,记下的笔记!不好的地方大家要理解下!!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值