zoukankan      html  css  js  c++  java
  • 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配置详解

  • 相关阅读:
    mvc+struct1+struct2
    JSP中动态include与静态include的区别
    村上春树的经典语录合集
    50. 数组剔除元素后的乘积
    46. 主元素
    Centos7:yum安装MySQL5.7后如何设置root密码
    产品经理人的持续交付和DevOps实践
    利用jenkins实现自动构建、部署,提升团队开发效率
    基于lua-nginx-module(openresty)的WEB应用防火墙
    Nginx+Lua+MySQL/Redis实现高性能动态网页展现
  • 原文地址:https://www.cnblogs.com/Jeely/p/11438063.html
Copyright © 2011-2022 走看看