Java web开发学习过程4 struts2架构学习

今天学习完java web开发的基本知识。下一步学习struts框架的使用。

首先下载struts2包http://struts.apache.org/download.cgi#struts2312。我下载的是完整包struts-2.3.14-all.zip。解压看到如下文件

apps是struts中的例子编译的最终程序可以直接放到tomcat webapps下运行。
docs是帮助文档。
lib是所有的struts库。我们开发struts程序需要导入此文件夹下的库。导入方法:复制lib下需要的库到工程目录下的WebContent\WEB-INF\lib文件夹。
src下是源码。

取得struts后下一步就是要运行struts中的例子,来初步熟悉struts的使用方法。

首先参考http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html了解基本的maven工程的目录结构。找到rest-showcase例子的源码位置struts-2.3.14\src\apps\rest-showcase\src\main\java。复制源码到exlipse工程的src目录。导入java源码后还要导入web站点的相关文件和lib下的库文件。解压struts-2.3.14\apps\struts2-rest-showcase.war,复制解压后的文件到工程目录的WebContent下,classes文件夹的内容除外因为此文件夹中的内容是编译后自动生成的。编译工程发现出错,排错方法:查看生成的web站点的内容和rest-showcase.war解压后的内容作对比发现少了WEB-INF\classes目录下struts.xml文件,由于struts.xml和org处在同一目录故猜想需要把struts.xml放到工程目录的src目录下。重新编译工程发现的确在WEB-INF\classes目录下产生来了struct.xml。此时运行工程成功。

由此总结创建struts工程的方法,首先创建Dynamic Web Project工程,然后导入相关的struts库文件,并在src目录下创建struts.xml文件即可。其实就是普通的web工程,只是加入了struts.xml配置文件罢了。因此下一步就要了解struts.xml的写法。

struts的核心功能是Action,用户的action请求通过和struts.xml中的action name进行匹配。匹配成功则调用相关的action的execute函数,再根据execute函数的返回结果,返回struts.xml的相关result页面给客户端。参考网址:http://www.blogjava.net/max/archive/2006/10/25/77157.aspx。如果使用convention插件就可以不用struts.xml进行配置,从而实现零配置。参考:http://wenku.baidu.com/view/0124d40a52ea551810a6873a.html了解convention的约定。

Struts2 无后缀action请求。如果将Struts2的filter-mapping配置成

<filter-mapping>  
    <filter-name>struts2</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>
的话,struts2将可以处理无后缀的action请求,如/demo/hello.action 和/demo/hello 是同样的效果。
这样有时会出现一些问题,将有一些组件映射为无后缀的请求拦截了,如/demo/dwr 请显示对外公布的js方法列表,在struts2拦截后确显示There is no Action mapped for namespace / and action name dwr这种情况下可以在struts.properties中配置struts.action.excludePattern = /dwr.*,/xxx.*属性值是以逗号分隔的正则表达式。

配置action请求后缀的方法:http://wangquanhpu.iteye.com/blog/1462144

如果同时使用convention和rest-plug两个插件但是又想同时使用rest风格和非rest风格的url可参考https://cwiki.apache.org/WW/rest-plugin.html---

REST and non-RESTful URL's Together Configuration进行设置。
注意:conventtion和rest-plug两插件是通过action映射来工作的。在没有rest-plug插件时是使用struts做action映射的,即 struts.mapper.class=struts。
当同时使用rest-plug插件后是使用rest做映射的。可以理解为convention负责映射到类上。struts负责映射到类的execute函数上,而rest负责映射到类的index,create等函数上。
使用 <constant name= "struts.mapper.prefixMapping" value= "/rest:rest,:struts" />时actionurl的namespace不能为'/',这是因为getUri函数得到的是/namespace/actionuri形式的字符串,参考PrefixBaseActionMapper类的getMapping函数可明白namespace不能为‘/’的原因。例如:http://localhost:8080/HelloWorld/rest1/rest2/orders,其中HelloWorld是工程名,/rest1/rest2是命名空间,/orders是actionuri。用getUri得到的是/rest1/rest2/orders。参考PrefixBaseActionMapper类的getMapping函数的源码可知struts.mapper.prefixMapping="/rest1:rest,:struts"或“"/rest1/rest2:rest,:struts”但不能为“/rest2:rest,:struts”
当struts的action的属性与提交的请求中包含的参数的名字相同时,action属性的值就是请求的参数的值。参考: http://blog.csdn.net/waj89757/article/details/7897801理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值