struts2自主学习之配置国际化资源文件,传统异常处理方式, 拦截器,实现action 控制类,访问servletAPI,使用拦截器注解

配置国际化资源文件

配置文件


struts2框架将国际化信息定义在资源文件中,同时还需要在配置文件中队资源文件进行配置,告诉
Struts2框架所需要加载的资源文件。
1.使用struts.xml文件
在struts.xml文件中配置国际化文件,一般是通过设置常量来实现。
<constant name="struts.custom.i18n.resources" value="golbalMessage" />


2.使用struts.properties文件

如果在struts.properties文件中实现,则使用Key-Value的代码格式,配置代码如下:
struts.custom.i18n.resources=globalMessages


3.使用web.xml文件

如果在web.xml文件中实现,则使用<param-name>和<param-value>元素,配置代码如下:
<init-param>
    <param-name>struts.custom.i18n.resources</param-name>
    <param-value>golbalMessages</param-value>

</init-param>


在国际化配置时使用前两种实现比较方便
 

Struts2资源文件
配置Struts2国际化资源信息需要两个值:
struts.custom.i18n.resources和globalMessages
·struts.custom.i18n.resources
在struts2框架中,表示国际化的常量,是一个固定不变的值。
·globalMessages
表示全局国际化资源文件的basename值,所以对应的全局国际化资源
文件,可以是globalMessages_zh_CN.properties、
globalMessages_en_US.properties等,这些文件名都符合
globalMessages_language_country的格式。
 

国际化资源信息要放在src根目录下。



带占位符的国际化信息

 Struts2的国际化支持占位符,所谓占位符就是把一些动态信息,通过占位符来表示。
但是在输出时,仍然输出占位符所代表的信息。从而更加灵活的输出国际化信息。
占位符必须使用参数来填充。
 
1、在jsp页面中填充国际化信息时的占位符。
通过在<s:text>标签中嵌套多个<s:param>标签来填充占位符。
2、在action中填充国际化信息时的占位符。
这种情况可以调用getText()方法来填充占位符。
实例:
globalMessage_en_US.properties
globalMessage_zh_CN.properties
struts.xml
loginAction.java
index.jsp
login.jsp


实现自由选择语言环境



包范围的资源文件


在struts2应用程序中创建资源文件时,如果资源文件为package_language_country.properties
其中package为固定的字符串,language和country表示表示相应的语言和区域,
那么该文件就是包范围资源文件。
实例:
·package_zh_CN.properties
·package_en_US.properties
·PackageAction.java
·struts.xml
·packageAdd.jsp
·packageSuccess.jsp

Action范围文件

在Struts2框架中,允许为每个action创建一组资源文件,这些资源文件作为:
ActionName_language_country.properties,其中ActionName为指定的Action
的类名
实例:
·PackageAction_zh-CN.properties
·PackageAction_en_US.properties
·struts.xml


临时资源文件实现struts2国际化


Struts2框在实现国际化时,还可以使用临时资源文件的方式,在这种方式下,
jsp文件中需要使用I18N标签。
使用临时资源文件的优点,主要就是在一个jsp文件中,可以引用多个资源
文件来显示国际化信息。
·temp_zh_CN.properties
·temp_en_US.properties
·temp.jsp


传统异常处理方式


传统异常处理
在传统的java程序中,所有异常对象的根对象是Throwable,
从Throwable类直接派生的异常类有Exception和Error
对Exception异常处理的过程中,一般通过try{}catch(){}finally语句,
或者使用throws Exception来捕获异常。在应用程序中,Exception异常和从它派生出来的
所有异常,都可以通过使用catch语句捕获到。
实例:
·MyException.java
·ThrowableException.java
·UseException.java


除法运算异常实例



拦截器


1、拦截器的概念
2、配置拦截器
3、使用拦截器

拦截器(java类文件)(Interceptor)是动态拦截action调用的对象,类似于Servlet中的过滤器。
在执行action的业务逻辑处理方法(execute())之前,Struts2会首先执行在
struts.xml中引用的拦截器。



实例:
用户登录拦截器

实例说明:
用户在访问一个系统时,访问的请求信息将被提交到action中进行处理。在action处理
信息之前,如果该action配置有拦截器,则执行拦截器的内容,在一个拦截器
中判断用户是否已经登录,如果该用户没有登录,则action不处理请求信息,而直接返回到登录页面

如果该用户已经登录,则让action对请求信息进行处理。


实现action 控制类
action类

public class LoginAction extends ActionSupport{
    private String name;
    public void setName(String name){
        this.name=name;
}

public String getName(){
    return this.name;
}

public String execute() throws Exception{
    return SUCCESS;
}
}


Action 接口
public abstract interface Action{

    public static final String SUCCESS="success";
    public static final String NONE="none";
    public static final String ERROR="error"
    public static final String INPUT="input"
    public static final String LOGIN="login"
    public abstract String execute() throws Exception;
}


访问action context

访问Servlet API
web 中需要访问的ServletAPI是:HttpServletRequest、HttpSession和ServletContext,
这3个类代表了jsp内置对象的request、session和application
Action类不再与ServletAPI 耦合,从而更轻松地实现action

ActionContext类
可以通过下面的代码来创建和使用ActionContext:
ActionContext ac =ActionContext.getContext();
在ActionContext类中,有一些常用方法:
Map getApplication()
Map getParameters()
Map getSession()
void setApplication(Map application)


直接访问servletAPI(一)
IoC
在struts2中,通过IoC方式将Servlet对象注入到action中,具体实现是由一组接口决定的。
要采用IoC方式就必须在action中实现以下接口:
·ApplicationAware
以Map类型向action注入保存在ServletContext中的Attribute集合。
·SessionAware
以Map类型向action注入保存在HttpSession中的Attribute集合
·CookiesAware
以Map类型向action注入Cookie中的数据集合
·ParameterAware
向action中注入请求参数集合

直接访问servletAPI(二)
非IoC
除了actioncontext类,Struts2还提供名称为ServletActionContext的辅助类来获取ServletAPI
这是非IoC的方式。其静态方法有:
getPageContext()\
getRequest()\
getResponse()\
getServletContext().
在action类中的处理方法中,调用相应的类的相应的方法就可以了。
HttpServletRequest request= ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.setAttribute("login",this.name);



使用拦截器注解

 Struts2在com.opensysphony.xwork2.interceptor.annotions包中定义了3个拦截器注解类型,
从而可以直接通过注解的方式,来指定在action执行之前和之后需要调用的方法。
    Struts2提供的三个注解类型如下:
Before
标注一个action方法,该方法将在action的处理方法(例如execute())执行之前被调用。
如果标注的方法有返回值,并且不为null;
那么这个返回值将作为action的结果代码。
After
标注一个action方法,该方法将在action的处理方法(例如execute())执行之后被调用。
如果标注的方法有返回值,那么这个返回值将被忽略。
BeforeResult
标注一个action方法,该方法将在action的处理方法(例如execute())执行之后,在result
执行之前被调用。如果有返回值,那么这个返回值将被忽略。


拦截器的方法过滤

默认情况下,如果为某个action配置拦截器,则这个拦截器将拦截action中的所有方法。
但是有时并不想拦截action中的所有方法,而是只需要拦截其中的一个,或者几个方法,此时就需要
使用拦截器的方法过滤特性。
为了实现拦截器的方法过滤性,Struts2提供一个MethodFiledIntercepor抽象类。
这个类重写AbstractInterceptor类中的intercept()方法,但是提供doIntercept
(ActionInvocation invocation)抽象方法。
 
方法过滤参数:
excludeMethods
excludeMethods参数指定拦截器拒绝拦截的方法列表,如果有多个方法,则每两个方法之间使用英文
逗号(,)分隔,例如指定该参数值为:
login,register那么,拦截器将不会拦截login()和register()方法
includeMethods
includeMethods参数指定拦截器需要拦截的方法列表,如果有多个方法,则每两个方法之间使用英文
逗号(,)分隔,例如指定该参数值为:
method1,method2 那么,拦截器将拦截method1()和method2()方法。







43···3:30

猜你喜欢

转载自blog.csdn.net/leo_libin/article/details/70231738
今日推荐