Hi_Amos
坚持每天都在进步!!

接上篇struts2基本配置详解,还有一些配置没有讲到,下面将继续。

struts.xml

<package name="com.amos.web.action" namespace="/" extends="struts-default">
        <action name="HelloWorldAction" method="execute">
            <result name="success" type="dispatcher">
                suc.jsp
            </result>
        </action>
    </package>

 1)、<action>中不指定method属性会是什么结果?

将exeucte方法改名为execute2(),并在struts.xml中删除method属性,然后重新发布项目。

HelloWorldAction.java
public class HelloWorldAction extends ActionSupport{
  public String execute2() throws Exception { 
    System.out.println(
"欢迎使用struts2!"); return "success";
  }
}

结果依然是正确的。为什么不写method的属性也会正常输出??

查看一下ActionSupport,然后发现execute方法会有默认的返回值为,如下,截取文档内容:

A default implementation that does nothing an returns "success".
Subclasses should override this method to provide their business logic.

由此可知,method默认为excute(),返回值为"success"

 

2)、<result> 中不指定name属性会是什么结果?

重新发布项目,依然是成功,由此可知,name默认为"success"

 

3)、<result>中不指定type属性会是什么结果?

重新发布项目,依然是成功,由此可知,type默认为"dispatcher",即默认为转发

 如果要使用重定向,必须将type赋值为redirect,即type="redirect",如下所示

<result name="success" type="redirect">
                suc.jsp
            </result>

浏览器中输入http://localhost:8080/struts2/HelloWorldAction

发现已经重定向到suc.jsp了。

 

4)、两种方式访问Action

  >>方法1,使用.action扩展名   例,http://localhost:8080/struts2/HelloWorldAction.action

 >>方法2,不使用扩展名           例,http://localhost:8080/struts2/HelloWorldAction

两种方式访问效果一样。从源码中查看原因?

在struts2-core/2.3.16/struts2-core-2.3.16-sources.jar/org/apache/struts2/default.properties下第79行有如下设置:

struts.action.extension=action,,

action或者为空

如何更改默认扩展名?

  >>方法1,在src/main/resource目录下,即与struts.xml同级目录下,新建struts.properties,在其中写入想要的扩展名即可

struts.action.extension=action,hi,amos,,

这里新添加了.hi和.amos扩展名。

效果如下:

>>方法2,将值配置到struts.xml中,如下所示:

<struts>
    <constant name="struts.action.extension" value="hello,abc"></constant>
    <package name="com.amos.web.action" namespace="/" extends="struts-default">
        <action name="HelloWorldAction" >
            <result name="success" type="dispatcher">
                suc.jsp
            </result>
        </action>
    </package>
</struts>

将struts.properties删除,重新部署并访问浏览器:

 推荐第二种方式。

注:当struts.properties和struts.xml同时存在时,以struts.properties为主。

 

5)、如何配置多个struts.xml文件?

项目由多人开发,每个人可能都会有一个自己的struts.xml,如何避免冲突并使他人的struts.xml文件有效?

如下图所示:

 

新建目录config,新建dao_struts.xml和email_struts.xml两个配置文件,如何将它们加载到内存中?并解析为javabean对象

    <!-- 加载其他配置文件 -->
    <include file="config/dao_struts.xml"></include>
    <include file="config/email_struts.xml"></include>

使用include指定文件路径即可,注意查看tomcat的启动提示信息,如果路径错误,那么将提示Unable to locate ...

 

6)、action使用单例还是非单例模式,需不需要解决线程安全问题?

重写HelloWorldAction的构造函数,如下:

public HelloWorldAction(){
System.out.println("hello actions:"+this.hashCode());
}

浏览器中多次访问,然后查看控制台输出,结果如下:

 

注:一次请求对应一次Action实例,因此不会产生线程安全问题,即在Action中不会产生synchronized同步代码块。

本文源代码:点此查看 struts2配置详解

 

 

 

 

posted on 2014-01-05 16:12  Hi_Amos  阅读(939)  评论(0编辑  收藏  举报