struts2 零配置Word文件下载.docx
- 文档编号:19623578
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:14
- 大小:21.13KB
struts2 零配置Word文件下载.docx
《struts2 零配置Word文件下载.docx》由会员分享,可在线阅读,更多相关《struts2 零配置Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
5.
filter-class>
com.demo2do.lighturl.LightURLFilter<
/filter-class>
6.<
/filter>
7.
8.<
URL
Definition
9.<
filter-mapping>
10.
11.
url-pattern>
/*<
/url-pattern>
12.<
/filter-mapping>
<
--StrutsFilter-->
--StrutsURLDefinition-->
3.需要指定你的actionpackage所在位置和一些基本配置
这一步一般在struts.properties中完成。
你可以建一个struts.properties的配置文件,并放到classpath下,并指定如下配置
1.##
action
package
config
2.lighturl.action.packages=com.demo2do.lighturl.action
3.
4.##
mapping
implementation
class
5.struts.mapper.class=com.demo2do.lighturl.LightURLActionMapper
6.
7.##
default
parent
8.lighturl.action.default.parent.package=struts-config
9.
10.##
define
your
entity
(optional)
11.#
lighturl.entity.package=com.demo2do.lighturl.entity
##actionpackageconfig
lighturl.action.packages=com.demo2do.lighturl.action
##actionmappingimplementationclass
struts.mapper.class=com.demo2do.lighturl.LightURLActionMapper
##defaultparentpackage
lighturl.action.default.parent.package=struts-config
##defineyourentitypackage(optional)
#lighturl.entity.package=com.demo2do.lighturl.entity
在完成以上的步骤后,lighturl的所有配置即告完成,现在你已经可以使用所有lighturl所提供的特性。
Namespace,ActionName和URL映射
lighturl所提供的最基本的特性是根据你的Action所在的package,确定namespace和actionName,并进行对应的URL映射。
举例说明,你在上面所讲述的struts.properties中,已经指定了你的actionpackage
1.lighturl.action.packages=com.demo2do.lighturl.action
那么,如果你有以下的Action类,那么lighturl将根据如下的规则来确定每个Action类所对应的namespace,actionName和url映射关系
1.根据lighturl.action.packages的配置的package到你的Action类的相对package来确定namespace,如果其中有驼峰法命名,那么转化成"
-"
连接的单词
∙com.demo2do.lighturl.action.Index
---->
/
∙com.demo2do.lighturl.action.user.Search---->
/user
∙com.demo2do.lighturl.action.blog.category.Index---->
/blog/category
∙com.demo2do.lighturl.action.accoutDetail.View---->
/account-detail
2.将Action类的类名转化成actionName。
如果碰到的Action类以"
Action"
结尾,则去掉末尾的"
,如果其中有驼峰法命名,那么转化成"
∙com.demo2do.lighturl.action.Index---->
index
∙com.demo2do.lighturl.action.user.SearchAction---->
search
∙com.demo2do.lighturl.action.blog.CategoryBlog---->
category-blog
3.将namespace与actionName拼起来,就成构成映射到具体Action类的url
∙http:
//host:
port/app/user/index--->
com.demo2do.lighturl.action.user.Index
port/app/blog/category-blog--->
com.demo2do.lighturl.action.blog.CategoryBlog
上面的这种URL匹配方式,我称之为:
package匹配
特殊形式的URL
应该说根据package来进行Action映射,可以解决绝大多数从url到action的映射配置问题。
不过有的时候,我们可能需要支持一些特殊形式的url。
LightURL在默认情况下,支持下列2种特殊形式的URL
1.支持将名为Index的Action直接映射到package上
这种匹配我称之为:
Namespace匹配。
这一个特性很直观。
如果你在某个Action的package下面有一个名为Index的Action类,那么如果你直接访问这个package,那么你可以访问到这个类:
∙com.demo2do.lighturl.action.Index--->
http:
port/app/
∙com.demo2do.lighturl.action.user.Index--->
port/app/user
∙com.demo2do.lighturl.action.blog.category.Index--->
port/app/blog/category
2.支持类似:
/entity/${id}形式的URL
这种匹配我通常称之为:
entity匹配。
这个特性也比较简单,如果你有某个entity,并且在你的Actionpackage下有一个与entity同名的package。
同时在这个package下有一个叫View的Action,那么上述形式的URL会被映射到该Action。
∙com.demo2do.lighturl.action.user.View--->
port/app/user/3456
∙com.demo2do.lighturl.action.blog.View--->
port/app/user/1113
你可以通过在struts.properties中指定你entity所在的package来对哪些url可以具备这些特性,如果你输入的url不在你所指定的package中含有entity,那么这个url将无法被识别。
针对有些情况,数据库的主键可能不是数字。
此时,你可以通过自己实现com.demo2do.lighturl.config.EntityPrimaryKeyIdentifier的接口来指定你的url中id具备什么特点。
默认的实现是将主键识别为数字。
使用Annotation来指定映射
除了上述这些基本特性以外,还可以通过Annotaion来指定URL映射。
目前情况下,LightURL所支持的Annotation有两种类型:
1.URL完整匹配
URL完整匹配是指如果某个url完整匹配于Annotation中所指定的内容,那么这个URL将被映射到Annotation所在的Action类的method
1.package
com.demo2do.lighturl.action.user;
3.import
com.demo2do.lighturl.annotation.Action;
4.import
com.opensymphony.xwork2.ActionSupport;
6./**
*
@author
Downpour
8.
*
*/
10.public
Search
extends
ActionSupport
{
12.
private
static
final
long
serialVersionUID
=
-1728616675239859226L;
13.
14.
/*
(non-Javadoc)
15.
@see
com.opensymphony.xwork2.ActionSupport#execute()
16.
17.
@Override
18.
@Action("
/all/search-user"
)
19.
public
String
execute()
throws
Exception
20.
return
super.execute();
21.
}
22.
23.}
packagecom.demo2do.lighturl.action.user;
importcom.demo2do.lighturl.annotation.Action;
importcom.opensymphony.xwork2.ActionSupport;
/**
*@authorDownpour
*
*/
publicclassSearchextendsActionSupport{
privatestaticfinallongserialVersionUID=-1728616675239859226L;
/*(non-Javadoc)
*@seecom.opensymphony.xwork2.ActionSupport#execute()
@Override
@Action("
)
publicStringexecute()throwsException{
returnsuper.execute();
}
}
例如,上述的Action类有一个Annotation,那么这个Action和method将被映射到对应的URL:
port/app/all/search-user。
注意,此时,虽然从url上来看,这是一个没有什么规则的url,但是其所对应的namespace和actionName还是根据com.demo2do.lighturl.action.user.Search来进行计算的。
2.URLTemplate
URLTemplate是指,url可以匹配Annotaion中指定的某种URLTemplate,并将其中的可变部分作为参数映射到Action中。
com.demo2do.lighturl.action.blog;
Category
-1535992103374733252L;
Long
id;
int
year;
month;
day;
23.
24.
25.
26.
/blogs/${year}/${month}/${day}"
27.
28.
29.
30.
31.
/blog/${id}/edit"
32.
edit()
33.
34.
35.
//
setters
and
getters
36.
37.}
packagecom.demo2do.lighturl.action.blog;
publicclassCategoryextendsActionSupport{
privatestaticfinallongserialVersionUID=-1535992103374733252L;
privateLongid;
privateintyear;
privateintmonth;
privateintday;
publicStringedit()throwsException{
//settersandgetters
在上述的例子中,可以发现,在Annotation中所指定的内容是一个URLTemplate,如果你有一个url,可以匹配上面的URLTemplate,那么url将匹配到这个Action的method,并且将对应位置的值注入到Action中的同名参数中。
针对上面的例子:
port/app/blogs/2008/08/07将被映射到这个Action的execute,并且2008,08和07分别映射到year,month和day中。
port/app/blog/2345/edit将被映射到Action的edit方法,并且2345映射到id中作为参数
URL的匹配顺序与重复配置的校验
在上面的例子中,介绍了那么多的url映射到Action中的方式。
他们之间可能会出现冲突,有些冲突,LightURL会在系统启动时为你检查出来,并强制要求你纠正它,而有些冲突,则通过优先级匹配的方式进行。
下列冲突将被认为是你必须在系统启动前就进行纠正的:
1.Annotation中定义的URLTemplate互相之间冲突
例如:
/blogs/${year}/${month}/${day}和/blogs/${category}/${id}/edit就是冲突的。
2.Annotation中定义的URLTemplate与其他Annotation中定义的完全匹配URL冲突
/blogs/${year}/${month}和/blogs/category/index就是冲突的。
3.Annotation中定义的URLTemplate与形如/entity/${id}的url定义冲突
/user/${id}形式的Annotation定义可能会与系统默认支持的冲突。
在其他情况下,如果你定义的URL映射互相直接有冲突,那么LightURL将根据某个顺序进行URL匹配,并找到第一个匹配的映射方式,然后放弃查找。
这个顺序为:
1.首先进行Namespace匹配,如果url恰好能匹配某个namespace,并且其对应的package下有Index作为Action,那么直接进行匹配。
2.其次查看所有的Annotation定义中,是否存在完整的URL匹配,如果找到,那么进行直接匹配。
3.接着进行package匹配,将url分解成相应的namespace和actionName,与已有的配置进行匹配,如果找到,那么直接匹配。
4.然后进行entity匹配,看看url是否形如:
/entity/${id},如果是,那么直接匹配。
5.最后进行Annotation定义的UrlTemplate匹配。
如果所有的五种情况都无法进行匹配,那么这个URL将无法被LightURL识别,继续交由Struts2进行后续处理。
上面所描述的内容都是Url到Action的映射。
下面的部分,描述的是如何在Action执行完毕之后,转到相应的结果view。
Codebehind
LightURL支持codebehind。
有关codebehind的相关知识,可以参考struts2的相关文档:
//struts.apache.org/2.x/docs/codebehind-plugin.html
有了codebehind的支持,那么从Action转到类似jsp,ftl或者vm的view层组件就不需要任何配置,只要符合一定的命名规范,就可以直接进行转向。
ResultCode的识别
但是在很多情况下,我们需要的是全方位的Result类型的支持。
例如,有的时候我们需要返回JSONResult,有的时候,我们可能需要Redirect到一个新的Action。
此时,我们不得不为此增加一些配置,或者借助Annotation来完成。
为此,LightURL提供了一种根据ResultCode进行识别的命名方式来匹配你所指定的Result。
以JSONResult为例,你可以这么写:
com.demo2do.lighturl.entity.User;
10.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 零配置 配置