struts2基础(续)

来源:互联网 发布:手机4g网络怎么加速 编辑:程序博客网 时间:2024/06/08 05:08

昨天发表完第一篇博客之后就停电了,今天就让我赶紧把昨天学习的东西继续拿来分享。

闲话不多说,昨天只是演示了一个最基础的struts2框架的小知识,那么接下来就让我介绍一下关于struts2的细节。


首先让我们来看一个重要的属性:namespace

     我们知道,这个属性是在struts.xml文件<package>中,其作用是定义该包的命名空间。命名空间可以用来区别同名的Action。在一个命名空间内Action名必须是唯一的。但是不同的命名空间中可以用同名的Action。

  •       如果某个包没有指定namespace,则该包使用默认的命名空间,默认的命名空间总是“”。 
  •       namespace决定了action的访问路径,默认为“”,可以接受所有路径的action。
  •       namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/(action的name值).aciton,/xxx/(action的name值).aciton,/xxx/yyy/ (action的name值).action
  •       namespace最好用模块来进行命名(这样就是更好的为了确定模块的作用,更明确)
再来看看Action配置中的各项默认值:
      代码示例:

       解释:
       1>如果没有为action指定class,默认是ActionSupport
       2>如果没有为action指定method,默认执行action中的execute()方法。
       3>如果没有指定resultname属性,默认值为success
为了测试Action中存在的多个方法,我们程序员可以使用!+方法名调用指定方法,如下:
public class HelloWorldAction{private String message;....public String execute() throws Exception{this.message = "我的第一个struts2应用";return "success";}public String other() throws Exception{this.message = "第二个方法";return "success";}
注:  

假设访问上面action的URL路径为:/struts/test/helloworld.action

要访问action的other() 方法,我们可以这样调用:

/struts/test/helloworld!other.action

如果不想使用动态方法调用,我们可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用。

<constantname="struts.enable.DynamicMethodInvocation"value="false"/>

效果:

那么就会在页面上显示“第二个方法”

提示:

这种调用方式会带来安全隐患,所以在struts2版本2.3.15.2之后就不能使用DMI动态调用方法

默认的action

如果请求一个不存在的action,结果将是HTTP404错误,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。       默认的action使用default-action-ref元素来声明:

源代码:

<package name="defaultAction" namespace="/default“ extends="struts-default">        <default-action-ref name="error"></default-action-ref>            <action name="defaultaction“ class="org.lesson05.DefaultAction">            <result name="success">/defaultAction.jsp</result>        </action>        <action name="error">            <result>/error.jsp</result>        </action></package>
解释:

       我来大致解释一下配置这个的作用,比如我们开发的系统可能正在维护或者升级,我们的客户访问不到他们想访问的页面,而我们不能把报404错误的页面反馈给用户,那样会给用户留下极差的印象。所以我们可以单独设计一个错误页面,里面设置我们想要反馈给用户的信息,这样就可以将用户的意见大大降低。

多个Action共享一个视图--全局result配置

       当多个action中都使用到了相同视图,这是我们应该把result定义为全局视图。struts提供了全局forward,struts2中也提供了相似功能:

源代码:

<package ....><global-results><result name="message">/message.jsp</result></global-results></package>
解释:

       这里就是简化代码的最经典的反映,多个action共享同一个视图。

为Action的属性注入值

       Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法如下:
源代码:
Java类
public class HelloWorldAction{private String savePath;public String getSavePath() {return savePath;}public void setSavePath(String savePath) {this.savePath = savePath;}       ......}
struts.xml
<package name="itcast" namespace="/test" extends="struts-default"><action name="helloworld" class="cn.itcast.action.HelloWorldAction" ><param name="savePath">/images</param><result name="success">/WEB-INF/page/hello.jsp</result></action></package>
解释:
  上面通过<param>节点为actionsavePath属性注入“/images”

指定需要Struts2处理的请求后缀
       ¨前面我们都是默认使用.action后缀访问Action。其实默认后缀是可以通过常量”struts.action.extension“进行修改的,例如:我们可以配置Struts2只处理以.do为后缀的请求路径:
源代码:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <constant name="struts.action.extension" value="do"/></struts>
补充:
   如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:

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

解释:
             这样做更多的是让我们清楚每个模块的层次,更容易分清作用。
为应用指定多个struts配置文件

        在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:


源代码:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><include file="struts-user.xml"/><include file="struts-order.xml"/></struts>

解释:
   通过这种方式,我们就可以将Struts2的Action按模块添加在多个配置文件中

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕8个月拉稀怎么办 孩子调皮好动爱说话怎么办 宝宝8个月不会爬怎么办 怀孕8个月不想要了怎么办 8个月宝宝发烧怎么办 八个月的小孩发烧怎么办 孩子8个月发烧38怎么办 8个宝宝发烧38度怎么办 怀孕八个月不想要怎么办 怀孕八个月不想要了怎么办 八个月宝宝拉肚子拉水怎么办 八个月的宝宝拉肚子怎么办 八个月发烧38度怎么办 孩子特别调皮好动该怎么办 孩子有好动症该怎么办 在幼儿园好动的孩子该怎么办 18个月宝宝上火怎么办 打孩子越打上瘾怎么办 八个月不想要了怎么办 胎儿心脏畸形肺动脉瓣闭锁怎么办 小孩爱动怎么办补什么 初中孩子下午上课总犯困怎么办 孩子上课精神不集中怎么办 孩子玩兴奋了就打人怎么办 婴儿兴奋白天不睡觉怎么办 小孩读书精神不集中怎么办 小孩上课精神不集中怎么办 小孩学习精神不集中怎么办 孩子暑假天天看电视不出门怎么办 七个月宝宝缺铁怎么办 天天运动为什么还便秘怎么办 小孩学习注意力不集中怎么办 8个月宝贝太好动怎么办 学生在校受伤家长该怎么办 多动症小孩爱动手指怎么办 孩子大了不听话该怎么办 流产后吹了风怎么办 怀孕1周内喝酒了怎么办 怀孕6周喝酒了怎么办 怀孕后喝了酒怎么办 不知道怀孕喝酒了怎么办