struts2基础(续)
2014-02-27 21:23
337 查看
昨天发表完第一篇博客之后就停电了,今天就让我赶紧把昨天学习的东西继续拿来分享。
闲话不多说,昨天只是演示了一个最基础的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>如果没有指定result的name属性,默认值为success
为了测试Action中存在的多个方法,我们程序员可以使用!+方法名调用指定方法,如下:
假设访问上面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元素来声明:
源代码:
我来大致解释一下配置这个的作用,比如我们开发的系统可能正在维护或者升级,我们的客户访问不到他们想访问的页面,而我们不能把报404错误的页面反馈给用户,那样会给用户留下极差的印象。所以我们可以单独设计一个错误页面,里面设置我们想要反馈给用户的信息,这样就可以将用户的意见大大降低。
多个Action共享一个视图--全局result配置
当多个action中都使用到了相同视图,这是我们应该把result定义为全局视图。struts提供了全局forward,struts2中也提供了相似功能:
源代码:
这里就是简化代码的最经典的反映,多个action共享同一个视图。
为Action的属性注入值
Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。如下:
源代码:
Java类
struts.xml
上面通过<param>节点为action的savePath属性注入“/images”
指定需要Struts2处理的请求后缀
¨前面我们都是默认使用.action后缀访问Action。其实默认后缀是可以通过常量”struts.action.extension“进行修改的,例如:我们可以配置Struts2只处理以.do为后缀的请求路径:
源代码:
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:
解释:
这样做更多的是让我们清楚每个模块的层次,更容易分清作用。
为应用指定多个struts配置文件
在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:
源代码:
解释:
通过这种方式,我们就可以将Struts2的Action按模块添加在多个配置文件中
闲话不多说,昨天只是演示了一个最基础的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>如果没有指定result的name属性,默认值为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>节点为action的savePath属性注入“/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按模块添加在多个配置文件中
相关文章推荐
- SSH框架入门(一)——Struts2基础及查错步骤
- Struts2基础总结-入门篇
- Struts2基础学习总结
- struts2基础学习收录重点之OGNL动态配置result , 使用注解配置action,实现java国际化
- 《研磨struts2》 第一章 Struts2概述 之 Struts2基础
- 【Struts2基础】——Struts1 & Struts2 区别
- Struts2基础之九:result的服务器跳转和客户端跳转
- struts2(十)之JSON基础
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- Struts2基础学习(六)—文件的上传和下载
- Struts2-学习基础
- struts2-面向对象编程重要模型基础
- Java学习笔记-struts2基础(1)
- Struts2与MVC基础入门
- Struts2基础应用
- [JavaWeb基础] 015.Struts2 表单验证框架
- struts2(基础1)
- struts2基础学习三
- struts2基础学习四之参数
- J2EE基础---Struts1和Struts2的区别