`
a453228609
  • 浏览: 35067 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2-- Convention插件

阅读更多

1.1. 设置结果页面路径

默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如:

Xml代码:

<constant name="struts.convention.result.path" value="/WEB-INF/page" />

 

则将路径配置到了WEB-INF/page 下。

1.2. 设置Convention搜索包

默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如:

<constant name="struts.convention.package.locators" value="web,action" />

 

则定义了在项目中,包路径包含webaction的将被视为Action存在的路径来进行搜索。

Com.ustb.web.*/com.ustb.action.*都将被视为含有Action的包路径而被搜索。

接着,Convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类:

com.example.actions.MainAction

com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)

com.example.struts.company.details.ShowCompanyDetailsAction

 

1.3. 命名空间

命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:

Com.ustb.web.user.userAction的命名空间是:”/user”。

Com.ustb.web.user.detail.UserAction的命名空间是:”/user/detail

 

1.4. Actin类名路径分割

Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 

<constant name="struts.convention.action.name.separator" value="-" />

还是举个例子:

UserAction->user  UserDetailAction ->user-detail

结合上面的。

对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/content/user/detail/user-detail.jsp

1.5. 支持jsphtmlhtmvm等格式

struts支持.jsp .html .htm .vm格式的文件。

下面是actiong和结果模版的映射关系:

URL

Result

File that could match

Result Type

/hello

success

/WEB-INF/content/hello.jsp

Dispatcher

/hello

success

/WEB-INF/content/hello-success.htm

Dispatcher

/hello

success

/WEB-INF/content/hello.ftl

FreeMarker

/hello

input

/WEB-INF/content/hello-world-input.vm

Velocity

/hello

error

/WEB-INF/content/test/test2/hello-error.html

Dispatcher

 

以上的内容来自struts2的文档http://struts.apache.org/2.1.6/docs/convention-plugin.html

当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。

 

1.6. @Action注解

 

通过@Action注释

对如下例子:

Java代码

package com.example.web;

 

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionSupport;

 

public class HelloAction extends ActionSupport {

    @Action("action1")

    public String method1() {

        return SUCCESS;

    }

 

    @Action("/user/action2")

    public String method2() {

        return SUCCESS;

}

}

方法名    默认调用路径       默认映射路径

method1  /hello!method1.action .   /WEB-INF/content/hello.jsp

method2  /hello!method2.action.    /WEB-INF/content/hello.jsp

通过@Action注释后

方法名    @Action注释后调用路径    @Action注释 后映射路径

method1  /action1!method1.action.       /WEB-INF/content/action1.jsp

method1  /user/action2!method2.action /WEB-INF/content/user/action2.jsp

 

1.7. @Actions注解

通过@Actions注释,例子:

Java代码

package com.example.web;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

 

public class HelloAction extends ActionSupport {

  @Actions({

    @Action("/different/url"),

    @Action("/another/url")

  })

  public String method1() {

    return “error”;

  }

 

我们可以通过:/different/url!method1.action  /another/url!method1.action 来调用method1 方法。

对应的映射路径分别是

/WEB-INF/content/different/url-error.jsp; /WEB-INF/content/another/url-error.jsp

可能误导了大家,一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。比如对于如下例子:

Java代码

com.example.web;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.convention.annotation.Action;

import org.apache.convention.annotation.Actions;

 

public class HelloAction extends ActionSupport {

  @Action("/another/url")

  public String method1() {

    return “error”;

  }

 

 

我们调用method1方法可以通过两种方式:

1  /hello!method1.action 映射 url/WEB-INF/content/hello-error.jsp

2 /another/url!method1.action 映射 url/WEB-INF/content/another/url-error.jsp

可见,两种方式均可对method1方法进行调用,唯一的区别就是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择。

1.8. @Namespace注解

通过@Namespace 注释

package com.example.web;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

@Namespace("/other")

public class HelloWorld extends ActionSupport {

 

  public String method1() {

    return “error”;

  }

    @Action("url")

  public String method2() {

return “error”;

  }

 

    @Action("/different/url")

  public String method3() {

return “error”;

  }

}

 

 

通过 /other/hello-world!method1.action 访问method1 方法。

通过 /other/url!method2.action 访问method2 方法

通过 /different /url!method3.action 访问method3 方法

@Action 注释不同的是,该注释覆盖了默认的namespace(这里是’/),此时再用hello!method1.action 已经不能访问method1 .

1.9. @Results@Result注解

@Results@Result

1.9.1.全局的(global)。

全局results可以被action类中所有的action分享,这种resultsaction类上使用注解进行声明。

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

 

@Results({

  @Result(name="failure", location="/WEB-INF/fail.jsp")

})

public class HelloWorld extends ActionSupport {

  public String method1() {

    return “failure”;

  }

    @Action("/different/url")

  public String method2() {

    return “failure”;

  }

}

 

当我们访问 /hello -world !method1.action 时,返回 /WEB-INF/fail.jsp

当我们访问 /hello -world !method2.action 时,返回 /WEB-INF/fail.jsp

当我们访问 /different/url!method2.action 时,返回 /WEB-INF/fail.jsp

1.9.2.本地的(local)。

本地results只能在action方法上进行声明。

Java代码

package com.example.actions;

 

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Actions;

import org.apache.convention.annotation.Result;

import org.apache.convention.annotation.Results;

 

public class HelloWorld extends ActionSupport {

    @Action(value="/other/bar",results={@Result(name = "error", location = "www.baidu.com",type="redirect")})

  public String method1() {

    return “error”;

  }

}

 

 

当我们调用 /hello -world !method1.action 时,返回 /WEB-INF/content/hello-error.jsp

当我们调用 /other/bar!method1.action 时,返回 www.baidu.com

 

1.10.            @ParentPackage 注解

ParentPackage注解用来定义具体action类的父XWork包或java包,下面例子演示了在action类上使用本注解:

 

package com.example.actions;

import com.opensymphony.xwork2.ActionSupport; 

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.ParentPackage;

@ParentPackage("customXWorkPackage")

public class HelloWorld extends ActionSupport {

    public String execute() {

        return SUCCESS;

    }

}

 

1.11.            异常注解配置

ExceptionMapping 注解用来影射action抛出的异常。可以参考exception mapping documentation 获得详细信息。注解用类级别,在这种情况下,注解会应用到类里面的所有action

@ExceptionMappings({

@ExceptionMapping(exception = "java.lang.NullPointerException",

result = "success", params = {"param1", "val1"})

})

public class ExceptionsActionLevelAction {

 

    public String execute() throws Exception {

        return null;

    }

}

 

可以在ExceptionMapping注解中使用params 属性来传递具体值给结果渲染页。ExceptionMapping注解同样可以在action级别进行设置:

 

public class ExceptionsMethodLevelAction {

   @Action(value = "exception1", exceptionMappings = {

               @ExceptionMapping(exception = "java.lang.NullPointerException",

result = "success", params = {"param1", "val1"})

    })

    public String run1() throws Exception {

        return null;

    }

}

 

 

1.12.            自动加载无需启动服务

Convention插件可以自动重新加载配置的功能,无需重启容器,就可以刷新类中包含的action。这自动加载automatic xml 配置文件类似。你必须在struts.xml 中添加以下代码来启用本功能:

 

<constant name="struts.devMode" value="true"/>

<constant name="struts.convention.classes.reload" value="true" />

 

此功能没有在所有容器中进行过测试,强力建议不要在生产环境中使用。

1.13.            扫描ActionJar

默认情况下,Convention 插件不会从jar文件中寻找action。如果想实现这一功能,jar文件必须被struts.convention.action.includeJars 所定义的正则 匹配到。在例子中 myjar1.jar myjar2.jar 将被插件检测到:

<constant

name="struts.convention.action.includeJars"

value=".*/myjar1.*?jar(!/)?,.*/myjar2*?jar(!/)?" />

 

提示:正则表达式只针对jar文件的路径进行匹配,而不是文件名。jarURL应该包含jar文件的路径并以"!/"结尾。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoping8411/archive/2010/06/02/5641575.aspx

分享到:
评论

相关推荐

    2008-2020年 中国老年人健康长寿影响因素调查(CLHLS).zip

    中国健康与养老追踪调查CHARLS是一项大型、跨学科的追踪调查项目,旨在收集中国老年人的健康、经济、社会和心理等多方面的信息。 一方面,随着医疗技术的进步和生活水平的提高,越来越多的老年人享受着健康长寿的生活;另一方面,慢性病、失能等健康问题仍然困扰着部分老年人,对他们的生活质量产生了严重影响。 数据年份:2020/2018/2015/2014/2013/2012/2011/2008 追访问卷、用户手册、原始数据等等 2008年两省试调查 2011年全国基线调查 2012年两省追踪调查 2013年全国追踪调查 2014年全国追踪调查(生命历程调查) 2015年全国追踪调查 2018年全国追踪调查 2020年全国追踪调查 Harmonized CHARLS

    基于java的削面快餐店点餐服务系统的设计与实现.docx

    基于java的削面快餐店点餐服务系统的设计与实现.docx

    这是一款基于AR增强现实的APP,包含AR导航,AR标签显示,AR足迹功能(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于java的网上办公自动化系统设计与实现.docx

    基于java的网上办公自动化系统设计与实现.docx

    Chrome 开阔绿地草地主题Canola Flower .zip

    Chrome主题-开阔绿地草地主题

    购物商城项目采用PHP+mysql有以及html+css jq等(毕设&课设&实训&大作业&竞赛&项目)

    购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    小程序&预约报名&家政预约(源码+截图+源码导入教程和视频).zip

    小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&预约报名&家政预约(源码+截图+源码导入教程和视频) 小程序&

    python贪吃蛇游戏

    python贪吃蛇游戏

    基于java Swing+mysql实现简单的购物系统项目(说明文档+视频+源码)

    【作品名称】:基于java Swing+mysql实现简单的购物系统项目(说明文档+视频+源码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:由Java swing实现的一款简单的购物程序,数据库采用的是mysql,该项目非常简单,实现了管理员对商品类型和商品的管理及用户注册登录后浏览商品、加入购物车、购买商品等功能,旨在学习Java 图形界面开发,所以非常适合Java初学者和学生用来学习参考,下面我们来看看如何配置运行; 将项目导入到eclipse(myeclipse也可以) 2.将项目导入后需要进行必要的配置才可以运行,接下来我演示如何配置。 3.接下来配置数据库连接信息,在dbutil里面配置数据库信息。 4.接下来我们来导入数据库文件,采用的是navicat数据库管理工具,如果你 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。

    中低压蒸汽锅炉补水可以用自来水替代软化水或除盐水

    中低压蒸汽锅炉用户使用市政自来水+多效能BF防腐阻垢剂替代软化水或除盐水+阻垢+除氧+调PH值操作,不仅能大幅节省水资源、工业盐、电力、人力,消耗材料,实现节能减排,降本增效,防止地下水资源被污染,保护环境;还能有效解决有效防止锅炉水系统的腐蚀、结垢、失水量大、运行成本高等老大难问题。

    机器学习、深度学习的学习路径及知识总结

    数学基础:包括微积分、线性代数、概率论等对理解机器学习算法有帮助的基本数学。 Python:Python提供了非常丰富的工具包,非常适合学习者实现算法,也可以完成工业环境项目。作为主流的深度学习框架,例如当前最流行的两个AI框架TensorFlow、PyTorch都以Python作为语言首选。另外,主流的在线课程(比如Andrew Ng在Coursera的深度学习系列课程)用Python作为练习项目的语言。在这部分,我将包括Python语言基础和机器学习常用的几个库,包括Numpy、Pandas、matplotlib、Scikit-Learn等。 机器学习:介绍主流的机器学习算法,比如线性回归、逻辑回归、神经网络、SVM、PCA、加权算法等等。 深度学习:介绍原理和常见的模型(如CNN、RNN、LSTM、GAN等)和深度学习的框架(TensorFlow、Keras、PyTorch)。 强化学习:介绍强化学习的简单原理和实例。 实践项目:这里将结合几个实际项目的演示比较完整的讲解。另外结合Kaggle、阿里云天池演示演示。 阅读论文:如果你追求更高、更深入的研究时,看深度学习各细分领域的

    c语言文件读写操作详细教程和源代码带注释.txt

    c 在C++中,有许多经典程序示例,可以用于学习和实践。下面是一个简单的示例,演示了如何使用C++标准库中的输入输出流(iostream)进行基本的输入输出操作。 示例:Hello, World! 程序 #include <iostream> // 引入输入输出流库 int main() { std::cout << "Hello, World!" << std::endl; // 输出 "Hello, World!" 到控制台 return 0; // 程序执行成功 } ### 示例:加法计算器 #include <iostream> int main() { int num1, num2, sum; // 提示用户输入两个整数 std::cout << "Enter two integers to add: "; std::cin >> num1 >> num2; // 从标准输入读取两个整数 // 计算和 sum = num1 + num2; // 输出结果 std::cout << "Th

    java-ssm+vue校园快递快领服务系统实现源码(项目源码-说明文档)

    管理员登录,通过填写用户名、密码、权限等信息,输入完成后选择登录即可进入校园快领服务系统 管理员登录进入校园快领服务系统可以查看首页、个人中心、快递员管理、学生管理、快递信息管理、取货信息管理、订单信息管理、接单信息管理、服务评价管理、订单投诉管理、留言板管理、论坛管理、系统管理等内容 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

    基于SSH源码,升级ssm源码官网,业务上有所增强.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    HFSS-MATLAB-API工具库

    HFSS-MATLAB-API工具库及使用实例——矩形微带贴片模型

    基于java的的个人博客网站的设计与实现设计与实现.docx

    基于java的的个人博客网站的设计与实现设计与实现.docx

    #_ssm_138_mysql_学生选课管理系统_.zip

    均包含代码,文章,部分项目包含ppt

    java-ssm+vue医院住院管理系统实现源码(项目源码-说明文档)

    预约住院系统,用户就可以在网上预约医院的专家、专科号。它能更好的改善就医环境,简化就医环节,节约就医时间,真正体现了以病人为中心,切从方便患者出发,符合当今医院人性化温馨服务的理念。本医院住院管理系统采用的数据库是Mysql,使用SSM框架开发。 医院住院管理系统,在医院住院管理系统首页可以查看首页、医护人员、药品信息、健康讲坛、个人中心、后台管理、医疗交流等内容 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

    毕业设计-大数据Spark平台的在线性能检测与调优.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于java的民宿住宿管理系统设计与实现.docx

    基于java的民宿住宿管理系统设计与实现.docx

Global site tag (gtag.js) - Google Analytics