一、struts.xml中<package>的namespace属性的用法

在实际的开发中常会遇到name相同的<action>,如下代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="default" namespace="/" extends="struts-default"><action name="add" class="action.UserAction" method="add"><result >addUser.jsp</result></action><action name="add" class="action.HouseAction" method="add"><result>addHouse.jsp</result></action></package>
</struts>

  以上的配置中在同一个namespace下有两个相同name为add的<action>,这样就不能区别了,为了解决这个问题,我们可以把两个<action>放在不同的namespace下,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="user" namespace="/user" extends="struts-default"><action name="add" class="action.UserAction" method="add"><result >addUser.jsp</result></action></package>
    <package name="house" namespace="/house" extends="struts-default"><action name="add" class="action.HouseAction" method="add"><result>addHouse.jsp</result></action></package>
</struts>

 这样将不同模块放在不同的namespace下就可以区分了,但是在请求action时要URL中的action名前加相应的namespace名,如请求第一个使用:http:localhost:8080/Struts2Demo/user/add

二、使用<include>包含拆分的struts.xml配置文件

在大型项目中往往一个struts.xml配置过于庞大,难于维护,需要将struts.xml进行拆分.

拆分后的struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><include file="struts-house.xml"/><include file="struts-add.xml"/>
</struts>

拆分后的struts-house.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="house" namespace="/house" extends="struts-default"><action name="add" class="action.HouseAction" method="add"><result>addHouse.jsp</result></action></package>
</struts>

拆分后的struts-user.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="user" namespace="/user" extends="struts-default"><action name="add" class="action.UserAction" method="add"><result >addUser.jsp</result></action></package>
</struts>

三、<result>的配置

1.<result>标签中的name属性用法

我们定义的action类继承的Action接口中定义了几种action方法的返回值的静态常量字符串。

1.SUCCESS:表示Action执行成功,显示结果视图给用户。

2.NONE:表示Action执行成功,不显示视图给用户。

3.ERROR:表示Action执行失败,显示错误页面给用户。

4.INPUT:表示Action需要更多的输入信息,回到INPUT对应的页面。

5.LOGIN:表示用户没有正确登陆而没有正确执行,将返回该登陆视图。

当然我们也可以自定义Action方法返回值的类型。会根据返回值寻找不同的result标签。

2.<result>标签中的type属性的用法

使用<result>中的type属性就可以定义以不同的方式输出结果,它默认是"dispatcher",下面是type属性的一些常用配置:

1.dispatcher:请求转发到指定的URL

2.redirect:请求重定向到指定的URL

3.redirectAction:请求重定向到指定的Action

4.chain:Action链式处理,将请求转发到指定的Action

5.json:实现Ajsx时,返回JSON对象。

四、动态结果的配置

现在大家来考虑一个问题:例如在一个项目中分为管理员和普通用户两类,如果管理员登陆成功后跳转到后台管理页面,普通用户登陆成功后跳转到首页,像这种在配置<result>时,结果页面不能确定,需要运行时才能确定该怎么办呢?

下面看这个方法来解决这个问题:

package action;import com.opensymphony.xwork2.ActionSupport;import entity.User;public class DynamicAction extends ActionSupport {private User user;// 下一个跳转到的Actionprivate String nextDispatch;public String login(){if (user.getPassword().equals("common")) {nextDispatch="common";return SUCCESS;} else if (user.getUsername().equals("admin")) {nextDispatch="admin";return SUCCESS;} else {return INPUT;}}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getNextDispatch() {return nextDispatch;}public void setNextDispatch(String nextDispatch) {this.nextDispatch = nextDispatch;}}

  在web.xml中的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="user" namespace="/user" extends="struts-default"><action name="login" class="action.UserAction" method="login"><result name="success" type="redirectAction">${nextDispatch}</result></action><action name="common" class="action.CommonAction"><result  name="success">common.jsp</result></action><action name="admin" class ="action.AdminAction"><result name="success">admin.jsp</result></action></package>
</struts>

在这个配置文件中,使用${nextDispatch}取出了存储在UserAction中的nextDispatch变量的值,然后再根据它的值,使用redirectAction方式重定向到name为common或admin的<action>.

五、struts.xml中全局结果的配置

配置跳转公共错误页面的<result>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="user" namespace="/user" extends="struts-default"><global-results><result name="error">/error.jsp</result></global-results><action name="add" class="action.UserAction" method="add"><result >addUser.jsp</result></action></package>
</struts>

  

转载于:https://www.cnblogs.com/ablejava/p/5656326.html

struts2进阶篇(3)相关推荐

  1. Enterprise Library Step By Step系列(十二):异常处理应用程序块——进阶篇

    一.把异常信息Logging到数据库 在日志和监测应用程序块中,有朋友提意见说希望能够把异常信息Logging到数据库中,在这里介绍一下具体的实现方法. 1.创建相关的数据库环境: 我们可以用日志和监 ...

  2. Docker 数据卷之进阶篇

    Docker 数据卷之进阶篇 原文:Docker 数据卷之进阶篇 笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入, ...

  3. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码...

    原文:C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github. ...

  4. Kafka核心设计与实践原理总结:进阶篇

    作者:未完成交响曲,资深Java工程师!目前在某一线互联网公司任职,架构师社区合伙人! kafka作为当前热门的分布式消息队列,具有高性能.持久化.多副本备份.横向扩展能力.我学习了<深入理解K ...

  5. 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇

    编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...

  6. 最快让你上手ReactiveCocoa之进阶篇

    前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...

  7. SQL Server调优系列进阶篇(如何维护数据库索引)

    前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...

  8. mysql 开发进阶篇系列 10 锁问题 (使用“索引或间隙锁”的锁冲突)

    1.使用"相同索引键值"的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例 ...

  9. Java进阶篇(一)——接口、继承与多态

    前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...

  10. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

最新文章

  1. 使用ASP.NET操作IIS7中使用应用程序
  2. Android 学习笔记--android——AsyncTask在Android4.X的机制问题
  3. MAP 最大后验——利用经验数据获得对未观测量的点态估计
  4. JAVA的知识点4——字符型变量/常量 boolean类型变量/常量
  5. python创建列表_python创建与遍历List二维列表的方法
  6. 使用VS2008进行WEB负载测试
  7. ftp文档服务器设置,ftp服务器基本设置
  8. spark第十篇:Spark与Kafka整合
  9. 我真是个懒人,。。。
  10. 本地搭建Redis集群 windows(图文详解)
  11. 微信小程序高仿京东分类效果完整版(超详细)
  12. 计算机辅助制造期末试题答案,西工大《计算机辅助制造》期末试题2006-2007A答案.doc...
  13. vue 前端导出xlsx文件
  14. 国内著名声学期刊简介
  15. TCP网络错误Connection reset by peer,peer是啥意思呢
  16. PHP给微信二维码 添加背景和昵称 ,微信带参数海报跨坑记录。
  17. 老人与海好词100英文带翻译_老人与海优美段落英文,英文的优美句子,带翻译,越多越好,谢谢...
  18. HTML 动态背景
  19. Bugzilla 使用教程
  20. SQL Server-------数据库恢复技术

热门文章

  1. android ffmpeg4.0.2编译过程记录
  2. 算法7-9:有向图搜索算法
  3. Java基础-----基类Object源码分析
  4. 公司项目NODEJS实践0.1[ ubuntu,nodejs,nginx...]
  5. 学习ubuntu之wget命令
  6. linux文件移出目录命令_Linux移动文件命令F01
  7. BZOJ1185[HNOI2007] 最小矩形覆盖
  8. python perl 正则_为什么说perl的正则表达式功能比Python强大
  9. html使表格位于页面的右下方,在HTML表格的右下角显示一个数字以显示齐平
  10. Mybatis快速入门并实现CRUD操作