struts2基本配置详解2

Posted jeely

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2基本配置详解2相关的知识,希望对你有一定的参考价值。

 

接上篇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配置详解

以上是关于struts2基本配置详解2的主要内容,如果未能解决你的问题,请参考以下文章

Struts2基本配置详解

struts2中的constant配置详解

struts2框架学习笔记2:配置详解

struts2基础之配置详解

01-struts2配置详解

第三章 Struts2配置详解