自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (107)
  • 收藏
  • 关注

转载 研究研究加密-准备-网上摘录1-【加密算法的安全性及破解复杂度的表格】

转载的:今天在网上看到一个关于加密算法的安全性及破解复杂度的表格,特摘录下来以便日后参考使用,原表是英文的,这里直接翻译成中文方便查阅。另外还找了一些关于密码学相关的信息,附录在后。加密算法的安全级别(Security Level of Cryptographic Algorithms) 安全级别 (Security Level) 工作因素 ...

2019-06-16 00:58:38 302

原创 客户端发布测试

测试

2010-11-09 10:07:00 395

翻译 一个写文件的java类

package com.thams.framework.util;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import jav

2008-10-29 10:42:00 967 2

原创 自己打包jdk到j2ee服务器 只需要修改run.bat文件即可

自己打包jdk到j2ee服务器中,只要用jboss、tomcat等免费服务器的同事们,就会碰到这样的问题。 现在贴下自己总结的给大家分享:以jboss为例  第一步: 需要把jdk目录拷贝到jboss目录中比如起名叫jdk1.5.0_06 目录结构如下: jboss-4.0.3SP1----| ..bin                           

2008-10-23 00:38:00 952

原创 基于Spring+Ibatis的安全线程实现

基于Spring+Ibatis的安全线程实现       过去做过一些基于spring、hibernate整合应用的实例,本人感觉spring与hibernate最好的结合就是泛型Dao的实现,代码量节省了一半,而且业务逻辑一目了然。       后来做别的系统时候考虑过这样的框架,但是数据库结构如果不固定,动态生成的东西比较多这个时候只好放弃了hibernate而选择了同样具有orm性能

2008-06-29 00:53:00 970

翻译 HTML DOM Window 对象

Window 对象Window 对象是 JavaScript 层级中的顶层对象。Window 对象代表一个浏览器窗口或一个框架。Window 对象会在 或 每次出现时被自动创建。有关 Window 对象的详细描述。IE: Internet Explorer, F: Firefox, O: Opera.Window 对象的集合

2008-06-28 10:19:00 503

翻译 HTML DOM 参考

JavaScript 对象  对象 描述 Window JavaScript 层级中的顶层对象。Windows 对象会呈现 (represent) 一个浏览器窗口。每当 或者 标签出现,Window 对象就会

2008-06-28 10:16:00 409

翻译 JavaScript 事件参考

事件句柄HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。FF: Firefox, N: Netscape, IE: Internet Explorer

2008-06-28 10:14:00 367

翻译 JavaScript 函数参考(全局对象)

JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。全局对象不是任何对象的属性,所以它没有名称。全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。顶层函数(全局函数)FF: Firefox, N: Netscape, IE: Internet Explorer

2008-06-28 10:13:00 588

原创 JavaScript Number 对象参考

在 JavaScript 中,数字是一种基本的数据类型。JavaScript 支持 Number 对象,该对象是原始数值的包装对象。在必要时,JavaScript 对自动地在原始数据和对象之间转换。构造函数 Number() 可以不与运算符 new 一起使用,而直接作为转化函数来使用。以这种方式调用 Number() 时,它会把自己的参数转化成一个数字,然后返回转换后的原始数值(或

2008-06-28 10:11:00 397

翻译 JavaScript RegExp 对象参考

RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。RegExp 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer 方法 描述 FF N I

2008-06-28 10:11:00 434

翻译 JavaScript Boolean 对象的参考

Boolean 对象是 JavaScript 的一种基本数据类型。Boolean 对象是一个把布尔值打包的布尔对象。Boolean 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer 方法 描述 FF

2008-06-28 10:09:00 376

翻译 JavaScript Math 对象的参考

Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。Math 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer 方法 描述

2008-06-28 10:09:00 484

翻译 JavaScript Array 对象的参考

Array 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer 方法 描述 FF N IE concat(

2008-06-28 10:08:00 468

原创 JavaScript Date 对象参考

Date 对象是 JavaScript 的一种内部数据类型。Date 对象没有可以直接读写的属性,所有对日期和时间值的访问都是通过其方法执行的。请从下面的表格访问有关 Date 对象的方法的详细信息。Date 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer

2008-06-28 10:06:00 521

翻译 JavaScript String 对象参考

字符串是 JavaScript 的一种基本的数据类型。String 对象的 length 属性声明了该字符串中的字符数。String 类定义了大量操作字符串的方法。需要注意的是,JavaScript 的字符串是不可变的,String 类定义的方法都不能改变字符串的内容。String 对象的方法FF: Firefox, N: Netscape, IE: Internet

2008-06-28 10:04:00 512

原创 EXT类详解

12.1 Ext类       Ext类是ExtJS框架的核心实用工具类,在应用程序中经常用到,该类相当于客户端程序与ExtJS框架的一个中间人,很多时候要与系统中运行的Ext控件打交道都需要借助于Ext类。Ext类是一个全局的实用工具类,不需要进行初始化,直接引用即可。比如我们示例中调用Ext类的onReady()来指定在ExtJS框架加载完后执行什么函数,我们可以使用Ext.get("h

2008-05-27 23:26:00 1979 1

原创 用Delphi实现将纯文本资料转入数据库

用Delphi实现将纯文本资料转入数据库     p>  在我们日常工作中,常会碰到这样一个难题:一大堆收集好的纯文本格式,比较规整的资料怎样才能将它们分离,转到自己已经建好的数据库中进行管理呢?       例如,有一段人事档案资料archive.txt,内容如下:       小许   男   21   工程师       小吴   女   23   助理工程师       小蔡   男  

2007-08-26 13:59:00 714

原创 JSTL使用入门

 

2007-07-24 01:19:00 555

原创 泛型dao 详细剖析 泛型DAO类设计模式(2)

Generic Data Access Objects    普通数据访问对象,这个是Hibernate官方网站上面的一个DAO类的设计模式,基于JDK5.0范型支持,文章地址如下:http://www.hibernate.org/328.html我下面的代码与Hibernate官网上提供的有点不同。首先定义DAO类的接口IGenericDAO,该接口定义了共同的CRUD操作:

2007-06-17 16:43:00 1020

原创 泛型dao 详细剖析

由于 Java™ 5 泛型的采用,有关泛型类型安全 Data Access Object (DAO) 实现的想法变得切实可行。在本文中,系统架构师 Per Mellqvist 展示了基于 Hibernate 的泛型 DAO 实现类。然后展示如何使用 Spring AOP introductions 将类型安全接口添加到类中以便于查询执行。对于大多数开发人员,为系统中的每个 DAO 编写几乎相同

2007-06-17 16:41:00 2380 2

原创 AOP 解决紧密耦合的难题

许多 Java 开发人员已经接受了面向方面编程(AOP)的非强制性风格和灵活性,特别是在用于建立高度松散和可扩展的企业系统时。在本文中,您将看到 AOP 的功能设计概念之一(静态横切)如何把可能是一大堆混乱的紧密耦合的代码转变成一个强大的、可扩展的企业应用程序。在将商业需求转换成软件功能的快速开发周期中,面向方面是一种可以利用的强有力的设计原理。通过将首要的设计重点从面向对象编程(OOP)的传

2007-06-17 16:23:00 583

原创 使用AOP实现类型安全的泛型DAO

由于要求在项目中使用泛型的DAO,所以上网Google了一下,找到了IBM的一篇文章。文章讲得不错,但是有些地方不清楚,如果完全按照那篇文章可能还会遇到一些困难。所以写了这篇文章,解释如何在项目中加入泛型的DAO实现。 首先是总的类关系的UML图:然后是在配置文件中的关系图:  其中,IStaffDao是我们自己定义的接口,这个接口类似: public   interface  IS

2007-06-17 15:53:00 990

原创 如何过滤非法IP地址的用户发送请求

实现步骤: 1.  创建自己的RequestProcessor类,重写体重的proccessPreprocess加入所需的控制逻辑.源代码如下:package classmate; 注意导包: commons-logging.jar2. struts-config.xml文件配置如下:加入:  import javax.servlet.http.HttpServ

2007-06-03 00:33:00 2119

原创 Strust组件—RequestProcessor类详解

Strust组件—RequestProcessor类详解 Struts框架只允许应用中存在一个ActionServlet类,但是可以存在多个客户化的RequestProcessor类,每个子应用模块都可以有单独的RequestProcessor类, ActionServ

2007-06-03 00:00:00 588

原创 定制Struts控制器组件

定制Struts控制器组件       在Struts API中,org.apache.struts.action.RequestProcessor类真正包含了Struts控制器在处理ser

2007-05-15 18:00:00 640

原创 实现session登陆时间的验证,验证用户登录页面的一个监听器

1.在login_do.jsp登录成功的前面加上session.setAttribute("user",admin); 我是在我的验证Action里面加上的:Admin admin=dbu.selectAdmin(login.getAdmin_user());  HttpSession session=request.getSession();admin是你的管理员POJO ;ad

2007-05-15 17:12:00 1695

原创 JSP/Servlet中的汉字编码问题【转载】

1. 问题的起源每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中国的 GB2312-80,日本的 JIS等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用。字符编码集按长度分为SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,

2007-05-10 18:40:00 833 1

原创 在你用JSP-servlet编写程序时候可以用以下简单的乱码处理解决!!

在你用JSP-servlet编写程序时候可以用以下简单的乱码处理解决!!              利用request.getParameter( )得到的String存在字符集问题。可以用  strTitle = request.getParameter(“title”);        strTitle = new String(strTitle.getBytes

2007-05-09 10:11:00 813

原创 O/R Mapping基础

O/R Mapping基础1、模型(1)模型用来表示真实世界的实体在科学和工程技术领域,模型是一个很有用途的概念,它可以用来模拟一个真实的系统。在软件开发领域,模型用来表示真实世界的实体。(2)不同类型的模型在软件开发的不同阶段,需要为目标系统创建不同类型的模型。l         在分析阶段----需要创建概念模型l         在设计阶段----需要创建域模

2007-05-08 14:17:00 2474

原创 Jsp文件乱码处理方法

Jsp文件乱码处理方法   近来在调试Jsp文件问题时,中文乱码现象经常遇到,现将处

2007-05-07 22:33:00 910

原创 SQL语法大全

   第三部分 操作数据:SQL            本部分内容          n SQL基础          n 中级SQL          n 高级SQL     第10章 SQL基础                   本章内容                            SQL介绍         

2007-05-06 22:45:00 1043

转载 java中使用MD5进行加密

java中使用MD5进行加密    在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。(一)消息摘要简介    一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是

2007-05-06 16:04:00 633

转载 J2EE学习笔记

J2EE学习笔记                                          By huihoo.com顾志凌([email protected])  灰狐动力--致力于中间件技术的研究、应用与开发http://www.huihoo.com  注:框架可以用Word菜单中的 “视图/文档结构图” 看到                      

2007-05-06 15:50:00 2547

原创 最简单的时间格式化类

作者:chenm日期:2001-5-8 14:57:29/* file: timeformat.java*/import java.lang.*;import java.text.*;import java.util.*;public class timeformat{  public timeformat(){       }    static public String getChinese

2007-05-06 15:43:00 694

原创 MYSQL服务器错误代码和消息

MYSQL服务器错误代码和消息服务器错误信息来自下述源文件:·         错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。·         错误值列在share/errmsg.txt文件中,用于生成include/mysqld_error.h和include/mysqld

2007-05-06 09:29:00 1852

原创 html语法

2007-05-03 17:11:00 1390 2

原创 用jsp实现session登陆时间的验证.相当与一个监听器

1.在login_do.jsp登录成功的前面加上session.setAttribute("user",model);model里面放的是用户名和密码。user是供后面要用到的,也可以说是指针,或键,model是值2.单独写一个sessionCheck.jsp文件用来验证sessionObject obj = session.getAttribute("user");if(obj==null){o

2007-05-03 17:05:00 1601

原创 a b c JSP/Servlet中的汉字编码问题

1. 问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中国的 GB2312-80,日本的 JIS 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地

2007-05-03 16:59:00 781 1

原创 myeclipse开发struts应用程序小示例

今天看了下Struts框架的概述,就用myeclispe试着动手开发了一个简单的用户登录程序。应用程序包括2个jsp文件、一个 ActionForm、一个Action以及其它。是:login.jsp(用户登录及错误提示页面),loginSuccess.jsp(提示登录成功 页面),LoginForm.java(ActionForm,存放用户提交信息),LoginAction.java(Action

2007-05-02 17:48:00 935

Activiti+5.8+用户指南(中文版)+.pdf

Activiti+5.8+用户指南(中文版)+.pdf

2013-05-13

qq日期控件 qq日期控件 qq日期控件 qq日期控件

qq日期控件 qq日期控件 qq日期控件 qq日期控件

2009-12-16

IKAnalyzer3.0GA_AllInOne-分词器

IKAnalyzer3.0GA_AllInOne-分词器.rar IKAnalyzer3.0GA_AllInOne-分词器.rar

2009-12-16

js 日期控件 js 日期控件

js 日期控件js 日期控件js 日期控件

2009-12-16

一个速度相当快. 简洁的弹出窗口

个速度相当快. 简洁的弹出窗口 个速度相当快. 简洁的弹出窗口

2009-12-16

js 弹出层 javascript 弹出页面 弹出窗口

js 弹出层 javascript 弹出页面 弹出窗口

2009-12-16

网上购物系统后台数据库设计

网上购物系统:网站设计和数据库设计,包括基本的注册登录,查询,下订单,修改,删除等~~

2009-05-06

Ext2.1 Ext2.2 中文API 不要资源分.来下吧

Ext2.1 Ext2.2 中文API 不要资源分.来下吧

2009-03-26

java反编译软件.rar

java反编译软件.rar java反编译软件.rar

2009-03-21

struts2.0中文教程.rar

struts2.0中文教程.rar struts2.0中文教程.rar

2009-03-21

ibatis 开发指南.

ibatis 开发指南.pdf iBATIS-SqlMaps-2_cn.pdf iBATIS-SqlMaps-2-Tutorial_cn.pdf ibatis使用指南.pdf Manning.iBATIS.in.Action.Jan.2007.pdf

2009-03-21

正则表达式CHM.chm

正则表达式CHM.chm 正则表达式CHM.chm

2009-03-21

Flash MX 2004动做脚本字典.chm

Flash MX 2004动做脚本字典.chm

2009-03-21

Java函数速查.CHM

Java函数速查.CHM Java函数速查.CHM

2009-03-21

jstl-1_0-fr-spec.pdf

jstl-1_0-fr-spec.pdf

2009-03-21

一个经典的JavaScript教程.chm

一个经典的JavaScript教程.chm

2009-03-21

prototype.js 说明文档.doc

prototype.js 说明文档.doc

2009-03-21

jdom_API.CHM

jdom_API.CHM jdom_API.CHM

2009-03-21

jQueryDocXML2CHM-090223.chm

jQueryDocXML2CHM-090223.chm jqeury最新api

2009-03-21

EXT 中文手册.chm

EXT 中文手册.chmEXT 中文手册.chm

2009-03-21

ext中文API+ sample.chm

ext中文API+ sample.chm ext中文API+ sample.chm

2009-03-21

CSS 20 API

css20.chm API CHM版的CSS API

2009-03-21

BinaryStar JS组件 V6.1.1.CHM

BinaryStar JS组件 V6.1.1.CHM

2009-03-21

扩展DisplayTag标记库.doc

扩展DisplayTag标记库,中英文对照,教程

2008-12-19

displaytag-1.1.1-execle@cvs导出中文乱码问题解决.jar

displaytag-1.1.1-execle@cvs导出中文乱码问题解决.jar

2008-12-19

利用JAVA操作EXCEL文件

应用示例 1 从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Work

2008-10-30

jbpm开发指南 JBPM是一个扩展性很强的工作流系统

JBPM是一个扩展性很强的工作流系统,百分百用J 持久层采用 实现,理论上说,只要Hibernate支持的数据库JBPM都支持 款JAVA应用

2008-10-30

FirstIbatis_no_service

FirstIbatis_no_service.zipFirstIbatis_no_service.zipFirstIbatis_no_service.zip

2008-06-29

FirstIbatis

FirstIbatis.zipFirstIbatis.zip

2008-06-29

局域网查看工具

局域网查看工具局域网查看工具

2007-08-23

struts2-api

struts2-api

2007-08-23

CVS配置.doc

CVS配置.doc说明文档

2007-05-23

word excel 密码破解器

word excel 密码破解器<br/><br/>很好用.推荐下载.速度快.简单易用!!

2007-05-10

Struts原理、开发及项目实施

Struts原理、开发及项目实施<br/> Holen 2002-9-12<br/><br/>1、 摘要<br/>2、 关键词<br/>3、 Framework<br/>4、 Struts的起源<br/>5、 Struts工作原理<br/>6、 Struts安装<br/>7、 一个实例<br/>8、 Struts优缺点<br/>9、 Struts项目实施经验<br/>10、 总结<br/>11、 参考文献<br/><br/>1、 摘要<br/>本文主要讲述了Struts(以Struts1.0.2为例)的工作原理,安装以及配置方面的问题。然后结合一个实例,详细讨论了Struts在实际开发过程中的应用,最后提供一些在开发过程中积累的经验,供大家参考。<br/><br/>2、关键词<br/>Struts、MVC、J2EE、Tiles、Framework<br/><br/>3、Framework<br/>Framework即架构(框架),这里指软件的架构方式,为什么要提Framework呢?请允许我从J2EE讲起。<br/> J2EE体系包括JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。<br/> 此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。<br/> 一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。<br/><br/>4、Struts的起源<br/> Struts最早是作为Apache Jakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象的技术水准。当前最高发行版本为Struts1.0.2,可以到http://jakata.apache.org/Struts下载。<br/> Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。<br/><br/>5、Struts工作原理<br/> MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:<br/><br/> <br/> Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如下图2所示:<br/> <br/><br/> 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。<br/> 视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。<br/> 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。<br/> 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。<br/><br/> 核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。这在后面还会详细讨论。<br/><br/>6、Struts安装<br/> Struts的安装比较简单,下面的以Tomcat 4.0.4为例,讲述安装过程。<br/> 首先请到http://jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.0.2,下载后得到的是一个ZIP文件。<br/> 将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。<br/> 假设你的Tomcat装在c:\Tomcat下,则将那些WAR文件拷贝到C:\Tomcat\webapps,重新启动Tomcat即可。<br/> 打开浏览器,在地址栏中输入:http://localhost:8080/Struts-example/index.jsp,若能见到“powered by Struts”的深蓝色图标,即说明成功了。这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。<br/> 另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等。<br/><br/><br/>7、一个实例<br/><br/> 一个用户注册系统,用户通过网页输入相关信息:注册ID号,密码,EMAIL,若注册成功,则返回成功提示信息,反之出现注册失败提示信息。<br/> 以下是相关文件的部分核心代码。<br/><br/> 项目建立:<br/>正式开发前,需要在Tocmat(我的tomcat装在c:\tomcat)中建立此项目。<br/>比较快的一种建立方式为:<br/>在C:\tomcat\webapps下新建目录test,再将C:\tomcat\webapps\struts-example下的<br/>WEB-INF目录拷贝到test目录下,然后将test\WEB-INF下的src和classes目录清空,以及struts-config.xml文件中内容清空即可。这样,我们需要的Struts类包及相关的配置文件就都齐了。<br/> 开发时,将JSP文件放在test目录下,Java原文件放在test\WEB-INF\src下,编译后的类文件放在test\WEB-INF\classes下。<br/><br/> 注册页面:reguser.jsp<br/> <br/> <%@ page contentType="text/html;charset=UTF-8" language="java" %><br/><%@ taglib uri="/WEB-INF/Struts-bean.tld" prefix="bean" %><br/><%@ taglib uri="/WEB-INF/Struts-html.tld" prefix="html" %><br/><html:html locale="true"><br/><head><br/><title>RegUser</title><br/><html:base/><br/></head><br/><body bgcolor="white"><br/><html:errors/><br/><html:form action="/regUserAction" focus="logname"><br/><table border="0" width="100%"><br/> <tr><br/> <th align="right"><br/> Logname:<br/> </th><br/> <td align="left"><br/> <html:text property="logname" size="20" maxlength="20"/><br/> </td><br/> </tr><br/> <tr><br/> <th align="right"><br/> Password:<br/> </th><br/> <td align="left"><br/> <html:password property="password" size="20" maxlength="20"/><br/> </td><br/> </tr> <br/> <tr><br/> <th align="right"><br/> E-mail:<br/> </th><br/> <td align="left"><br/> <html:password property="email" size="30" maxlength="50"/><br/> </td><br/> </tr><br/> <tr><br/> <td align="right"><br/> <html:submit property="submit" value="Submit"/><br/> </td><br/> <td align="left"><br/> <html:reset/><br/> </td><br/> </tr><br/></table><br/></html:form><br/></body><br/></html:html><br/><br/>此JSP页面不同于普通的JSP页,因为它大量运用了taglib,这些taglib对初学者而言,可能难于掌握,可这却是Struts的精华之一。灵活运用,将大大提高开发效率。<br/><br/> Struts-config.xml:<br/><br/> <Struts-config> <br/><form-beans><br/> <form-bean name="regUserForm"<br/> type="org.cjea.Struts.example. RegUserForm "/> <br/></form-beans><br/><br/><action-mappings><br/><action path="/regUserAction"<br/> type=" org.cjea.Struts.example.RegUserAction "<br/> attribute=" regUserForm "<br/> scope="request"<br/> validate="false"><br/> <forward name="failure" path="/ messageFailure.jsp"/><br/> <forward name="success" path="/ messageSuccess.jsp"/><br/></action><br/></action-mappings><br/> </Struts-config><br/><br/> Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。<br/><br/>FormBean:RegUserForm<br/><br/>package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.HttpServletRequest;<br/>import org.apache.Struts.action.ActionForm;<br/>import org.apache.Struts.action.ActionMapping;<br/><br/>public final class RegUserForm extends ActionForm{<br/><br/> private String logname;<br/> private String password;<br/> private String email;<br/><br/> public RegUserForm(){<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/><br/> public String getLogName() {<br/> return this.logname;<br/> }<br/> public void setLogName(String logname) {<br/> this.logname = logname;<br/> }<br/> public void setPassWord(String password) {<br/> this.password = password;<br/> }<br/> public String getPassWord() {<br/> return this.password;<br/> }<br/> public void setEmail(String email) {<br/> this.email = email;<br/> }<br/> public String getEmail() {<br/> return this.email;<br/> }<br/><br/> public void reset(ActionMapping mapping, HttpServletRequest request)<br/> {<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/>}<br/><br/>每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。<br/><br/>ActionBean:RegUserAction<br/><br/> package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.*;<br/>import org.apache.Struts.action.*;<br/><br/>public final class RegUserAction extends Action<br/>{<br/><br/> public ActionForward perform(ActionMapping mapping,<br/> ActionForm form, HttpServletRequest req,<br/> HttpServletResponse res)<br/> { <br/> String title = req.getParameter("title");<br/> String password = req.getParameter("password");<br/> String email = req.getParameter("email");<br/> /*<br/> 取得用户请求,做相应数据库操作,略<br/> */ <br/> }<br/>}<br/> <br/> FormBean的产生是为了提供数据给ActionBean,在ActionBean中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应业务要求。<br/> <br/> Servlet的演变:在常规的 JSP,Servlet,JavaBean三层结构中,JSP实现View的功能,Servlet实现Controller的功能,JavaBean实现Model的实现。<br/> 在Struts中,将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml,专职完成页面导航,而不再负责具体的数据获取与相应逻辑,这两部分功能由FormBean和ActionBean来完成。<br/> <br/>8、Struts优缺点<br/> 优点:<br/> Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。<br/> 除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。<br/> 关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。<br/> 缺点:<br/> Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。<br/> Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。<br/> Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。<br/><br/><br/>9、Struts项目实施经验<br/> 前段时间,我们基于Struts架构(结合Tiles),开发了一个WEB应用。以下是我们在项目过程中积累的一些经验和吸取的教训,望对各位有所帮助。<br/>1、 基于Struts架构的项目开发,首先需要有一个很好的整体规划,整个系统中包括哪几个模块,每个模块各需要多少FormBean和ActionBean等,而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理,尤其是对Struts-config.xml的管理。<br/>2、 如果你的项目非常紧,并且项目组中又没有富有经验的Struts开发人员,建议不要冒然采用Struts。Struts的掌握需要一个过程,对于一个熟练的JSP程序员,自学大概需要半个月左右的时间。如果结合titls,则需要更长的时间。<br/>3、 如果你在网页中大量运用taglib,那么你的美工将做出部分牺牲。当你结合Tiles,功能增强的同时,这种牺牲尤为明显。当然,你对功能和美观的取舍由你自己决定。<br/>4、 Taglib是一个好东西,但灵活运用它却需要一个过程,如果你不想在Taglib上花太多的时间,那么只需理解与FORM有关的几个标记,其它的标记就放着吧,以后再看,先去研究ActionServlet和Struts-config.xml,你会觉得很有成就感。<br/>5、 Struts的诞生时间虽不长,但与之相关的工具却越来越多,如果你是用Jbuilder作为开发工具,那我可以为你推荐几款优秀的open tools,极大的提高开发效率。<br/>6、 Struts是否只适合于大型项目呢?No!Struts适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。<br/><br/>10、总结<br/> Struts是一种优秀的J2EE MVC架构方式。它利用taglib获得可重用代码和抽象 Java 代码,利用ActionServlet配合Struts-config.xml实现对整个系统导航。增强了开发人员对系统的整体把握,提高了系统的可维护性和可扩充性。<br/><br/>11、参考文献<br/>1、 《Struts-documentation》<br/>2、 《当前流行的J2EE WEB应用架构分析》 龚永生 IBM开发者网站<br/>3、 《Struts,MVC 的一种开放源码实现用这种Servlet和JSP框架管理复杂的大型网站》Malcolm G. Davis IBM开发者网站<br/>4、 《Jakarta Struts Book Review Project》 Chuck Cavaness Theserverside连载<br/>

2007-05-08

Struts原理、开发及项目实施

Struts原理、开发及项目实施<br/> Holen 2002-9-12<br/><br/>1、 摘要<br/>2、 关键词<br/>3、 Framework<br/>4、 Struts的起源<br/>5、 Struts工作原理<br/>6、 Struts安装<br/>7、 一个实例<br/>8、 Struts优缺点<br/>9、 Struts项目实施经验<br/>10、 总结<br/>11、 参考文献<br/><br/>1、 摘要<br/>本文主要讲述了Struts(以Struts1.0.2为例)的工作原理,安装以及配置方面的问题。然后结合一个实例,详细讨论了Struts在实际开发过程中的应用,最后提供一些在开发过程中积累的经验,供大家参考。<br/><br/>2、关键词<br/>Struts、MVC、J2EE、Tiles、Framework<br/><br/>3、Framework<br/>Framework即架构(框架),这里指软件的架构方式,为什么要提Framework呢?请允许我从J2EE讲起。<br/> J2EE体系包括JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。<br/> 此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。<br/> 一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。<br/><br/>4、Struts的起源<br/> Struts最早是作为Apache Jakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象的技术水准。当前最高发行版本为Struts1.0.2,可以到http://jakata.apache.org/Struts下载。<br/> Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。<br/><br/>5、Struts工作原理<br/> MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:<br/><br/> <br/> Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如下图2所示:<br/> <br/><br/> 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。<br/> 视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。<br/> 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。<br/> 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。<br/><br/> 核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。这在后面还会详细讨论。<br/><br/>6、Struts安装<br/> Struts的安装比较简单,下面的以Tomcat 4.0.4为例,讲述安装过程。<br/> 首先请到http://jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.0.2,下载后得到的是一个ZIP文件。<br/> 将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。<br/> 假设你的Tomcat装在c:\Tomcat下,则将那些WAR文件拷贝到C:\Tomcat\webapps,重新启动Tomcat即可。<br/> 打开浏览器,在地址栏中输入:http://localhost:8080/Struts-example/index.jsp,若能见到“powered by Struts”的深蓝色图标,即说明成功了。这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。<br/> 另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等。<br/><br/><br/>7、一个实例<br/><br/> 一个用户注册系统,用户通过网页输入相关信息:注册ID号,密码,EMAIL,若注册成功,则返回成功提示信息,反之出现注册失败提示信息。<br/> 以下是相关文件的部分核心代码。<br/><br/> 项目建立:<br/>正式开发前,需要在Tocmat(我的tomcat装在c:\tomcat)中建立此项目。<br/>比较快的一种建立方式为:<br/>在C:\tomcat\webapps下新建目录test,再将C:\tomcat\webapps\struts-example下的<br/>WEB-INF目录拷贝到test目录下,然后将test\WEB-INF下的src和classes目录清空,以及struts-config.xml文件中内容清空即可。这样,我们需要的Struts类包及相关的配置文件就都齐了。<br/> 开发时,将JSP文件放在test目录下,Java原文件放在test\WEB-INF\src下,编译后的类文件放在test\WEB-INF\classes下。<br/><br/> 注册页面:reguser.jsp<br/> <br/> <%@ page contentType="text/html;charset=UTF-8" language="java" %><br/><%@ taglib uri="/WEB-INF/Struts-bean.tld" prefix="bean" %><br/><%@ taglib uri="/WEB-INF/Struts-html.tld" prefix="html" %><br/><html:html locale="true"><br/><head><br/><title>RegUser</title><br/><html:base/><br/></head><br/><body bgcolor="white"><br/><html:errors/><br/><html:form action="/regUserAction" focus="logname"><br/><table border="0" width="100%"><br/> <tr><br/> <th align="right"><br/> Logname:<br/> </th><br/> <td align="left"><br/> <html:text property="logname" size="20" maxlength="20"/><br/> </td><br/> </tr><br/> <tr><br/> <th align="right"><br/> Password:<br/> </th><br/> <td align="left"><br/> <html:password property="password" size="20" maxlength="20"/><br/> </td><br/> </tr> <br/> <tr><br/> <th align="right"><br/> E-mail:<br/> </th><br/> <td align="left"><br/> <html:password property="email" size="30" maxlength="50"/><br/> </td><br/> </tr><br/> <tr><br/> <td align="right"><br/> <html:submit property="submit" value="Submit"/><br/> </td><br/> <td align="left"><br/> <html:reset/><br/> </td><br/> </tr><br/></table><br/></html:form><br/></body><br/></html:html><br/><br/>此JSP页面不同于普通的JSP页,因为它大量运用了taglib,这些taglib对初学者而言,可能难于掌握,可这却是Struts的精华之一。灵活运用,将大大提高开发效率。<br/><br/> Struts-config.xml:<br/><br/> <Struts-config> <br/><form-beans><br/> <form-bean name="regUserForm"<br/> type="org.cjea.Struts.example. RegUserForm "/> <br/></form-beans><br/><br/><action-mappings><br/><action path="/regUserAction"<br/> type=" org.cjea.Struts.example.RegUserAction "<br/> attribute=" regUserForm "<br/> scope="request"<br/> validate="false"><br/> <forward name="failure" path="/ messageFailure.jsp"/><br/> <forward name="success" path="/ messageSuccess.jsp"/><br/></action><br/></action-mappings><br/> </Struts-config><br/><br/> Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。<br/><br/>FormBean:RegUserForm<br/><br/>package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.HttpServletRequest;<br/>import org.apache.Struts.action.ActionForm;<br/>import org.apache.Struts.action.ActionMapping;<br/><br/>public final class RegUserForm extends ActionForm{<br/><br/> private String logname;<br/> private String password;<br/> private String email;<br/><br/> public RegUserForm(){<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/><br/> public String getLogName() {<br/> return this.logname;<br/> }<br/> public void setLogName(String logname) {<br/> this.logname = logname;<br/> }<br/> public void setPassWord(String password) {<br/> this.password = password;<br/> }<br/> public String getPassWord() {<br/> return this.password;<br/> }<br/> public void setEmail(String email) {<br/> this.email = email;<br/> }<br/> public String getEmail() {<br/> return this.email;<br/> }<br/><br/> public void reset(ActionMapping mapping, HttpServletRequest request)<br/> {<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/>}<br/><br/>每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。<br/><br/>ActionBean:RegUserAction<br/><br/> package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.*;<br/>import org.apache.Struts.action.*;<br/><br/>public final class RegUserAction extends Action<br/>{<br/><br/> public ActionForward perform(ActionMapping mapping,<br/> ActionForm form, HttpServletRequest req,<br/> HttpServletResponse res)<br/> { <br/> String title = req.getParameter("title");<br/> String password = req.getParameter("password");<br/> String email = req.getParameter("email");<br/> /*<br/> 取得用户请求,做相应数据库操作,略<br/> */ <br/> }<br/>}<br/> <br/> FormBean的产生是为了提供数据给ActionBean,在ActionBean中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应业务要求。<br/> <br/> Servlet的演变:在常规的 JSP,Servlet,JavaBean三层结构中,JSP实现View的功能,Servlet实现Controller的功能,JavaBean实现Model的实现。<br/> 在Struts中,将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml,专职完成页面导航,而不再负责具体的数据获取与相应逻辑,这两部分功能由FormBean和ActionBean来完成。<br/> <br/>8、Struts优缺点<br/> 优点:<br/> Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。<br/> 除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。<br/> 关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。<br/> 缺点:<br/> Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。<br/> Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。<br/> Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。<br/><br/><br/>9、Struts项目实施经验<br/> 前段时间,我们基于Struts架构(结合Tiles),开发了一个WEB应用。以下是我们在项目过程中积累的一些经验和吸取的教训,望对各位有所帮助。<br/>1、 基于Struts架构的项目开发,首先需要有一个很好的整体规划,整个系统中包括哪几个模块,每个模块各需要多少FormBean和ActionBean等,而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理,尤其是对Struts-config.xml的管理。<br/>2、 如果你的项目非常紧,并且项目组中又没有富有经验的Struts开发人员,建议不要冒然采用Struts。Struts的掌握需要一个过程,对于一个熟练的JSP程序员,自学大概需要半个月左右的时间。如果结合titls,则需要更长的时间。<br/>3、 如果你在网页中大量运用taglib,那么你的美工将做出部分牺牲。当你结合Tiles,功能增强的同时,这种牺牲尤为明显。当然,你对功能和美观的取舍由你自己决定。<br/>4、 Taglib是一个好东西,但灵活运用它却需要一个过程,如果你不想在Taglib上花太多的时间,那么只需理解与FORM有关的几个标记,其它的标记就放着吧,以后再看,先去研究ActionServlet和Struts-config.xml,你会觉得很有成就感。<br/>5、 Struts的诞生时间虽不长,但与之相关的工具却越来越多,如果你是用Jbuilder作为开发工具,那我可以为你推荐几款优秀的open tools,极大的提高开发效率。<br/>6、 Struts是否只适合于大型项目呢?No!Struts适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。<br/><br/>10、总结<br/> Struts是一种优秀的J2EE MVC架构方式。它利用taglib获得可重用代码和抽象 Java 代码,利用ActionServlet配合Struts-config.xml实现对整个系统导航。增强了开发人员对系统的整体把握,提高了系统的可维护性和可扩充性。<br/><br/>11、参考文献<br/>1、 《Struts-documentation》<br/>2、 《当前流行的J2EE WEB应用架构分析》 龚永生 IBM开发者网站<br/>3、 《Struts,MVC 的一种开放源码实现用这种Servlet和JSP框架管理复杂的大型网站》Malcolm G. Davis IBM开发者网站<br/>4、 《Jakarta Struts Book Review Project》 Chuck Cavaness Theserverside连载<br/>

2007-05-08

Struts原理、开发及项目实施

Struts原理、开发及项目实施<br/> Holen 2002-9-12<br/><br/>1、 摘要<br/>2、 关键词<br/>3、 Framework<br/>4、 Struts的起源<br/>5、 Struts工作原理<br/>6、 Struts安装<br/>7、 一个实例<br/>8、 Struts优缺点<br/>9、 Struts项目实施经验<br/>10、 总结<br/>11、 参考文献<br/><br/>1、 摘要<br/>本文主要讲述了Struts(以Struts1.0.2为例)的工作原理,安装以及配置方面的问题。然后结合一个实例,详细讨论了Struts在实际开发过程中的应用,最后提供一些在开发过程中积累的经验,供大家参考。<br/><br/>2、关键词<br/>Struts、MVC、J2EE、Tiles、Framework<br/><br/>3、Framework<br/>Framework即架构(框架),这里指软件的架构方式,为什么要提Framework呢?请允许我从J2EE讲起。<br/> J2EE体系包括JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。<br/> 此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。<br/> 一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。<br/><br/>4、Struts的起源<br/> Struts最早是作为Apache Jakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象的技术水准。当前最高发行版本为Struts1.0.2,可以到http://jakata.apache.org/Struts下载。<br/> Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。<br/><br/>5、Struts工作原理<br/> MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:<br/><br/> <br/> Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,如下图2所示:<br/> <br/><br/> 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。<br/> 视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。<br/> 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。<br/> 流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。<br/><br/> 核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。这在后面还会详细讨论。<br/><br/>6、Struts安装<br/> Struts的安装比较简单,下面的以Tomcat 4.0.4为例,讲述安装过程。<br/> 首先请到http://jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.0.2,下载后得到的是一个ZIP文件。<br/> 将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。<br/> 假设你的Tomcat装在c:\Tomcat下,则将那些WAR文件拷贝到C:\Tomcat\webapps,重新启动Tomcat即可。<br/> 打开浏览器,在地址栏中输入:http://localhost:8080/Struts-example/index.jsp,若能见到“powered by Struts”的深蓝色图标,即说明成功了。这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。<br/> 另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等。<br/><br/><br/>7、一个实例<br/><br/> 一个用户注册系统,用户通过网页输入相关信息:注册ID号,密码,EMAIL,若注册成功,则返回成功提示信息,反之出现注册失败提示信息。<br/> 以下是相关文件的部分核心代码。<br/><br/> 项目建立:<br/>正式开发前,需要在Tocmat(我的tomcat装在c:\tomcat)中建立此项目。<br/>比较快的一种建立方式为:<br/>在C:\tomcat\webapps下新建目录test,再将C:\tomcat\webapps\struts-example下的<br/>WEB-INF目录拷贝到test目录下,然后将test\WEB-INF下的src和classes目录清空,以及struts-config.xml文件中内容清空即可。这样,我们需要的Struts类包及相关的配置文件就都齐了。<br/> 开发时,将JSP文件放在test目录下,Java原文件放在test\WEB-INF\src下,编译后的类文件放在test\WEB-INF\classes下。<br/><br/> 注册页面:reguser.jsp<br/> <br/> <%@ page contentType="text/html;charset=UTF-8" language="java" %><br/><%@ taglib uri="/WEB-INF/Struts-bean.tld" prefix="bean" %><br/><%@ taglib uri="/WEB-INF/Struts-html.tld" prefix="html" %><br/><html:html locale="true"><br/><head><br/><title>RegUser</title><br/><html:base/><br/></head><br/><body bgcolor="white"><br/><html:errors/><br/><html:form action="/regUserAction" focus="logname"><br/><table border="0" width="100%"><br/> <tr><br/> <th align="right"><br/> Logname:<br/> </th><br/> <td align="left"><br/> <html:text property="logname" size="20" maxlength="20"/><br/> </td><br/> </tr><br/> <tr><br/> <th align="right"><br/> Password:<br/> </th><br/> <td align="left"><br/> <html:password property="password" size="20" maxlength="20"/><br/> </td><br/> </tr> <br/> <tr><br/> <th align="right"><br/> E-mail:<br/> </th><br/> <td align="left"><br/> <html:password property="email" size="30" maxlength="50"/><br/> </td><br/> </tr><br/> <tr><br/> <td align="right"><br/> <html:submit property="submit" value="Submit"/><br/> </td><br/> <td align="left"><br/> <html:reset/><br/> </td><br/> </tr><br/></table><br/></html:form><br/></body><br/></html:html><br/><br/>此JSP页面不同于普通的JSP页,因为它大量运用了taglib,这些taglib对初学者而言,可能难于掌握,可这却是Struts的精华之一。灵活运用,将大大提高开发效率。<br/><br/> Struts-config.xml:<br/><br/> <Struts-config> <br/><form-beans><br/> <form-bean name="regUserForm"<br/> type="org.cjea.Struts.example. RegUserForm "/> <br/></form-beans><br/><br/><action-mappings><br/><action path="/regUserAction"<br/> type=" org.cjea.Struts.example.RegUserAction "<br/> attribute=" regUserForm "<br/> scope="request"<br/> validate="false"><br/> <forward name="failure" path="/ messageFailure.jsp"/><br/> <forward name="success" path="/ messageSuccess.jsp"/><br/></action><br/></action-mappings><br/> </Struts-config><br/><br/> Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。<br/><br/>FormBean:RegUserForm<br/><br/>package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.HttpServletRequest;<br/>import org.apache.Struts.action.ActionForm;<br/>import org.apache.Struts.action.ActionMapping;<br/><br/>public final class RegUserForm extends ActionForm{<br/><br/> private String logname;<br/> private String password;<br/> private String email;<br/><br/> public RegUserForm(){<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/><br/> public String getLogName() {<br/> return this.logname;<br/> }<br/> public void setLogName(String logname) {<br/> this.logname = logname;<br/> }<br/> public void setPassWord(String password) {<br/> this.password = password;<br/> }<br/> public String getPassWord() {<br/> return this.password;<br/> }<br/> public void setEmail(String email) {<br/> this.email = email;<br/> }<br/> public String getEmail() {<br/> return this.email;<br/> }<br/><br/> public void reset(ActionMapping mapping, HttpServletRequest request)<br/> {<br/> logname = null;<br/> password = null;<br/> email = null;<br/> }<br/>}<br/><br/>每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。<br/><br/>ActionBean:RegUserAction<br/><br/> package org.cjea.Struts.example;<br/><br/>import javax.Servlet.http.*;<br/>import org.apache.Struts.action.*;<br/><br/>public final class RegUserAction extends Action<br/>{<br/><br/> public ActionForward perform(ActionMapping mapping,<br/> ActionForm form, HttpServletRequest req,<br/> HttpServletResponse res)<br/> { <br/> String title = req.getParameter("title");<br/> String password = req.getParameter("password");<br/> String email = req.getParameter("email");<br/> /*<br/> 取得用户请求,做相应数据库操作,略<br/> */ <br/> }<br/>}<br/> <br/> FormBean的产生是为了提供数据给ActionBean,在ActionBean中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应业务要求。<br/> <br/> Servlet的演变:在常规的 JSP,Servlet,JavaBean三层结构中,JSP实现View的功能,Servlet实现Controller的功能,JavaBean实现Model的实现。<br/> 在Struts中,将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml,专职完成页面导航,而不再负责具体的数据获取与相应逻辑,这两部分功能由FormBean和ActionBean来完成。<br/> <br/>8、Struts优缺点<br/> 优点:<br/> Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。<br/> 除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。<br/> 关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。<br/> 缺点:<br/> Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。<br/> Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。<br/> Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。<br/><br/><br/>9、Struts项目实施经验<br/> 前段时间,我们基于Struts架构(结合Tiles),开发了一个WEB应用。以下是我们在项目过程中积累的一些经验和吸取的教训,望对各位有所帮助。<br/>1、 基于Struts架构的项目开发,首先需要有一个很好的整体规划,整个系统中包括哪几个模块,每个模块各需要多少FormBean和ActionBean等,而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理,尤其是对Struts-config.xml的管理。<br/>2、 如果你的项目非常紧,并且项目组中又没有富有经验的Struts开发人员,建议不要冒然采用Struts。Struts的掌握需要一个过程,对于一个熟练的JSP程序员,自学大概需要半个月左右的时间。如果结合titls,则需要更长的时间。<br/>3、 如果你在网页中大量运用taglib,那么你的美工将做出部分牺牲。当你结合Tiles,功能增强的同时,这种牺牲尤为明显。当然,你对功能和美观的取舍由你自己决定。<br/>4、 Taglib是一个好东西,但灵活运用它却需要一个过程,如果你不想在Taglib上花太多的时间,那么只需理解与FORM有关的几个标记,其它的标记就放着吧,以后再看,先去研究ActionServlet和Struts-config.xml,你会觉得很有成就感。<br/>5、 Struts的诞生时间虽不长,但与之相关的工具却越来越多,如果你是用Jbuilder作为开发工具,那我可以为你推荐几款优秀的open tools,极大的提高开发效率。<br/>6、 Struts是否只适合于大型项目呢?No!Struts适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。<br/><br/>10、总结<br/> Struts是一种优秀的J2EE MVC架构方式。它利用taglib获得可重用代码和抽象 Java 代码,利用ActionServlet配合Struts-config.xml实现对整个系统导航。增强了开发人员对系统的整体把握,提高了系统的可维护性和可扩充性。<br/><br/>11、参考文献<br/>1、 《Struts-documentation》<br/>2、 《当前流行的J2EE WEB应用架构分析》 龚永生 IBM开发者网站<br/>3、 《Struts,MVC 的一种开放源码实现用这种Servlet和JSP框架管理复杂的大型网站》Malcolm G. Davis IBM开发者网站<br/>4、 《Jakarta Struts Book Review Project》 Chuck Cavaness Theserverside连载<br/>

2007-05-08

使用Struts的Action和Hibernate来对数据库进行增、删、改、查四项操作(源码)

1、数据库MySQL,连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明<br/>用户root<br/>密码password<br/>不同的进行相应的改变。<br/><br/>Tomcat数据库连接池配置:<br/>Server.xml<br/>增加如下内容:<br/> <Context path="/PaginationStrutsHibernate" docBase="PaginationStrutsHibernate" reloadable="true"><br/> <Resource name="jdbc/Pagination" scope="Shareable" type="javax.sql.DataSource"/><br/> <ResourceParams name="jdbc/Pagination"><br/> <parameter><br/> <name>factory</name><br/> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value><br/> </parameter><br/> <parameter><br/> <name>driverClassName</name><br/> <value>org.gjt.mm.mysql.Driver</value><br/> </parameter><br/> <parameter><br/> <name>url</name><br/> <value>jdbc:mysql://localhost/Pagination?autoReconnect=true&useUnicode=true&characterEncoding=GB2312</value><br/> </parameter><br/> <parameter><br/> <name>username</name><br/> <value>root</value><br/> </parameter><br/> <parameter><br/> <name>password</name><br/> <value>password</value><br/> </parameter><br/> <!-- Delete the minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis params --><br/> <parameter><br/> <name>factory</name><br/> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value><br/> </parameter><br/> </ResourceParams><br/> </Context><br/><br/>2、配置把StrutsPager.rar解压到%Tomcat%\webapps\PaginationStrutsHibernate目录下即可,源代码都在里面。<br/><br/>3、访问http://localhost:8080/PaginationStrutsHibernate/即可<br/><br/>4、记得部署MySQL的JDBC驱动程序和Struts、Hibernate所需要的lib文件到%Tomcat%\webapps\PaginationStrutsHibernateWEB-INF\lib\目录下或者%Tomcat%\common\lib\目录下 <br/><br/>PaginationStrutsHibernate.rar (28.56k) <br/>

2007-05-07

使用JSP JavaBean来实现对数据库分页显示与搜索(源码)

使用JSP JavaBean来实现对数据库分页显示与搜索<br/><br/>1、数据库MySQL,创建数据库Pagination<br/> MySQL.sql用来创建表结构<br/><br/>2、配置把PaginationJSPJavaBean.rar解压到%Tomcat%\webapps\PaginationJSPJavaBean目录下即可,源代码都在里面。<br/><br/>3、访问http://172.18.8.118:8080/PaginationJSPJavaBean/即可<br/><br/>4、记得部署MySQL的JDBC驱动程序到%Tomcat%\webapps\PaginationJSPJavaBean\WEB-INF\lib\目录下或者%Tomcat%\common\lib\目录下 <br/><br/>PaginationJSPJavaBean.rar (12.6k) <br/><br/>

2007-05-07

使用Struts的Action来对数据库进行增、删、改、查四项操作(源码)

使用Struts的Action来对数据库进行增、删、改、查四项操作1、数据库MySQL,创建数据库 Pagination MySQL.sql用来创建表结构连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明用户root密码password不同的进行相应的改变。Tomcat数据库连接池配置:Server.xml增加如下内容: factory org.apache.commons.dbcp.BasicDataSourceFactory driverClassName org.gjt.mm.mysql.Driver url jdbc:mysql://localhost/Pagination?autoReconnect=true&useUnicode=true&characterEncoding=GB2312 username root password password factory org.apache.commons.dbcp.BasicDataSourceFactory 2、配置把PaginationStruts.rar解压到%Tomcat%\webapps\PaginationStruts目录下即可,源代码都在里面。3、访问http://localhost:8080/PaginationStruts/即可4、记得部署MySQL的JDBC驱动程序和Struts所需要的lib文件到%Tomcat%\webapps\PaginationStruts\WEB-INF\lib\目录下或者%Tomcat%\common\lib\目录下 PaginationStruts.rar (25.76k)

2007-05-07

数据结构与算法.rar

数据结构与算法.rar

2007-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除