- 浏览: 458731 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (354)
- 面向对象分析设计/系统架构 (12)
- Mysql/Orcal11g (13)
- JSP/Java//Python/Xharbour (66)
- 软件测试 (21)
- 信息安全小知识 (1)
- Android (5)
- IT生活/哲学/兵法 (23)
- 软件工程/UML/需求分析学习与实践 (6)
- 操作系统/网络/组成原理 (9)
- 持续集成Maven/Hudson/自动化测试 (9)
- eBay /Paypal developer (10)
- Hadoop/HBase/Solr (0)
- 重构分析及其思考 (2)
- 企业架构 (7)
- 分析模式/设计模式 (4)
- SSH学习笔记 (1)
- Quartz及其JWatch监控 (0)
- Linux服务器 (0)
- ExtJs学习笔记 (1)
- 重读java编程思想 (3)
- ESB/SOA/WebServices (0)
- SpringMVC/Struts/Hibernate/Spring (7)
- Xharbour/Pelles C/ SQLite3 (0)
- Magento 电商 (1)
- Object C (1)
- note/redis (0)
- SpringBoot (0)
最新评论
-
snow8261:
太粗略了。
企业架构之数据架构 -
haithink:
面试成功没?
JVM 加载Class文件的原理及其机制 -
feisi0003731843:
不好意思我没有重启,重启后好多了,可有的地方回放还是不成功的。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
feisi0003731843:
这个好像不行吧,我试过了不好使啊。还是用id来做的。不能用啊。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
yuchensuifeng:
您好,静态页面是可以的,但是,我指定error-page为js ...
JSP创建错误处理页面
基于Struts2的开发,如果没有足够的经验和规范做支撑,并不能带很多的好处.
1).Action类及Action Name的命名规范
Action类的后缀统一加上"Action",
Action的Name与类的名称保存一致,但不要"Action"的后缀。
这样是为了通过Action的调用url,很方便的找到Action类。
2). 每个项目都必须至少有一个公共的Action类,GenericAction
公共的Action类完成如下的功能:
1. 获取、注入request
2. 获取、注入Session
3. 错误页面跳转
4. 获取在线用户和会员的信息(个人信息、权限、角色)
5. 注入类型转换的格式转换类,如日期类型转换:ConvertUtil.register(new DateConverter(),Date.class);
6. 获取系统配置信息,如公用变量
7. 对于request参数的处理等
8. 其他可扩展的操作
3). 擅长使用Dispatch的模式
有人说Action,不就是Dispatch的延伸吗,其实还可以做的更好
典型的模式如下:
1. 页面表单的Hidden参数中,就是一个ID,如queryID="queryUser" Action="/paginate.action"
2. PaginateAction的模板如下
3. 在Struts.xml中进行配置与queryID向对应:
实战代码如下:
4)配置文件的目录结构
[img] http://dl.iteye.com/upload/picture/pic/63829/fdacff3f-dd6c-3966-a54c-493f8853ff91.bmp[/img]
5) 不断的提炼公用的Action,并放在一个package中:
如上传、下载、异常处理、excel数据录入、过滤、截取器等等
6) 将一个模块中的Action放置在一起
7) 擅于使用redirect来保持request参数。
使用redirect一样可以将request参数传递到一个页面中,不需要使用session。viewPost?postid=${postid}
8) 灵活使用Chain模式,来编写简短而高度重用的Action,把相关的几个action链接起来,共同完成一个功能。
同一个Chain的多个action间数据的传递非常方便,由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用,上一个Action的成员变量。
9) 编写简洁而高度重用的Action的另一个方法,就是将页面的渲染,格式转换的逻辑,抽取出来,自定义成Result。
官方的Result
1. Chain Result --用于Action Chaining
2. Dispatcher Result -- 用于JSP整合
3. FreeMarker Result -- 用于FreeMarker整合
4. HttpHeader Result - 用于控制特殊的HTTP行为
5. JasperReports Result - 用于 JasperReports 整合
6. Redirect Result - 用于直接跳转到例外的URL
7. Redirect Action Result - 用于直接跳转到另外的action
8. Stream Result - 用于向浏览器返回一个InputStream (一般用于文件下载)
9. Velocity Result - 用于 Velocity 整合
10. XSL Result - 用于 XML/XSLT 整合
11. PlainText Result - 用于显示某个页面的原始的文本 (例如 jsp, html 等)
12. Json Result
13. JFreechart Result
10) 明确Action类不要超长,如不要超过500行代码。
1).Action类及Action Name的命名规范
Action类的后缀统一加上"Action",
Action的Name与类的名称保存一致,但不要"Action"的后缀。
这样是为了通过Action的调用url,很方便的找到Action类。
<action name="searchUser" class="com.demo.search.action.SearchUserAction"> <result name="search">/domain/search.jsp</result> </action>
2). 每个项目都必须至少有一个公共的Action类,GenericAction
公共的Action类完成如下的功能:
1. 获取、注入request
2. 获取、注入Session
3. 错误页面跳转
4. 获取在线用户和会员的信息(个人信息、权限、角色)
5. 注入类型转换的格式转换类,如日期类型转换:ConvertUtil.register(new DateConverter(),Date.class);
6. 获取系统配置信息,如公用变量
7. 对于request参数的处理等
8. 其他可扩展的操作
3). 擅长使用Dispatch的模式
有人说Action,不就是Dispatch的延伸吗,其实还可以做的更好
典型的模式如下:
1. 页面表单的Hidden参数中,就是一个ID,如queryID="queryUser" Action="/paginate.action"
2. PaginateAction的模板如下
private String queryID; public String execute(){ //获得Service的接口 //根据queryID调用分页查询方法 return queryID; //这一点,就是动态跳转,在Action不明确注明"success"之类的跳转名称。 }
3. 在Struts.xml中进行配置与queryID向对应:
<action name="paginate" class="com.gehc.util.pagination.PaginateAction"> <result name="queryUser">/demo/userList.jsp</result> <result name="queryIssue">/pm/issue/allIssue.jsp</result> </action>
实战代码如下:
public String execute(){ if(queryID != null){ Map params = prepareParams(); int pageSize = RequestUtil.getCurrentRowsDisplayed(request); PageinatedList results = queryDao.queryByPagination(queryID,params,pageSize); RequestUtil.initLimit(request,results.getPageSize(),results.size()); request.setAttribute("records",results); forword = StringUtil.isValidStr(forward) ? forward : queryID; return forward; }else{ return forwardError("查询ID号不能为空"); } }
4)配置文件的目录结构
[img] http://dl.iteye.com/upload/picture/pic/63829/fdacff3f-dd6c-3966-a54c-493f8853ff91.bmp[/img]
5) 不断的提炼公用的Action,并放在一个package中:
如上传、下载、异常处理、excel数据录入、过滤、截取器等等
6) 将一个模块中的Action放置在一起
7) 擅于使用redirect来保持request参数。
使用redirect一样可以将request参数传递到一个页面中,不需要使用session。viewPost?postid=${postid}
public String execute() throws Exception{ name = jiangduxi;//给药传递的参数赋值 return SUCCESS; //默认页面 //return "redirect_1"; //重定向(不带参数)showInfo.do //return "redirect_2"; //重定向(带固定参数xxx)showInfo.do?name=xxx //重定向(带动态参数,根据struts.xml的配置将${name}赋值为XXX)最后showInfo.do?name=xxxx //return "redirect_3"; //return "redirect_4";//这个是重定向到一个action }
<action name="login" class="LoginAction"> <result name="success" type="velocity">/pages/logok.vm</result> <result name="redirect_1" type="redirect">showInfo.do</result> <result name="redirect_2" type="redirect">showInfo.do?name=xxxx</result> <result name="redirect_3" type="redirect">showInfo.do?name=${name}</result> <result name="redirect_4" type="redirect"> <param name="actionName">showInfo</param> <param name="name">${name}</param> </result> <action>
8) 灵活使用Chain模式,来编写简短而高度重用的Action,把相关的几个action链接起来,共同完成一个功能。
同一个Chain的多个action间数据的传递非常方便,由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用,上一个Action的成员变量。
<action name="step1" class="test.Step1Action"> <result name="success" type="chain"> step2.action</result> </action> <action name="step2" class="test.Step2Action"> <result name="success">finish.jsp</result> </action>
9) 编写简洁而高度重用的Action的另一个方法,就是将页面的渲染,格式转换的逻辑,抽取出来,自定义成Result。
官方的Result
1. Chain Result --用于Action Chaining
2. Dispatcher Result -- 用于JSP整合
3. FreeMarker Result -- 用于FreeMarker整合
4. HttpHeader Result - 用于控制特殊的HTTP行为
5. JasperReports Result - 用于 JasperReports 整合
6. Redirect Result - 用于直接跳转到例外的URL
7. Redirect Action Result - 用于直接跳转到另外的action
8. Stream Result - 用于向浏览器返回一个InputStream (一般用于文件下载)
9. Velocity Result - 用于 Velocity 整合
10. XSL Result - 用于 XML/XSLT 整合
11. PlainText Result - 用于显示某个页面的原始的文本 (例如 jsp, html 等)
12. Json Result
13. JFreechart Result
10) 明确Action类不要超长,如不要超过500行代码。
发表评论
-
java实现读取文件下所有的excel文件
2012-08-10 09:30 2094最近处理一个压缩包,里面有几百上千个excel文件。本来 ... -
在firefox浏览器下出现如果引用外部连接不存在会隐藏红叉
2012-07-23 15:38 996在firefox下引用出错的一些图片会隐藏红叉。而在IE下 ... -
java 字符替换的一些问题值得记录下
2011-09-30 16:40 888最近在处理一些字符串的替换中发生的一些问题。 最近需要临 ... -
ExtJs学习之弹出框,提示框,输入框等框
2011-06-23 22:13 93881.ExtJs之消息框: 语法:Ext.MessageB ... -
FreeMarker学习之概念
2010-08-04 10:12 863FreeMarker概述: 引用 1. ... -
HTML标准属性
2010-07-03 20:35 758核心属性(Core attributes) 以下标签 ... -
HTML标签
2010-07-03 20:14 1029HTML 4.01 / XHTML 1.0 参考手册 按字母 ... -
HTML基础
2010-07-03 00:54 776基于Web前端技术是有HTML静态语言向现在的JaveSc ... -
第一次的Struts2的一个异常记录
2010-05-28 14:22 1062在配置正确struts.xml、web.xml、Action类 ... -
Java处理Excel全解一
2010-05-25 10:00 2192在获取客户需求的时候 ... -
Java EE 6 规范之平台概述
2010-05-22 21:28 2217JavaTM平台企业版(Java EETM)的概述 体系结构 ... -
Python3入门学习
2010-05-14 14:51 2241在学习一门计算机语言的时候,首先接触的入门程序基本上都是& ... -
Python3操作文件,目录和路径
2010-05-14 11:48 35111.遍历文件夹和文件 ... -
内存溢出
2010-04-22 14:23 1428java SE应用程序共同的问 ... -
JPA之ManyToMany的处理
2010-04-18 14:17 4514在处理关系中,最为麻烦的可能是多对多的关系处理,因为多对多 ... -
JPA之OneToOne关系处理
2010-04-18 14:05 3950在很早学习关系数据库的时候学过一对多,多对一,一对一,多对多的 ... -
JPA之OneToMany和ManyToOne处理
2010-04-18 13:52 18931前面介绍和总结了JPA ... -
JPA学习之二(入门篇)
2010-04-16 10:48 3767简单总结下,JPA的入门。在学习JPA的时候运用参考Hib ... -
JPA2.0的学习一
2010-04-15 17:18 8640Java EE 5平台引入了Java ... -
读取Properties文件的一些方法
2010-03-13 22:53 1169读取Properties文件常见的 ...
相关推荐
例如,在使用Struts2进行开发时,可以按照手册的建议编写清晰的Action和Interceptor,确保异常处理得当,同时利用手册的性能优化技巧,优化Struts2框架的使用,降低系统开销。 在实际项目中,通过阅读《阿里Java...
综上所述,Struts2案例不仅涵盖了框架的基本使用,还强调了代码规范和调试技巧,通过学习和实践,你可以更好地理解和掌握Struts2在实际项目中的应用。在struts2qs这个压缩包文件中,可能包含了相关的源代码、配置...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Struts1的基础上进行了很多改进和...通过深入学习和实践Struts2教程,你可以更好地掌握web应用程序的开发技巧,提升项目开发效率。
通过阅读Struts2.3.4 API文档,开发者可以了解到每个类、接口、方法的详细说明,包括参数类型、返回值、异常和注释,这有助于编写出符合Struts2规范的代码。同时,它还提供了实例和最佳实践,帮助开发者避免常见错误...
Struts2+Hibernate新闻发布后台管理系统源代码是一款基于Java EE技术栈的...开发者可以通过分析和学习源代码,掌握Struts2和Hibernate的整合技巧,以及后台管理系统的设计和实现方法,为自己的项目开发积累宝贵经验。
Struts2的核心设计思想是为了简化Java Web应用程序的开发过程,提高开发效率和代码质量。 - **历史背景**:Struts2项目最初由WebWork项目和Struts1项目合并而成。WebWork是一个更灵活、功能更强大的框架,在2005年...
在企业级Java开发中,Struts2、JPA(Java Persistence API)和Spring框架的整合是常见的技术栈选择,它们各自扮演着不同的角色,共同构建出强大的MVC(Model-View-Controller)架构应用。Struts2作为表现层框架,...
JavaEE源代码与Struts2源代码是JavaWeb开发中的重要组成部分,对于深入理解Web应用程序的构建和运行机制至关重要。JavaEE(Java Platform, Enterprise Edition)是Java平台的一个版本,专为开发和部署企业级应用而...
- **Struts2的角色**:Struts2作为一个基于组件的框架,相比于传统的Servlet-JSP或Struts1,它更加注重解耦和代码的重用性,同时也支持AJAX等新兴技术,使得Web应用开发变得更加高效和灵活。 #### 三、Struts2的...
《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...
在Web应用开发中,Struts2框架因其强大的功能和灵活的配置受到广大开发者青睐。本文将深度解析Struts2框架中页面取值的多种方式及核心标签的使用技巧,帮助开发者更高效地进行页面与后台交互。 #### 页面取值的四种...
Struts2和Ajax是两种在Web开发中广泛使用的技术,它们各自有着独特的功能,并且能够协同工作以提供更优秀的用户体验。Struts2是一款强大的MVC(Model-View-Controller)框架,它使得Java Web应用程序的开发更为规范...
在IT行业中,S2SH框架整合是Web应用开发中一种常见的技术栈,它结合了Spring、Hibernate和Struts2三个强大的开源框架。本资源提供的"最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)",旨在帮助开发者理解和实践...
Struts2是一个强大的MVC(模型-视图-控制器)框架,它被...总的来说,Struts2框架结合MyEclipse,使得Java Web开发变得更加高效和规范。通过掌握Struts2的核心概念和实践技巧,开发者可以快速构建功能完善的Web应用。
本篇将基于“Struts2-Portlet学习手册”这一资料深入探讨如何使用Struts2进行Portlet开发,并重点介绍Struts2-Portlet的核心概念、架构设计以及实践案例。 #### 二、Struts2-Portlet概述 **Struts2-Portlet**是...
Struts2不仅提供了一套完整的解决方案来解决常见的Web开发问题,还通过引入许多新特性增强了开发效率和代码质量。 #### 三、Struts2框架的关键特点 1. **MVC模式**:Struts2遵循MVC设计模式,将应用程序逻辑划分为...
**Struts开发** 1. **创建Action类**:每个Action类对应一个用户操作,处理特定的业务逻辑。 2. **编写ActionForm**:ActionForm类用于接收和验证用户输入。 3. **配置struts-config.xml**:定义Action、...