struts2配置详解

来源:互联网 发布:网络创世纪手机版安卓 编辑:程序博客网 时间:2024/06/06 01:06

在配置struts拦截器时,如果除了核心拦截器外还有其他拦截器,其他拦截器需要放在核心拦截器之前。

 

Struts2action开发的几种方式

1).继承ActionSupport

package cn.test.user;

import com.opensymphony.xwork2.ActionSupport;

publicclass UserActionextends ActionSupport{

  private staticfinal longserialVersionUID = 1L;

  //Action中业务逻辑处理方法

  public Stringlogin(){
             
return "success";

   }
 
}

 

2).实现Action接口,重写execute()方法

publicinterface Action {

   public staticfinal StringSUCCESS = "success";

   public staticfinal StringNONE = "none";

   public staticfinal StringERROR = "error";

   public staticfinal StringINPUT = "input";

   public staticfinal StringLOGIN = "login";

   public Stringexecute() throws Exception;

 }

 

package cn.test.user;

 

import com.opensymphony.xwork2.Action;

 

publicclass UserActionimplements Action{

  //Action中业务逻辑处理方法

  @Override

  public Stringexecute() throws Exception {

     // TODO Auto-generated method stub

     return "success";

  }

 }

 

3).不实现任何接口,也不继承类。

Struts的功能是通过拦截器来实现的,不实现接口或者类,也不会影响到其数据自动封装的功能

package cn.test.user;

import com.opensymphony.xwork2.Action;

publicclass UserActionimplements Action{

  //Action中业务逻辑处理方法

  private Stringname;

  private Stringpassword;

  public StringgetName() {

     return name;

  }

  public voidsetName(String name) {

     this.name = name;
 
}

  public StringgetPassword() {

     return password;
 
}

  public voidsetPassword(String password) {

     this.password = password;

  }

  @Override

  public Stringexecute() throws Exception {

     // TODO Auto-generatedmethod stub

     System.out.println(name);

     return "success";

  }

}

 

Struts2的通配符

在同一个Action中有多个业务方法返回同一个值或者页面的配置方法

可以使用通配符来配置

<actionname="user_*"class="cn.test.user.UserAction"method="{1}">

       <result name="success">login.jsp</result>

</action>

*代表uer_之后输入的字符串,被填充到{1}中进行查找,找不到则报错

<actionname="user_*"class="cn.test.user.UserAction"method="{1}">

       <result name="{1}">{1}.jsp</result>

</action>

通配符可以在struts配置信息中用来优化配置,可以在action中任何一个地方使用。

 

Struts中路径匹配原则:

        访问路径 = 协议+主机名+端口号+应用程序名 +名称空间 + 对外访问路径

如果没有名称空间,默认为/

Struts2访问路径解析

Struts2项目访问路径http://localhost:8080/struts02/user/a/b/user_login在服务器上的解析过程

服务器

                 查看协议:http

                 解析主机:localhost

                 解析端口号:8080

                  解析访问的项目资源名称:struts02

                  解析出要访问的资源名称:user_login

                  查看名称空间:user/a/b是否存在,如果不存在这个名称空间,则继续向下找

                                        如果存在,则在该名称空间中查找名字为user_loginaction

                  查看名称空间:user/a 是否存在,如果不存在这个名称空间,则继续向下找

                                    如果存在,则在该名称空间中查找名字为user_loginaction

                  查看名称空间:user     是否存在,如果不存在这个名称空间,则继续向下找

                                    如果存在,则在该名称空间中查找名字为user_loginaction

                 查看名称空间:/           如果还没有找到,就报错。
                                    如果存在,则在该名称空间中查找名字为
user_loginaction

 如果找到其中一个对应的名称空间,则返回,并获取类来响应用户的请求。

Struts中的常量

Struts的默认访问后缀名:

        Struts1中默认访问后缀名是:*.do;

        Struts2中默认访问后缀名是:*.action;

编码之前,必须知道编码规则。

修该struts的访问后缀

1.      struts2.action后缀定义在哪里?

Struts-core-2.3.4.1.jar/org.apache.struts/default.properties

2.      修改struts2的访问后缀

<constant    name="struts.action.extension"value="action,,"></constant>

多个访问后缀名称之间用英文逗号隔开

        一般来说,任何一个框架的常用配置文件,都会放在其包文件的根目录下或者第一个包目录中。对于所有应用都是用的配置,一般会放在全局变量中。

 其他常量:

    指定默认编码集,作用于HttpServletRequestsetCharacterEncoding方法freemarker velocity的输出

   <constant name="struts.i18n.encoding"value="UTF-8"/>

    自定义后缀修改常量

   <constant name="struts.action.extension"value="do"/>

    设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

   <constant name="struts.serve.static.browserCache"value="false"/>

    struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

   <constant name="struts.configuration.xml.reload"value="true"/>

    开发模式下使用,这样可以打印出更详细的错误信息

   <constant name="struts.devMode" value="true"/>

    默认的视图主题

   <constant name="struts.ui.theme" value="simple"/>

    spring集成时,指定由spring负责action对象的创建

   <constant name="struts.objectFactory"value="spring" />

    该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性

    false

   <constant name="struts.enable.DynamicMethodInvocation"value="false"/>

    上传文件的大小限制

   <constant name="struts.multipart.maxSize"value=“10701096"/>

Struts2动态方法的调用

<!—-开启动态方法的调用-->

<constantname="struts.enable.DynamicMethodInvocation"value="true"></constant>

<!—-在总配置文件中引入其他struts文件-->

<includefile="/cn/test/user/config/actionstruts.xml">

</include>

struts访问路径中,如果出现两个相同的访问路径,后面的访问路径会覆盖前面的访问路径。

<!--动态方法调用

          访问方式:

          http//localhost:8080/struts02/user!login

          协议://主机名:端口号/项目名/actionName!需要访问的方法

       -->

     <action name="user"class="cn.test.user.config.UserAction">

       <result name="success">login.jsp</result>

     </action>

不建议使用动态方法调用

 全局配置的常量,应该单独放在一个struts文件中去配置和维护,在总配置文件中引入这个文件即可。

 全局视图

对于多个action返回同一个结果,也可以同过全局视图的方式配置来跳转结果。

<global-results>

            <result name="success">/success.jsp</result>

 </global-results>

在返回同一个结果的action中,不必再配置这个跳转结果。如果在某一个action中配置了跳转结果,则会覆盖全局视图配置的跳转结果。在查找跳转结果是,会先查找action中配置的跳转结果,如果当前action没有配置,则会到全局视图中去查找对应的页面,如果全局视图中也没有找到跳转结果配置,则会报错。

 全局视图的配置,必须在action配置之前。

 配置各项默认值

1.      strutsaction中默认执行的业务逻辑方法是execute()方法

<action   name="login"

class="cn.test.action.HelloAction">

</action> method的默认值是execute

    2action中没有配置class时,默认值为com.opensymphony.xwork2.ActionSupport

<action   name="login">

</action>

      执行的是actionstruts-default中的配置

    <default-class-ref calss=”com.opensymphony.xwork2.ActionSupport”/>

    默认执行的方法是execute()方法,返回值为success,对应的页面在全局视图配置中去找。

 

重定向跳转不到项目的web-inf目录下的资源。但是转发可以跳转到web-inf目录下的资源。

Web-inf中放置的是资源文件,一般不允许客户直接访问。

action中可以通过type来配置转发或者重定向。

什么情况下不配置actionclass

答案:当只是需要跳转到web-inf下的资源时,可以不配置classtype的默认值为forward


0 1