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

第四天学struts了,预计明天看完全部视频. 明天下午没课,因此表示毫无压力.吐舌头

看完struts之后开始hibernate,同样要做笔记

绿色字为教学路线和纲要,由教程提供

声明式异常处理

1.         在Actoin中进行异常映射

2.         在package中进行全局异常映射

3.         使用继承共用异常映射

4.         Struts2中异常处理由拦截器实现(观察struts-default.xml)

a)         实际上Struts2的大多数功能都由拦截器实现

I18N

1.         I18N原理

a)         ResourceBundle和Locale的概念

b)         资源文件

c)         native2ascii

2.         Struts的资源文件

a)         Action – Package – App级

b)         一般只用APP

                         i.              struts.xml custom.i18n

c)         PropertiesEditor插件

                         i.              解压

                       ii.              features plugin 覆盖到myeclipse中的eclipse目录里

d)         动态语言切换

                         i.              request_locale=en_US

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


63 如果要使用EXT框架,页面编码全使用”UTF-8”

 

64 引入struts标签的写法<%@tabliburi=”/struts-tags” prefix=”s”%>

 

64 建议在要取值栈的标签之后加一个<s:debug>方便调试

 

64 做每行的删除按钮 连接带参数id

 

66 struts的异常处理:在Service,Actrion等的后台程序中有异常时,你尽管往外抛,及在catch中写throw(e) 到某一个地方,struts会给你一个统一的接口来处理这些抛出来的方法。这就是struts的声明式处理异常。

在上图这里配置异常显示页面

<exception-mapping result=”error”exception=”java.sql.SQLException”/>

<result name=”error”>/error.jsp</result>

可以在该页的值栈里面读取异常信息

 

66  <global-results>和<global-exception-mappings>(全局异常映射)有先后顺序 必须把前者写在前面

全局异常映射: 任何包继承有全局异常映射配置的包,都可以用这个异常映射

在一个包里面发生异常的时候,先找自己包里面的异常映射, 如果找不到去父包那里找

配置一个global-results中的result用于处理全局的错误,都集中到这个页面中来处理

 

67 错误处理原理: 拦截器的使用,在struts帮你调用一个action的时候,中间struts在中间加了一些业务逻辑(拦截器),这其中个拦截器就帮你处理了异常问题.

 

 

67

一个BUG:当用default-action-ref 去调用一个action时, 不会执行这个action所配的类里面的方法. 只能直接调用这个页面,用一下这种方式可以解决。

 

 

69 I18N 国际化

getBundle 这里必须和国际化的properties文件的前半截(第一个下划线前)文件名一模一样

资源文件的命名 XXX_en_US.properties 某名字的资源文件_英文版(en)_为英国写的(UK)

只有UTF-8编码才能支持所有的语言在使用资源文件编写中文之前必须先把struts的字符集改成UTF-8(理论上此处不用到)

编写资源文件时用这种方式打开 右键properties文件 open with>PropertiesEditor

这个editor要自己安装,放在如下图的地方

这是个插件装在MyEclipse下解压后复制到如下图处重启MyEclipse即可

 

70 国际化

三个级别: Action – package – App

Action级(少用) 起名要和Action一样并且放在同一个包里(只有这个action能用)

包级别的也类比上一个的设置(同样少用)

页面中取该资源文件中的字段的标签如上图

此时显示的字符串的用哪个资源文件由浏览器的浏览默认语言决定

这个调用的方法getText()是调用ActionSupport里面的方法(s:properties里面能直接调用的方法只能是Action里面的方法)

 

只可能使用APP级别的国际化整个项目的资源文件

上图配置的value名即资源文件名开头

 

72 国际化的时候 也可以在字符串里面加占位符{0} {1}{2}… 等待参数

参数卸载<s:param> 的name属性里面是解析成ognl表达式

 

73 动态语言切换:只用在页面上传一个参数,后面访问的页面全部语言都变了.实现的时候用一个按钮 提交回到本页并且传下图中的参数(request_locale=en_US)就可以了

Struts会帮你把action里面的locale设置成你穿的参数 同时也帮你把session里面的locale设置了 所以后面访问的网页都会根据你做的设置变化

 

75 如果想在页面里面拿到 ValueStack的话 用如下图代码

拦截器调用过程:源码解析图

总结: struts的ActionInvocation依次调用配置好的invocation 调用完之后再去调用Action之中我们指定的方法

Struts的文档里面/docs/big-pictures.html有官方的struts原理图

 

你可能感兴趣的:(Sruts2 学习笔记(马士兵教程 struts2.1.6版本) 第四天)