struts2基础(续)

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

闲话不多说,昨天只是演示了一个最基础的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按模块添加在多个配置文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值