struts2配置详解

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

 

Struts2action开发的几种方式

1).继承ActionSupport

package cn.test.user;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

   private static final long serialVersionUID = 1L;

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

   public String login(){
             
return "success";

   }
 
}

 

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

public 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 String execute() throws Exception;

 }

 

package cn.test.user;

 

import com.opensymphony.xwork2.Action;

 

public class UserAction implements Action{

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

   @Override

   public String execute() throws Exception {

      // TODO Auto-generated method stub

      return "success";

   }

 }

 

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

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

package cn.test.user;

import com.opensymphony.xwork2.Action;

public class UserAction implements Action{

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

   private String name;

   private String password;

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;
 
}

   public String getPassword() {

      return password;
 
}

   public void setPassword(String password) {

      this.password = password;

   }

   @Override

   public String execute() throws Exception {

      // TODO Auto-generatedmethod stub

      System.out.println(name);

      return "success";

   }

}

 

Struts2的通配符

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

可以使用通配符来配置

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

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

</action>

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

<action name="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动态方法的调用

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

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

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

<include file="/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


你可能感兴趣的:(Web,框架,struts2,配置详解)