Sruts2 学习笔记(马士兵教程 struts2.1.6版本) 第五天

==准备开始看hibernate生气


Struts拦截器以及源码解析

1.         Struts架构图

a)         见文档

2.         Struts执行过程分析

3.         Interceptor拦截器过程模拟

4.         定义自己的拦截器

a)         acegi – spring security

5.         使用token拦截器控制重复提交(很少用)

6.         类型转换

a)         默认转换

                         i.              日期处理

b)         写自己的转换器:

public class MyPointConverter extends DefaultTypeConverter{

 

    @Override

    public Object convertValue(Object value, Class toType) {

       if(toType == Point.class) {

           Point p = new Point();

           String[] strs = (String[])value;

           String[] xy = strs[0].split(",");

           p.x = Integer.parseInt(xy[0]);

           p.y = Integer.parseInt(xy[1]);

           return p;

       }

       if(toType == String.class) {

           return value.toString();

       }

       return super.convertValue(value, toType);

    }

 

}

public class MyPointConverter extends StrutsTypeConverter{

 

 

 

    @Override

    public Object convertFromString(Map context, String[] values, Class toClass) {

      

           Point p = new Point();

           String[] strs = (String[])values;

           String[] xy = strs[0].split(",");

           p.x = Integer.parseInt(xy[0]);

           p.y = Integer.parseInt(xy[1]);

           return p;

      

      

    }

 

    @Override

    public String convertToString(Map context, Object o) {

       // TODO Auto-generated method stub

       return o.toString();

    }

 

}

 

c)   三种注册方式:

        i.      局部:XXXAction-conversion.properties

1.   p(属性名称) =  converter

       ii.      全局:xwork-conversion.properties

1.   com.xxx.XXX(类名)= converter

     iii.      Annotation

d)   如果遇到非常麻烦的映射转换

        i.      request.setAttribute();

       ii.      session

补充视频中讲解的内容

1.         Lambda表达式

2.         验证框架

3.         UI标签

4.         类型转换中的异常处理

5.         上传与下载文件

6.         Struts2注解

Struts2总结

1.         Action

a)         namespace(掌握)

b)         path(掌握)

c)         DMI(掌握)

d)         wildcard(掌握)

e)         接收参数(掌握前两种)

f)          访问request等(掌握Map IOC方式)

g)         简单数据验证(掌握addFieldError和<s:fieldError)

2.         Result

a)         结果类型(掌握四种,重点两种)

b)         全局结果(掌握)

c)         动态结果(了解)

3.         OGNL表达式(精通)

a)         # % $

4.         Struts标签

a)         掌握常用的

5.         声明式异常处理(了解)

6.         I18N(了解)

7.         CRUD的过程(最重要是设计与规划)(精通)

8.         Interceptor的原理(掌握)

9.         类型转换(掌握默认,了解自定义)



76 拦截器的模拟: (Interceptor)其实每个拦截器只实现了一件事,在某个的Action前面执行一点东西,在这个Action执行完之后再执行一点东西。在执行一个有多个拦截器的Action时,依次执行每一个拦截器希望在Action之前执行的东西(请求Action的过程通过层层拦截器),执行完之后执行Action,Action执行完之后再执行拦截器们希望在Action执行完之后执行的动作(响应的过程也通过层层拦截器)。

 

77 自己编写拦截器

配置如图:

声明<interceptor>,在action中调用interceptor,用<interceptor-ref>,注意 调用的时候,如果只写自己定义的interceptor会覆盖原来系统帮我们定义的interceptor,所以一定要加上系统的interceptor:defaultStack

 

拦截器: 体现了切面编程的思想(Spring security)

 

78 防止重复提交: 1. Post提交方法本身防止了重复提交

2.token方法

     *一般的加入拦截器假如在defaultStack后面,因为defaultStack会帮你处理一些参数方面的过滤问题

首先在页面中添加<s:token>标签 访问一个页面的时候在服务器的session里生成一串随机字符串, 当我们第一次提交这个页面中的表单时,用页面中的字符串匹配服务器中的字符串,匹配上了,即允许这次的提交并删除session中的这个字符串. 下次重复提交的时候,再来匹配字符串,这时候页面中的字符串匹配不上了,就说明重复提交了.

配置:

在invalid.token的result中设置重复提交的时候会展现的页面

 

 79 读系统默认拦截器

上面代码是, 判断action是否有实现ApplicationAware这个借口如果有实现,则帮他注入Application.

 

80 类型转换

日期的转换<s:date  name=”” format=””>

在文档这里查日期的格式应该怎么写

传参数的时候按这个格式传给页面 就可以接收并用<s:date>显示了

传多个参数的时候 用list<>或set<>等容器类型, 前台用 显示。在用容器接收参数的时候,一定要用泛型

Map类型传值

 

81 自己编写转换器

配置

Action级别的转换器用properties文件来声明等号左侧为action里面的成员变量

此properties名称为 Action名_converter

全局转换器 名称固定

全局转换器里面的属性名要用全局的

 

82

继承StrutsTypeConverter的写法

Point同样可以用容器装起来List<point>传多个参数进去就可以读了

 

83

 

你可能感兴趣的:(String,properties,struts,object,Interceptor,action)