请问如何在每次调用jsp页面的时候生成一个000001-999999的随机数?

ervinlj 2003-10-17 02:39:25
我写了这样一段代码:
<%
String s="";
int intCount=0;
intCount=(new Random()).nextInt(999999);//
if(intCount<100000)intCount+=100000;
s=intCount+"";
out.println("Random number is:"+s);
%>
我的意思是在每次调用这个jsp页面的时候,让这个jsp页面输出一个000001-999999的随机数应该怎样来做?
我的代码提示找不到Random类???
如何解决???
...全文
221 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fft123 2003-10-17
  • 打赏
  • 举报
回复
本来不想写代码的,但觉得这个思路还不错,不用去判断到底有多少位,因此贴出来大家一起参考一下吧

long l = (long)(Math.random()*1000000);
String s = ""+l;
int i = s.length();
for(int j=0;j<6-i;j++)
s = "0"+s;
System.out.println(s);
Alan 2003-10-17
  • 打赏
  • 举报
回复
楼主应该自己想想啊,很简单的算法
生成的随机数取整后转成字符串
看看长度多少
长度小于你要的位数
则在该字符串前用零补齐
ervinlj 2003-10-17
  • 打赏
  • 举报
回复
还是好人做到底把,把补齐0一步代码也一并共享出来把!!!分全给哦!
tanndy 2003-10-17
  • 打赏
  • 举报
回复
random 在java.util.random里
fft123 2003-10-17
  • 打赏
  • 举报
回复
long l = (long)(Math.random()*1000000);

不够六位的楼主自己往前面加0补齐吧
ervinlj 2003-10-17
  • 打赏
  • 举报
回复
up
jndszl 2003-10-17
  • 打赏
  • 举报
回复
up
ervinlj 2003-10-17
  • 打赏
  • 举报
回复
那位高人能帮帮我呢?
ervinlj 2003-10-17
  • 打赏
  • 举报
回复
这个问题到底应该怎样来实现呢?
ervinlj 2003-10-17
  • 打赏
  • 举报
回复
up
jsp编程的一些小技巧总结,绝对实用。包括JSP编程中常用的js技术。 1.JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单? 5. java中如何把一个目录下的文件移到另一个指定的目录? 6. 制作表格线? 7. jsp如判别一个字符在A到Z之间? 8. 得到一浮点数小数点后4位,如何写以函数截取为两位 9. 整型转字符? 10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序 11. 制作两个按钮 12. 用什么sql语句将数据库中的一条记录,复制为两条? 13. 有兩個按鈕A,B,其中A按下去,A就不可以再按,另外B按下去,A可以再按..請問如何用javascript控制.? 14. jsp中的数据库的连接方式 15. 在jsp中,怎么实现按回车就可提交表单? 16. 在JSP中如何传递数组? 17. 按地址取图片? 18. JSP中如何上传图片到数据库字段? 19. 页面自动刷新? 20. 表单自动提交? 21. 从JSP传数据的到JAVABEAN里? 22. weblogic 数据池连接? 数据源 JNDI名字 mysource 23. 三级下拉列表框联动菜单? 24. 在JSP中如何调用浏览器中的"另存为"功能? 25. 网页全屏显示 26. 求两个日期相隔了多少天:输入时间格式为(yyyy-mm-dd) 27. 上传文件对话框 28. 分页测试 29. 下载文件 30. 简单汉字判断 31. 将JSP的变量或者bean传递给JAVASCRIPT使用? 32. 把一种格式(如yyyy-mm-dd)的日期变量转换成另外一种格式(如dd-mm-yyyy)的日期变量! 33. 实现在页面上添加一行输入对话框 34. 制作验证码图片? 35. 图片缩小放大功能 36. 点击输入框弹出日期选择? 37. 在图片上传前查看自己要上传的图片? 38. 在图片排列的页面上选中一个图片,然后把它删掉? 39. 显示某目录下的所有文件 40. 把复选框中选中的值直接显示在输入文本框中? 41. 选择路径下的文件直接显示文件内容? 42. 制作进度条? 43. 对较长字符省略显示? 44. 制作日历? 45. 点击文本弹出一个选择框,选中值后返回并显示 46. 关闭框架页面回到没框架的页面? 47. 选中多条记录一次性删除? 48. 自动获取页面文件名? 49. 在JSP中调用ActiveX控件? 50. 使用SmartUpload实现文件上传? 51. 使用iReport和Jasperreport开发报表? 52. 使用iText生成PDF? 53. 制作图片水印? 54. 在页面中屏蔽键盘功能键? 55. 禁止用户复制网页内容? 56. 实现不在地址拦中显示当前URL? 57. 获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息提示? 64. 用jfreechat制作拄、饼、曲线图型? 65. 文本框怎么只容许输入数字? 66. 打开Word和Execl文件? 67. 生成Word 和 Excel文档? 68. JSP如何读取Word内容? 69. 浏览服务器目录/文件? 70. jsp直接弹出下载框下载文件? 71. 配置数据连接池和数据源(Tomcat)? 72. 点击图1变为图2? 73. JSP中显示图片的方法之一? 74. int转为Integer的方法? 75. 请求jsp页面禁止缓存方法? 76. select选中其中的值自动到一个文本框? 77. JSP连接数据库? 78. JSP两级下拉列表框联动(数据库)? 79. JSP字符编码问题及转换大全? 80. 使用过滤器设置请求编码? 81. JSP或Servlet调用DLL? 82. 在JSP中包含Applet(时钟)? 83. 在Applet中显示一个html页面? 84. 使session强制失效85. iFreme编辑框使用? 86. Applet与Servlet的通讯? 87. JSP表格直接导入EXCEL? 88. 访问类路径上的资源? 89. 操作文件目录? 90. 获取文件的属性? 91.如何开发并部署一个servlet 92.如何取得配置文件中的servlet的参数 93.使servlet成为线程安全的 94.访问标准的CGI变量 95. servlet之间及与jsp间的通讯 96.获取当前绝对路径 97.在servlet中操作cookie 98.使用servlet生成JPE
JSP编程技巧集锦

需要者请联系:e_mail:fzlotuscn@yahoo.com.cn QQ:595563946

目 录

1. JSP编程中常用的js技术
2. 在下拉列表框里选择一个值后跳出新窗口?
3. 在JSP中启动execl?
4. 两级下拉列表框联动菜单?
5. java中如何把一个目录下的文件移到另一个指定的目录?
6. 制作表格线?
7. jsp如判别一个字符在A到Z之间?
8. 得到一浮点数小数点后4位,如何写以函数截取为两位
9. 整型转字符?
10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序
11. 制作两个按钮
12. 用什么sql语句将数据库中的一条记录,复制为两条?
13. 有兩個按鈕A,B,其中A按下去,A就不可以再按,另外B按下去,A可以再按
請問如何用javascript控制.?
14. jsp中的数据库的连接方式
15. 在jsp中,怎么实现按回车就可提交表单?
16. 在JSP中如何传递数组?
17. 按地址取图片?
18. JSP中如何上传图片到数据库字段?
19. 页面自动刷新?
20. 表单自动提交?
21. 从JSP传数据的到JAVABEAN里?
22. weblogic 数据池连接? 数据源 JNDI名字 mysource
23. 三级下拉列表框联动菜单?
24. 在JSP中如何调用浏览器中的"另存为"功能?
25. 网页全屏显示
26. 求两个日期相隔了多少天:输入时间格式为(yyyy-mm-dd)
27. 上传文件对话框
28. 分页测试
29. 下载文件
30. 简单汉字判断
31. 将JSP的变量或者bean传递给JAVASCRIPT使用?
32. 把一种格式(如yyyy-mm-dd)的日期变量转换成另外一种格式(如dd-mm-yyyy)的日期变量!
33. 实现在页面上添加一行输入对话框
34. 制作验证码图片?
35. 图片缩小放大功能
36. 点击输入框弹出日期选择?
37. 在图片上传前查看自己要上传的图片?
38. 在图片排列的页面上选中一个图片,然后把它删掉?
39. 显示某目录下的所有文件
40. 把复选框中选中的值直接显示在输入文本框中?
41. 选择路径下的文件直接显示文件内容?
42. 制作进度条?
43. 对较长字符省略显示?
44. 制作日历?
45. 点击文本弹出一个选择框,选中值后返回并显示
46. 关闭框架页面回到没框架的页面?
47. 选中多条记录一次性删除?
48. 自动获取页面文件名?
49. 在JSP中调用ActiveX控件?
50. 使用SmartUpload实现文件上传?
51. 使用iReport和Jasperreport开发报表?
52. 使用iText生成PDF?
53. 制作图片水印?
54. 在页面中屏蔽键盘功能键?
55. 禁止用户复制网页内容?
56. 实现不在地址拦中显示当前URL?
57. 获取用户的真实IP地址?
58. 获取用户浏览器信息?
59. 获取当前绝对路径?
60. 将HTML文件转换成XML文件?
61. 结合XML和XSL输出HTML页面?
62. 制作动态树型菜单制作?
63. 制作类似QQ的短消息提示?
64. 用jfreechat制作拄、饼、曲线图型?
65. 文本框怎么只容许输入数字?
66. 打开Word和Execl文件?
67. 生成Word 和 Excel文档?
68. JSP如何读取Word内容?
69. 浏览服务器目录/文件?
70. jsp直接弹出下载框下载文件?
71. 配置数据连接池和数据源(Tomcat)?
72. 点击图1变为图2?
73. JSP中显示图片的方法之一?
74. int转为Integer的方法?
75. 请求jsp页面禁止缓存方法?
76. select选中其中的值自动到一个文本框?
77. JSP连接数据库?
78. JSP两级下拉列表框联动(数据库)?
79. JSP字符编码问题及转换大全?
80. 使用过滤器设置请求编码?
81. JSP或Servlet调用DLL?
82. 在JSP中包含Applet(时钟)?
83. 在Applet中显示一个html页面?
84. 使session强制失效85. iFreme编辑框使用?
86. Applet与Servlet的通讯?
87. JSP表格直接导入EXCEL?
88. 访问类路径上的资源?
89. 操作文件目录?
90. 获取文件的属性?
91.如何开发并部署一个servlet
92.如何取得配置文件中的servlet的参数
93.使servlet成为线程安全的
94.访问标准的CGI变量
95. servlet之间及与jsp间的通讯
96.获取当前绝对路径
97.在servlet中操作cookie
98.使用servlet生成JPEG图象
99.在servlet中根据请求参数自动填充java对象
100.将jsp应用程序打war包
101.实现投票系统
102.使用cookie记录用户访问次数?
103.使用session对象防止表单重复提交?
104.获取用户真实IP地址?
105.获取请求中的所有参数?
106.获取完整的请求URL?
107.在重新显示表单时保留用户已经输入的合法数据?
108.使用选代器遍历集合
109.使用特定字符串对一个字符串进行分割?
110.格式化输出数字和字符?
111.生成一定范围的随机数?
112.调用其它应用程序?
113.禁止列出站点文件目录?
114.防止用户直接输入文件名访问JSP?
115.防止表单重复提交?
116.使页面全屏显示?
117.在页面中屏蔽鼠标右键?
118.在页面中禁止键盘功能键?
119.实现不在地址栏显示当前URL?
120.用javabean方式读取文本文件制作统计图?
121.上传图片并生成缩略图?
122.JS实现图形菜单中点击当前图片变另一幅图片?
123.无刷新页面自动刷新?
124.写文件?
125.怎么得到鼠标点击在线图片的位置坐标?
126.页面单线程?
127.数字转中文
128 自动计算金额
129 JSP页面打印中使用WebBrowser控件
130 不刷新页面添加新的类别
131 鼠标滚动缩放图片
132 根据输入的表名生成输入数据表格
133 JSP表格输出到Excel
134.JSP页面输出到带格式的Word文档中
135.JSP调用Word打印页面
136.年月日联动选择
137.日期差计算方法
138.文本拷贝
139.字符串转日期
140.计算今天距月底还有几天
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发,开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直接使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 
代码范例列表 第1章 示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 boolExample.java 演示boolean变量的程序 charExample.java 演示char变量的程序 compare.java 演示前缀、后缀自加之间区别的程序 constCharExample.java 演示转义字符 converseNumber.java 逆向输出数字 daffodilNumber.java 求水仙花数 division.java 演示整除结果 errorCompoundVariable.java 错误使用局部变量示例 factorial.java 求阶乘 Fibonacci.java 求Fiblnacci数列 GcdAndGcm.java 求最大公约数和最小公倍数 errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper.java 小写字母转换成大写字母 lozengeStar.java 输出一个由*组成的菱形 multiplyTable.java 求乘法口诀表 narrowingConversion_1.java 缩减转换引发错误示例1 narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出数据 outputByWhile.java 用do~while循环随机输出数据 outputMax.java 求两个数中的最大数 overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 realExample.java 演示浮点数的有效位数 remainder.java 取余运算示例 showBreak.java 利用标号语句跳转出所有循环嵌套 showCount.java 循环计数示例 showDoubleLoop.java 演示双重循环 showDoubleLoopSe.java 改进的双重循环 showOrder_1.java 演示操作数求值顺序示例1 showOrder_2.java 演示操作数求值顺序示例2 sign.java 用条件运算实现符号函数示例 signByIF.java 用if语句实现符号函数示例 triangleStar.java 输出一个由*组成的直角三角形 upperToLowCase.java 大写转换成小写 variableScopeExample.java 变量使用范围示例 第3章 示例描述:本章学习对象和类。 accessMember.java 访问成员变量示例 constructNoPara.java 无参数的构造方法 constructWithPara.java 带参数的构造方法 declareDefault.java 缺省访问权限的使用 declarePrivate.java 私有访问权限的使用 declareProtected.java 保护访问权限的使用 deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative.dll 用C生成的DLL文件 HelloNative.exp 用VC编译生成的辅助文件 HelloNative.h 用javah生成的C语言用的头文件 HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法访问本类成员 showMethod.java 演示如何定义一个方法体 showReturn_1.java return语句示例1 showReturn_2.java return语句示例2 showStaicVar.java 演示静态变量的使用 staticBlock.java 演示静态块的使用 staticVar.java 定义静态变量 supplyTest.java 对象作为静态成员使用示例 trySwap.java 试图交换两个形参的值 useOnlyTest.java 创建多个对象,演示this的作用 useStaticBolck.java 使用静态块 useStVar.java 使用静态成员变量 第4章 示例描述:本章学习继承与多态。 absClass.java 抽象类定义示例 ancestor.java 基类定义示例1 ancestor_1.java 另一个基类定义 anonymousInner.java 匿名内部类 base.java 定义一个基类 BaseColors.java 一个简单的接口 basePoint.java 一个测试用的基类 Colorable.java 一个子接口 ColoredPoint.java 一个测试用子类 common.java 一个公用类 derive.java 一个测试用子类 differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java 可以完成回调功能的类 HasStatic.java 一个简单的拥有静态成员的类 hideMember_1.java 成员隐藏示例1 hideMember_2.java 成员隐藏示例2 hideMember_3.java 成员隐藏示例3 hideMember_4.java 成员隐藏示例4 hideMember_5.java 成员隐藏示例5 implementABS.java 继承一个抽象类 impRecall.java 实现回调函数 inheritConstruct_1.java 构造器继承示例1 inheritConstruct_2.java 构造器继承示例2 inheritConstruct_3.java 构造器继承示例3 inheritConstruct_4.java 构造器继承示例4 inheritConstruct_5.java 构造器继承示例5 inheritConstruct_6.java 构造器继承示例6 inheritor.java 子类覆盖父类示例 inPack.java 包示例 LotsOfColors.java 定义一个子接口 matching.java 重载解析示例 notInPack.java 用前缀引用包中的类 onlyShow.java 一个简单的接口 Outer_1.java 外部类示例1 Outer_2.java 外部类示例2 Outer_3.java 外部类示例3 Outer_4.java 外部类示例4 Outer_5.java 外部类示例5 Outer_6.java 外部类示例6 Outer_7.java 外部类示例7 Outer_8.java 外部类示例8 overrideMember_1.java 成员方法覆盖示例1 overrideMember_2.java 成员方法覆盖示例2 overrideMember_3.java 成员方法覆盖示例3 overrideMember_4.java 成员方法覆盖示例4 overrideMember_5.java 成员方法覆盖示例5 Paintable.java 实现了多个接口的方法 PaintedPoint.java 实现了多个接口的方法 Point.java 一个简单的类 PrintColors.java 一个子接口 RainbowColors.java 一个子接口 realPoint.java 一个子类 second.java 属于一个命名包的类 showDiff.java 演示隐藏与覆盖之间的区别 showSomething.java 测试运行时多态 stupid.java 试图覆盖最终方法的类,它有错误 Sub.java 一个简单的子类 Super.java 一个基类 testOverload.java 测试方法的重载示例1 testOverload_1.java 测试方法的重载示例2 testOverload_2.java 测试方法的重载示例3 testOverload_3.java 测试方法的重载示例4 useConstructor.java 使用构造器 useHideMember_2.java 试图使用隐藏的成员变量 useInner.java 使用内部类 第5章 示例描述:本章学习数组与字符串。 ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维数组 traversing.java 遍历一维数组 useStrBuf.java 使用StringBuffer示例 useString.java 使用String示例 YanghuiTri.java 构造和显示杨辉三角 第6章 示例描述:本章学习Java的异常处理。 demoException_1.java 异常示例1 demoException_2.java 异常示例2 demoException_3.java 异常示例3 demoException_4.java 异常示例4 demoException_5.java 异常示例5 divZeroError.java 除零异常 hasCheckException.java 检查型异常 MyException.java 用户自定义异常 myInput.java 输入数据示例 nestException_1.java 异常嵌套示例1 nestException_2.java 异常嵌套示例2 nestException_3.java 异常嵌套示例3 outBoundError.java 下标越界异常 throwException.java 抛出异常示例 throwsException.java 声明抛出异常 useMyException.java 使用自定义异常 第7章 示例描述:本章学习Java的输入和输出。 CopyFile.java 文件复制实例 dir.java 显示目录下的所有文件和目录 encrypt.java 文件加密 FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java 读入数据写出到文件 Student.java 定义一个用来序列化的类 ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用Scanner接收用户的输入 第8章 示例描述:本章学习多线程。 enhanceThread.java 一个自己定义的增强型线程类 ThreadImRunnable.java 继承Runnable接口实现多线程 mulThread.java 创建多个线程对象的类 demoJoin.java 演示使用join()以确保主线程最后结束 clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类设置线程优先级示例 myThread.java 自己定义的一个Thread的子类 mutexThread.java 一个能管理临界区的线程类 demoMutex.java 使用上面这个类来演示线程的互斥 commSource.java 一个共享资源的类 demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 changeFields.java 改变属性值示例 Circle.java 一个用于测试的简单类 DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的简单类 useArray1.java 用反射机制使用数组示例1 useArray2.java 用反射机制使用数组示例2 第10章 示例描述:本章学习泛型。 demoBounds.java 演示有界类型 demoForceChange.java 演示强制类型转换 demoGeneric.java 泛型类的使用示例 demoGenIF.java 测试泛型类 demoGenMethods.java 泛型方法示例 demoHerit_1.java 泛型类继承示例1 demoHerit_2.java 泛型类继承示例2 demoRTTI_1.java 泛型类的类型识别示例1 demoRTTI_2.java 泛型类的类型识别示例2 demoWildcard.java 通配符使用示例 demoWipe.java 擦拭示例 derivedGen.java 泛型父类继承示例 derivedNonGen.java 非泛型父类继承示例 foo.java 一个有错误的类 Gen.java 无限界的泛型擦拭 Generic.java 一个简单的泛型类 genMethod.java 一个泛型方法 GenStr.java 有限界的泛型擦拭 MinMax.java 泛型接口示例 MyClass.java 实现一个泛型接口 nonGen.java 以非泛型类为父类 simpGen.java 使用泛型类示例 Stats.java 一个有界类泛型 superGen.java 父类是泛型 twoGen.java 有两个参数的泛型类 第11章 示例描述:本章学习集合。 CompareScore.java 实现比较器接口 demoAlgorithm.java 集合中简单算法示例 demoArrayList.java 链表使用示例 demoBinSearch.java 二分查找示例 demoEnumSet.java 枚举类型示例 demoHashMap.java 哈希映射示例 demoHashSet.java 哈希集合示例 demoSort.java 排序示例 demoTreeMap.java 树映射示例 demoTreeSet.java 树集合示例 demoVector.java 向量使用示例 job.java 模拟操作系统的进程调度 monkey.java 用链表求猴子选大王 myCompare.java 自己实现的比较器接口 reverseString.java 利用栈将字符串逆序输出 scheduling.java 模拟操作系统的作业调度过程 showClothValue.java 根据用户输入型号输出相应的价格 Size.java 一个枚举类 Student.java 用于记录学生信息的类 第12章 示例描述:本章学习类型包装器、自动装箱和元数据。 demoAnno.java 给方法做注释示例 demoAutoBox_1.java 自动装/拆箱机制示例1 demoAutoBox_2.java 自动装/拆箱机制示例2 demoAutoBox_3.java 自动装/拆箱机制示例3 demoInteger.java 整数类型包装器使用示例 demoSingle.java 单成员注释使用示例 DeprecatedClass.java Deprecated注释示例 InProgress.java Documented元注释使用示例 Marker.java 一个被注释的接口 Meta.java 利用反射机制获取方法的注释 MetaAll.java 获取所有注释示例 MyAnno.java 包含了默认值的注释 MyMarker.java 标记注释使用示例 MySingle.java 单成员注释使用示例 OverrideTester.java Override注释示例 SuppressWarningsTester.java SuppressWarnings注释示例 TODO.java Target元注释使用示例 What.java 显示全部注释 第13章 示例描述:本章学习常用工具类。 checkEmail.java 利用正则表达式检验Email的合法性 currentTime_1.java 显示时间示例程序1 currentTime_2.java 显示时间示例程序2 currentTime_3.java 显示时间示例程序3 DateAndTime.java 用Calendar显示当前的日期和时间 demoFmtTime.java 使用时间格式转换符输出日期和时间 demoFormatter.java Formatter简单输出示例 demoGroup.java 组匹配使用示例 demoMathing.java 匹配方法使用示例 demoMemory.java 内存管理示例程序 demoPattern_1.java Pattern使用示例1 demoPattern_2.java Pattern使用示例2 demoRandom.java 产生随机数序列示例 demoReplace.java 替换方法使用示例 demoRound.java 取整函数使用示例 elapsed.java 计算程序运行时间 exitJVM.java 从子线程中退出虚拟机 getPI.java 利用随机数求π值 progPI.java 利用反正切函数求π的值 runNotepad.java 启动记事本 showCalendar.java 用GregorianCalendar实现一个万年历 showProperties.java 获取环境属性 textToTime.java 从文本串创建日期对象 useLog.java 利用换底公式求任意对数值 第14章 示例描述:本章学习GUI程序设计。 addNodeInJTree.java 在JTree中增加节点示例 AlarmClock.java 小闹钟程序 AWTComponents.htm 为显示AWT组件而编制的网页文件 AWTComponents.java AWT组件示例 AWTFrame.java 用AWT编写的一个简单窗口 CheckAchromatopsiat.java 色盲检测程序 demoBorderLayout.java 边框布局使用示例 demoCardLayout.java 卡片布局使用示例 demoGridBagLayout.java 增强网格布局使用示例 demoGridLayout.java 网格布局使用示例 demoJApplet.htm 运行JApplet的网页文件 demoJApplet.java JApplet使用示例 demoJButton.java 按钮使用示例 demoJCheckbox.java 复选框使用示例 demoJComboBox.java 组合框使用示例 demoJDialog.java 对话框使用示例 demoJFrame.java JFrame简单使用示例 demoJLabel_1.java 图像标签使用示例 demoJLabel_2.java 改变标签上鼠标形状示例 demoJList.java 列表框使用 demoJMenu.java 菜单使用示例 demoJPanel.java 面板使用简单示例 demoJRadioButton.java 单选按钮使用示例 demoJScrollPane_1.java 在JScrollPane创建时添加组件示例 demoJScrollPane_2.java 通过add()方法添加组件示例 demoJSplitPane_1.java 分隔板简单示例1 demoJSplitPane_2.java 分隔板简单示例2 demoJTabbedPane.java 选项板使用示例 demoJTable_1.java 表格使用示例1 demoJTable_2.java 表格使用示例2 demoJTable_3.java 表格使用示例3 demoJTable_4.java 表格使用示例4 demoJTable_5.java 表格使用示例5 demoJText.java 文本框和密码框使用示例 demoJTextArea.java 文本区使用示例 demoJToolBar.java 工具栏使用示例 demoJTree.java 创建JTree示例 ExampleFileFilter.java Sun公司提供的一个文件名过滤器 findDialog.java 查找对话框 fontDialog.java 字体选择对话框 MyTableModel.java 本类实现了一个表格用的模型,取代默认的模型 Notebook.java 记事本 painting_1.java 在面板上画出简单图形示例1 painting_2.java 在面板上画出图形示例2 reMulEvent.java 响应单击按钮事件 showTriDialog.java 用系统预定义的对话框 本章下面还有一些编程要用到的图片和声音文件,不一一列出。 第15章 示例描述:本章学习多媒体程序设计。 building.java 调用另外一个houseCanvas类画出一栋房子 CombinerCanvas.java 编写自己的画布,所要显示的图片在此画布上显示 CombinPic.java 合成两幅图片 DrawArcs.java 画椭圆和圆弧示例 DrawLines.java 画直线示例 DrawPoly.java 画多边形示例 DrawRects.java 画矩形示例 fadeInOut.java 淡入淡出效果示例 FillArea.java 填充图形示例 FontsCanvas.java 自行管理字体的画布 GetFonts.java 获取系统中安装的字体示例 GrayFilter.java 自己实现的GrayFilter类 GrayModel.java 实现一个具备灰度变换功能的Model houseCanvas.java 用直线画出一栋房子 illumination.java 光照特效示例 LightingLiteral.java 字体特效显示示例 ManageFonts.java 自行管理字体示例 mixing.java 显示色彩混合效果 playAudio.java 在Application中播放声音文件 playMP3.java 增强的声音播放文件 playMusic.htm 可以播放背景音乐的一个网页 playMusic.java 利用AudioClip播放声音文件 playVideo.java 媒体播放器编写示例 ResizeOval.java 缩放图形示例 ShowFonts.java 建和使用字体示例 SoundBase.java 将Java Sound API封装在一个线程中 TransparencyExample.java 为实现色彩混合效果而定义的画布 viewPic.java 用标签显示图像示例 本章下面还有一些编程要用到的图片和声音文件,不一一列出 第17章 示例描述:本章学习数据库程序设计。 AddressList.java 学生信息管理系统实例 deleteData.java 从数据库中删除记录 FirstExample.mdb 本章用到的数据库文件 insertData.java 向数据库中添加新数据 queryData.java 查询数据示例 updateData.java 修改数据示例 第18章 示例描述:本章学习C/S网络程序设计。 chatClient.java 聊天客户端程序 chatServer.java 聊天服务端程序 Client.java 一个简单的客户端程序 DownFile.java 文件下载示例 GetHostName.java 根据IP查找主机名 GetIP.java 根据域名查找IP地址 GetMyIP.java 获取本机IP地址 MultiServer.java 可以响应多个客户端的服务程序 myBrowser.java 一个简单的浏览器 Server.java 一个简单的服务端程序 ServerThread.java 一个服务端的线程类 UDPChat.java 用UDP实现的聊天程序示例 第19章 示例描述:本章学习JSP程序设计。本章所有文件均已经按照Tomcat网站部署的要求放置在各自的目录下,然后打包成ZIP文件。读者只需要解包后放置在某一分区中,然后在Tomcat中配置好入口就可以使用。 下面的文件均放置在ROOT目录下面 ArbitraryObject.java 实现一个事件监听者接口的类 calendar.jsp 用JSP实现的日历 count.txt 站点计数器保存的数据文件 counter.jsp 用JSP实现的计数器 faq.java 连接数据库用的JavaBean leaveword.htm 留言板的主页面 Model.java 自己定义的事件源类 ModelChangedListener.java 自己定义的一个事件监听者接口 MouseMovedExampleEvent.java 事件状态对象示例 MouseMovedExampleListener.java 鼠标事件监听者接口与事件监听者示例 OurButtonCustomizer.java 实现一个“按钮”Beans的定制器 query.jsp 数据库查询程序 saveword.java 用于保存记录的JavaBean saveword.jsp 后台保存数据的JSP文件 viewword.jsp 查看留言的JSP页面 WeekDayBeanInfo.java 实现BeanInfo接口示例 WeekDayEditor.java 实现属性编辑器接口 下面的文件均存放在chat目录下,是聊天室的组成文件。 chatreg.java 用户注册用到的JavaBean文件 chatreg.jsp 用户注册的前台JSP文件 chatregcof.jsp 用户注册检查JSP文件 chatroom.jsp 聊天室的主页面 confirm.jsp 检查登录是否正确的JSP文件 in.jsp 即将进入聊天室前的提示页面 listuser.jsp 显示聊天室内的所有用户名的JSP文件 logout.jsp 清除用户的相关信息 netchat.jsp 用户进入聊天室的界面文件 showmsg.jsp 显示各个用户所说的话 talk.jsp 用户聊天用的JSP文件 第21章 示例描述:本章是一个IM软件的完整代码。 ChatFrame.java 聊天用的主界面程序 ClientManageFrame.java 是好友管理窗口,也是客户端程序的主窗口 DBConnection.java 连接数据库用的JavaBean FindUserDlg.java 查找好友对话框 FindUserInfo.java 显示用户基本信息 FriendLabel.java 在list列表中显示用户的头像和字符信息 Login.java 用户登录界面 LoginUser.java 定时器的任务类,用于定时获取上线的用户的信息 MyInfo_AboutBox.java 显示作者信息 ReceiveOthersDialog.java 当用户收到陌生人的消息时,这个类向用户提示 RegisterDialog.java 用户注册面板 Server.java 提供各种服务的类 ServerFrame.java 服务器端的主界面 ServerThread.java 与客户端通讯的线程 SetCenter.java 将窗口设置在屏幕中央的类 showTimeTask.java 刷新时间的类 StartServer.java 启动服务器的主类 UpdateDialog.java 更新用户信息的对话框 UserInfo.java 获取用户信息的类 UserInfoBean.java 保存用户信息的一个JavaBean
第一章 绪论 1.1. 选题背景 这几年,许多新名词涌入我们的视野:博客、圈子、播客、WAP等。这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站创造内容的时代变为由用户创造内容的web 2.0时代。 在web 2.0应用中,博客(Blog)是web 2.0核心应用中最典型、最流行的代表之一,也是web 2.0技术应用的最直观的表现,是web 2.0精神和理念的具体体现。 1.2. 问题的提出 Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过“六度空间”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。随着博客人数的增加, Blog 作为一种新的生活方式、新的工作方式、新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构:网络信息不再是虚假不可验证的,交流和沟通更有明确的选择和方向性,单一的思想和群体的智慧结合变的更加有效,个人出版变成人人都可以实现的梦想—— Blog 正在影响和改变着我们的生活。 1.3. 系统的开发目标 管理员通过前台页面进入后台管理模块后,可对注册的博客用户进行维护,包括对注册用户的添加、查找、修改和删除。 管理员进入登录后,可对帐户进行管理,包括添加管理员帐户、修改管理员帐户、删除管理员帐户和对帐户进行权限设置。 博客用户通过前台登录后,可对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片、和相关人员进行交流和沟通以及删除访问者发表的评论等。 因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量统计(6) 博客个人文章管理维护功能(7) 博客个人文章分类管理维护功能(8) 博客个人友情链接维护功能(9) 博客个人基本信息管理维护功能(10) 博客图片上传及个人相册管理(11) 网络用户写留言,博主查看留言。 第二章 系统设计 2.1. 系统分析 在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际需求,选择合适的开发工具及软件架构。 blog对系统的可靠性、稳定性有比较高的要求。本系统设计时,比较主流的B/S设计有基于JSP、ASP、PHP、CGI及J2EE等模式。相比较而言PHP的功能相对简单,不适合做大程序;而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的吞吐量,提高并发处理客户请求数量,系统采用了IBM服务器作为主机。在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. 服务器端操作系统:独立于操作系统的跨平台系统,客户端MicroSoft Windows 2000及以上; 2. 数据库:MySQL 5.0.27版本; 3. Web服务器:Tomcat 5.5及以上版本,配合MVC设计模式及 Hibernate开发架构; 4. 客户端运行环境:能运行IE 5以上或Netscape 5以上浏览器的操作系统,配合使用Ajax技术; 5. 客户端运行工具:目前的系统采用浏览器作为客户端,为了支持Ajax开发框架,应该选择使用IE 5以上版本浏览器。 本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足信息处理的需求。 2、 系统的开放性和系统的可扩充性:系统在开发过程中,应该充分考虑以后的可扩充性。例如数据表中用户选择字段方式的改变,用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和易维护性:要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。 4、 系统的数据要求:1、数据录入和处理的准确性和实时性。2、数据的一致性与完整性。3、数据的共享与独立性。 2.2. 系统的可行性分析 2.2.1. 技术可行性 技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户(这里是服务器,网速)提出的要求(如计算机的容量、速度等)。此外,还要考虑开发人员的水平,学习了两年的jsp开发,对于这个系统的编写,我想完整的之需要两个月就可以写出程序,再花上几天的调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。从一定程度上具备了开发一个小型系统的能力。再有就! 2.2.2. 经济可行性 主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理和维护费用、人员工资和培训费等,另一个是取得的收益。这是个小型的系统,从投入的人力,财力与物力来讲是非常小的,发布出去之需要注册域名就可以了,从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作。 2.2.3. 管理可行性 有IP地址、用户名与密码等,可以下载一个FTP上传工具(cure)上传更新后的内容.可以在http://www.skycn.com/soft/683.html下载到. 下载以后,通过"站点管理"-->"新建站点".输入IP,用户名,密码.然后连接即可. 当然也可用FTP工具.直接在IE浏览器地址栏输入ftp://www.域名/然后输入用户名和密码.同样可以上传.随时更新文件! 第三章 开发环境的说明与安装 3.1. 开发语言的选择 3.1.1. JAVA简介 Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发。Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。 3.1.2. Web应用程序开发环境—JSP技术 JSP的全称是Java Server Pages,它是SUN推出的一种动态网页技术标准。它在传统的静态页面文件(*.html,*.htm)中加入JAVA程序片段和JSP标记,就构成了JSP页面。JSP具有以下的优点: 1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在非常流行的LINUX系统,应用非常广泛的Apache服务器也提供了支持JSP的服务; 3、组件的开发和使用很方便:如ASP的组件是由C++,VB等语言开发的,并需要注册才能使用;而JSP的组件是用Java开发的,可以直接使用; 4、一次编写,处处运行:作为JAVA开发平台的一部分,JSP具有JAVA的所有优点,包括Write once , Run everywhere. 3.2. 数据库的选择 3.2.1. Web应用程序开发环境—SQLserver数据库 SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:   1.真正的客户机/服务器体系结构。   2.图形化用户界面,使系统管理和数据库管理更加直观、简单。   3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。   4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice产品集成。   5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。   6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。   7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。   SQL Server 2000与以前版本相比较,又具有以下新特性 :   1.支持XML(Extensive Markup Language,扩展标记语言)   2.强大的基于Web的分析   3.支持OLE DB和多种查询   4.支持分布式的分区视图   安装、运行SQL Server 2000的硬件需求   (1)计算机   Inter及其兼容计算机,Pentium 166Mz或者更高处理器或DEC Alpha和其兼容系统。   (2)内存(RAM)   企业版最少64MB内存,其他版本最少需要32MB内存,建议使用更多的内存。   (3)硬盘空间   完全安装(Full)需要180MB的空间,典型安装(Typical)需要170MB的空间,最小安装(Minimum)需要65MB的空间。 3.3. 开发工具的选择 MyEclipse,Deamweare,选择SQLserver作为后台的数据库,选择JAVA、JSP、JavaScript、Html作为应用程序开发工具,运用Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计。 1、Tomcat应用服务器 目前支持JSP的应用服务器是较多的,Tomcat是其中较为流行的一个Web服务器,被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。 Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。Tomcat是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性,越来越受到人们的重视。 2、 B/S 开发模式 伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。 过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集中于客户端程序,因此,必然导致以下问题: 系统安装、调试、维护和升级困难。由于客户端的硬件配置可能存在差异,软件环能各不相同,因此,在安装时,必须对每一个客户端分别进行配置,同样,在软件升级时也要对客户端分别处理。 B/S模式带来了巨大的好处: 开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。 良好的安全性能,防火墙技术可以保证后台数据库的安全性。所有的配置工作都集中在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 第四章 系统设计 4.1开发框架技术介绍 对于框架技术,我们采用Struts+ajax的整合! Struts是应用比较广泛的一种表现层框架 1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。它使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。 2、 Ajax我们主要应用就是xmlhttprequest,回调函数实现局部刷新达道数据更新! 4.2需求分析 Blog网站主要是实现注册用户登录、管理相关信息、博文及相关评论、查看留言、友情链接、及图片的上传和图像的播放而为上网用户提供按博文主题搜索,查看注册用户的博文及提出相关评论,并为注册用户写留言,游览注册用户的相册、注册等功能的系统。下面就以两种不同的用户来分析博客网站的需求。 4.2.1注册博友 首先必须在博客首页中登录填写用户名和密码,这样才能执行一些相关操作,不然就是普通用户只能查看一些信息,而不能发表博文。可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图2。 图2 博客管理页面的用例图 在博客主界面中发表博文时可以选择博文类型,这样可以更好管理自己的博文。并查看和删除网友对自己的博文的一些评论、查看和删除网友留下的一些留言,提供与其他网友交流的空间。更好交流,在信息时代人们通过个人空间沟通也用来但不能在自己的博客主页面中提交评论和留言。。这样在本系统中就可以为博友提供更多的个人色彩。在管理页面中添加和删除友情连接。这样博友可以在自己空间中快速定位自己的关心的网站。这样还可以让网友看到自己的一些信息。友情链接及网页访问量统计显示:在博客的个人页面中还提供了推荐给普通网络用户的相关友情链接,此外,对个人页面的访问量也在随时进行统计,并在个人页面中进行直观的显示。 博客主页面的用例图如图3所示: 图3 博客主页面的用例图 4.2.2 普通用户 在博客注册页面注册成为博客的注册用户,才可以拥有自己独立的空间,进入某一博客页面查看相关文章信息时,可以随时对自己所感兴趣的文章发表评论,同时也可以查看到其他人针对该博文的评论。普通用户在阅读博文时可以在最后留下自己的一些评论。他也可以留下更多的信息。这样他可以写留言。这样他留下的信息就更快地被博友所看到。普通用户进入博友的用例图如图4所示: 图4上网博友在博客主页面的用例图 普通网友可以搜索自己关心的一些数据。并且在搜索结果中提供在结果范围内再次搜索。这样就可以将范围缩小。首页向注册用户提供登陆模块,注册用户在博客网站首页跟上网网友一样可以查看博客和博文推荐。上网网友可以注册成为博客用户,拥有自己独立的空间。这一模块的用例图如图5所示: 图5 博客首页的用例图 4.3 功能模块介绍 4.3.1 博客注册登录管理模块 博客注册登录管理模块用于建立博客网站固定的客户群体,通过记录对应的博客档案,实现对博客信息的后台维护及管理,同时也便于通过博客档案库将网站最新动态及相关企业的信息方便地传达给每一位潜在的客户。 该功能模块实现了以下几个子功能。 (1)新博客在线注册。 (2)博客登录管理。 (3)跳转到博客主页。 只有进行登录并通过身份验证的用户,才可以在个人博客页面发表日志,并借助个人设置实现对个人博客相关信息的管理维护。对于没有经过身份验证的网络用户不允许在博客页面中发表日志,更不允许对博客页面信息进行管理维护。 该模块实现新博客的注册及登录验证功能。其中,注册新博客时会对用户输入的注册信息进行有效性验证,包括基本数据格式的有效性以及逻辑有效性,例如,用户名被占用时将及时给出提示。注册成功的博客登录时,会随时根据博客输入的登录信息进行提示,如用户名错误或者密码错误。 4.3.2 博客及文章检索查询模块 博客及文章检索查询模块为网络用户提供便捷的搜索,以及日志阅读浏览等功能,同时对日志的评论信息、博客推荐也能够及时反馈给网络用户。 该功能模块实现了以下几个子功能。 (1)热门博客页面推荐。 (2)最新博客日志推荐。 (3)日志信息关键字搜索。 该模块能够在网页中随时提供在线的最新日志信息。该信息需要定期更新,网络用户可以随时获得最新日志以及最热门的博客推荐。在客户选择了某个博客或者某个感兴趣的日志后,可以方便地跳转到对应博客页面进行日志的阅读,并和博客进行交流互动。 为了使网络用户尽快定位到所需的博客资料及日志信息,本模块提供了搜索功能,用户可以对所关注的日志信息按照标题进行关键字搜索,以避免用户浏览多个页面来寻找所需的日志信息。 4.3.3博客页面显示模块 当网络用户进入某个人博客主页后,在该页面中将提供博客日志列表的显示,同时为了方便用户浏览,在该模块中提供根据分类名进行日志列表的显示,也提供日志评论的浏览,此外还允许用户在博客页面中发表评论及留言。 该功能模块实现了如下几个子功能。 (1)用户可以分页查看对应的日志内容及评论信息。 (2)用户可以针对日志内容发表评论。 (3)用户可以针对博客进行留言。 (4)用户可以分类查看日志内容。 在该模块中还提供了博客页面统计信息,日志、评论及留言信息分页显示等方便用户的显示效果。 4.3.4 博客个人维护管理模块 博客个人维护管理模块用于实现用户对博客个人主页及相关信息的动态管理。 该功能模块实现了如下几个子功能: (1)日志及日志分类管理。 (2)评论及留言管理。 (3)个人基本信息维护管理。 借助该模块,用户可以随时对个人博客主页中的内容进行增加或修改,包括日志分类信息的更新、评论及留言管理等功能,也允许用户对博客的个人信息进行维护及其管理。 4.4 系统分析 本系统采用严格的J2 EE 应用结构,主要有如下几个分层。 1. 表现层:由JSP 页面组成。 2. MVC 层:使用Struts框架。 3. 业务逻辑层:主要由Spring loC 容器管理的业务逻辑组件组成。 4. DAO 层:由7 个DAO 组件组成,实现类必须继承Spring提供的HibernateDaoSupport。 5. Hibernate 持久层:由7 个PO 组成,并在Hibernate Session 管理下,完成数据库访问。 6. 数据库服务层:使用MySQL 数据库存储持久化数据。 系统的具体分层如图5 所示。 图6 系统结构图 在图6 黑色大方框内的MVC 控制层、Service 层及DAO 组件层的组件,都由Spring IOC 容器负责生成,并管理组件的实例(实例必须是单身模式的,本系统中的bean基本上是单身的)。 4.3.1系统架构说明 本系统不仅严格按MVC 模式设计,还按J2 EE 分层设计,将中间层严格分成业务逻辑层、DAO 层及数据持久层等。MVC 层的控制器绝对禁止持久层访问,甚至不参与业务逻辑的实现。表现层采用传统JSP 技术。 本系统采用的是典型的J2EE 三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。Jsp广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate ,为了将控制层与业务逻辑层分离,又细分为以下几种。 Web 层,就是MVC 模式里面的C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC采用Struts框架。 Service 层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO 层为基础,通过对DAO 组件的正面模式包装,完成系统所要求的业务逻辑。 DAO 层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。 PO ,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate 作为ORM 框架。Spring 的作用贯穿了整个中间层,将Web 层、Service 层、DAO 层及PO 无缝整合,其数据服务层用来存放数据。 通过使用Hibernate 持久层,可以避免使用传统的JDBC 操作数据库,对JDBC近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计及编程,透过Hibernte 对PO对象持久化操作,不管插入还是查询都是通过PO。 4.3.2实现DAO 层 DAO 还有助于提升系统的可移植性。独立的DAO 层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响DAO 层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。 对于不同的持久层技术, Spring 的DAO 提供一个DAO 模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。Spring 为Hibernate 提供的DAO 支持类是: HibernateDaoSupport。 4.3.3 DAO组件的定义 DAO 组件提供了各持久化对象的基本的CRUD 操作。而在DAO 接口里则对DAO组件包含的各种CRUD 方法提供了声明,但有一些IDE 工具也可以生成基本的CRUD方法。使用DAO 接口的原因是:避免业务逻辑组件与特定的DAO组件藕合。由于DAO 组件中的方法不是开始就设计出来的,其中的很多方法可能会随着业务逻辑的需求而增加,但以下几个方法是通用 的。 • get: 根据主键加载持久化实例。 • saveor update: 保存或更新持久化实例。 • remove: 删除持久化实例。 上面涉及了7个PO,这样我们必须设计7个对应的PODao 7个Dao必须继承BaseDao 这个BaseDao 有对接口的一些基本的CURD操作。7个Dao 如下。LinksDao ,BlogDao、FeedBackDao、ArticleDao、MessageDao、SortDao、PictureDao。这7个Dao 分别封装对自己的持久化对象的一些操作。 4.3.4 部署DAO 层 HibernateDaoSupport类只需要一个SessionFactory 属性,即可完成数据库访问。SessionFactroy创建Session,而数据库的CRUD操作都是有Session 完成,并将查询结果保存在一级缓存中,每次用户提交一次会话,可能需要Session完成一些数据库的操作而实际的数据库访问由模板类HibernateTemplate完成,该模板类提供了大量便捷的方法,简化了数据库的访问。 第五章 数据库设计 5.1定义(数据词典) 1、数据库表名的定义使用:重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字相同。 2、NN 表示not null 不填表可为空。 3、数据类型不使用固定数据库的类型,标识大众类型,如字符串、字符、数字等。这样在更改数据库时需求的数据是可移植的 4、输写数据表在数据库中的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。 5、长度定义又数据类型决定:如字符串可选8000以下,数字可在50位之间,字符只允许一位。 6、输入方式表示数据的来源:生成表由程序或数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单选框、复选框、下拉列表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。 5.2主要表结构如下 1. 表[blogs]日志数据表 字段名 类型 说明 blogid Int(10) 日志的ID title text 日志标题 pubtime Int(11) 日志发表时间 authorid Int(8) 日志作者的UID replies Int(8) 日志的评论数 tbs Int(8) 日志的trackback数 views Int(8) 日志的查看次数 category Int(3) 日志所属的分类的ID content mediumtext 日志正文内容 property Int(1) 日志的属性 0 公开日志 1 锁定日志 2 隐藏日志 3 一般草稿 2.表[user]博友登陆信息表 字段名 类型 说明 userid Int(10) 博友ID nicheng Text 博友在博客里的称呼 username text 登陆时的用户名 password text 登陆密码 3.表[register]用户数据表 字段名 类型 说明 userid Int(8) 登陆时需要用到的用户名 username text 用户昵称 userpwd Int(8) 登陆密码 regtime Int(11) 注册时间 usergroup Int(2) 所属的用户组ID email text 用户email qq text Qq号 msn text 用户msn gender text 用户性别 第六章 主要功能的实现 6.1 登录控制: if(this.session().getAttribute("rand")!=null){//检验随机数是否为空 if(this.checkCode.equals(this.session().getAttribute("rand").toString())){//比较随机数 uservo=userbo.queryUserByINfo(uservo);//检验用户信息并将信息返回 if(uservo!=null){//看用户是否存在 this.setUserpurview(uservo.getPurviewId());//设置用户权限 this.session().setAttribute("user", uservo);//将用户信息放在session中 return SUCCESS;//返回用户主界面页面 }else{ return ERROR;返回到失败页面} }else{return ERROR; }}else{ return ERROR; } 6.2 Ajax 读取txt格式数据 function ajax_function(var1,var2){ var xmlHttp = null; //创建xmlhttprequest try { // Firefox, Opera 8.0+, Safari 对不同浏览器常见不同对象 xmlHttp=new XMLHttpRequest(); } catch (e) { try { // Internet Explorer xmlHttp=new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { alert('Your browser does not support AJAX!'); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { var someDiv = document.getElementById('someDiv'); someDiv.innerHTML=xmlHttp.responseText; } } xmlHttp.open('GET','www/index.jsp?param1='+var1+'¶m2='+var2,true); xmlHttp.send(null); } 6.3 系统架构与数据库的连接 由于我们开发时是利用MVC的设计模式,所以在此我们的数据库连接是封存在M中的,即只要我们和M层连接上,就已经连接上数据库了。 Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。我们只需在hibernate.cfg.xml中配置以下语句即可: sa jdbc:microsoft:sqlserver://localhost:1035;DatabaseName=webexamine org.hibernate.dialect.SQLServerDialect sqlserver2000 aaaaaaaa com.microsoft.jdbc.sqlserver.SQLServerDriver org.hibernate.dialect.HSQLDialect true 其实我们在这里配置了一个数据连接,以保证系统的正常运行,我们需要使用proxool连接池,我们经测试,分别用proxool、tomcat JNDI、Hibernate自带的连接池进行配置之后分别执行以上的10000条数据插入和读取,结果显示proxool的性能要优于tomcat JNDI,而Hibernate自带的就更不用提了,差很远。依次为:39265毫秒/10000条、26013毫秒/10000条、50029毫秒/10000条。 6.4数据的备份与还原 我们根据Mysql数据库提供的backup(备份)命令及restore(恢复)命令,进行数据库的备份与还原,在连接数据库后,我们在需要备份和还原的地方加入以下语句: backup database to disk='备份文件名' restore database from disk='备份文件名' 然后发送给数据库的管理对象进行数据还原与备份。 在知道了数据库备份与还原的接口后,用JAVA进行具体的连接,这里采用JAVA直连的方 法,部分代码如下: try{ String user="sa";//连接sqlserver2000数据库登陆名 String password="aaaaaaaa";//连接sqlserver2000数据库密码 String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//连接数据库的驱动字符串 String connStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webexamine";//注册连接字符串 Connection con=null; Class.forName( sDBDriver);//注册数据库驱动 con = Driver Manager.getConnection(connStr ,user,password);//获取数据库连接 String sql="backup database xncsims to disk='d:\\xncback.dat'";//备份数据库,还原数据库和着类似,只是将这句变为还原的语句 st=con.createStatement();//创建发送对象 rs=st.executeQuery(sql);//这里就是把你的SQL语句发到数据库执行 }catch(SQLException e){ System.out.println(e.toString());} catch(Exception e){ System.out.println(e.toString());} 6.4部分效果预览图 主页 留言界面

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧