struts2 常用配置

Struts.xml
包含配置
在默认的情况下, Struts2 将自动加载放在 WEB-INF/classes 路径下的 struts.xml 文件。大部分应用里,随着应用的规模的增加,系统的 Action 数量大量增加,导致了 struts.xml 配置文件变得非常臃肿。
       为了避免这种情况,可以将一个 struts.xml 文件分解成多个配置文件,然后在 struts.xml 文件中包含其他配置文件。比如说:在 struts.xml 文件中使用以下配置方式
<include file=”struts-mod1.xml” />
通过这种方式提供了一种模块化的方式来管理 struts.xml 文件。
另外,在 core 的根目录下有一个 struts-default.xml 文件,注意,这个文件是自动加载的,不需要在我们的 struts.xml 文件中用 include 导入。  
Bean 的配置
一般这个元素不需要我们进行配置,只是需要重新定义 struts2 的核心组件的时候才需要使用到这个元素。
Struts2 框架是一个可以高度扩展的框架,框架的大部分核心组件,都是通过 IOC 容器来进行管理的。因此,允许开发者可以很方便的提供自己的组件实现类,并将组件类部署到 struts2OK 了。
这个标记很不常用,如果需要可以查看帮助。
不过这里举个例子:
<bean type=”com.opensymphony.xwork2.ObjectFactory” name=”caFactory” class=”cc.dynasoft.MyObject” />
以上代码的作用是使用一个自己定义的 ObjectFactory 来替换了 struts2 内置的 object
常量配置
Struts 有一个属性文件, struts.properties ,实际上这个配置文件是指定 struts2 的属性。而常量配置就是指定 struts2 属性的一种方式。例子:
<constant name=”struts.custom.i18n.resources” value=”message” />
以上用于指定国际化资源文件的前缀名是 message ,当然也可以在 struts.properties 中配置,如下:
struts.custom.i18n.resources=message
也可以在 web.xml 中进行配置:
作为 FilterDispatcherinit-param
<param-name> struts.custom.i18n.resources</param-name>
<param-value>message</param-value>
以下是加载 struts2 常量的搜索顺序:
1、  struts-default.xml
2、  struts-plugin.xml
3、  struts.xml
4、  struts.properties
5、  web.xml
包配置
Struts2 使用 package 来管理 Action 和拦截器等。配置该包时,必须指定一个 name 属性,用于指定包名,可以指定一个可选的 extends 属性,是另一个包的名字,子包可以继承父包的拦截器,拦截器栈、 action 等配置。除此之外, struts 还提供了一个抽象包,抽象包的含义是该包不能有 action 的定义。设置 abstract=”true” 说明这是一个抽象包。
以下是一个例子:
<package name=”mod1” extends=”struts-default” /> 其中 struts-defaultstruts-default.xml 提供的包。  
另一个比较重要的概念就是命名空间:
考虑在一个 web 应用中需要同名的 actionstruits2 以命名空间的方式来管理 Action ,同一个命名空间不能有同名的 Action ,不同的命名空间可以有同名的 Action 。如果不指定命名空间,则默认的命名空间是 ”” ,指定了命名空间之后, ActionURL 应该是命名空间 +Action 名。
比如说:
<action name=”register” extends=”struts-default” namespace=”/user” > …… </action>
则对应的 Action 应该是 /user/register.action
如果 namespace=”/” ,说明这是一个根命名空间。
 
如果指定了命名空间,但是在该命名空间中找不到该 Actionstruts2 将会在默认的命名空间中继续查找,如果还找不到,则出现系统错误。
比如说:
请求 /order/save.action ,系统首先在命名空间 /order 中查找,如果找到,使用该 action 进行处理,否则,系统将到默认的命名空间中查找,如果两个命名空间都找不到,出现系统错误。
 
拦截器配置
       拦截器实际上思想就是 AOP ,我们可以使用拦截器跟踪日志、跟踪系统性能瓶颈等。
       拦截器的配置无非就是声明拦截器、引用拦截器以及声明拦截器栈。可以认为拦截器栈是由多个拦截器组成的一个大的拦截器。
       定义拦截器和拦截器栈都在 <interceptors /> 这个标记内
       以下是一个例子:
       <interceptors>
              <interceptor name=”log” class=”cc.dynasoft.LogInterceptor” />
<interceptor name=”authority” class=”cc.dynasoft. Authority Interceptor” />
<interceptor name=”timer” class=”cc.dynasoft.TimerInterceptor” />
<interceptor-stack name=”default”>
       <interceptor-ref name=” authority” />
<interceptor-ref name=” timer” />
</interceptor>
 
引用拦截器是在 action 中引用的:例子:
<action name=”login” class=”cc.dynasoft.LoginAction”>
       ……
       <interceptor-ref name=”log” />
</action>
 
配置 Action
实际上配置 Action 很简单,就使用 action 标签就 OK 了, action 标签有两个重要属性: nameclassname 是必须指定的,他既是 action 的名字,也是该 action 需要处理的 URL 的前半部分。如果 class 没有指定,默认是 ActionSupport 。而 ActionSupport 默认处理就是返回一个 SUCCESS 字符串。
struts 的全局配置文件中有一个属性: struts.enable.SlashesInActionNames 如果设置为 true ,允许 struts2 框架中使用斜线。
Action 中直接访问 servlet API 有以下两种方法:
1、  如果需要访问 ServletContextAction 类需要实现接口 ServletContextAware
如果需要访问 HttpServletRequestAction 类需要实现接口 ServletRequestAware
如果需要访问 HttpServletResponseAction 类需要实现接口 ServletResponseAware
 
以下是例子代码,主要用于访问 Reponse 对象:
public class LoginAction implements Action,ServletResponseAware
{
        private HttpServletResponse response;
 
        // 实现 ServletResponseAware 接口必须实现的方法
       
        public String execute() throw Exception
        {
               Cookie c = new Cookie(“user”,getUsername());
               c.setMaxAge(60*60);// 最大生存时间
               response.addCookie(c);
               return SUCCESS;
        }
}
 
2、  struts2 提供了一个 ServletActionContext ,这个类包含了访问 requestresponse 等静态方法。
 
注意:即使我们在 struts2Action 中获得了 HttpServletResponse 对象,也不要尝试直接在 Action 中生成对客户端的输出。比如:下面代码是没有实际意义的,即
response.getWriter().println(“hello world!”);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值