J2EE心理预约.docx
《J2EE心理预约.docx》由会员分享,可在线阅读,更多相关《J2EE心理预约.docx(44页珍藏版)》请在冰点文库上搜索。
![J2EE心理预约.docx](https://file1.bingdoc.com/fileroot1/2023-5/28/200a31de-6f53-480d-ba22-f83803f2e94f/200a31de-6f53-480d-ba22-f83803f2e94f1.gif)
J2EE心理预约
《J2EE架构与程序设计》
心理咨询中心预约系统
班级:
071032
学号:
07103230
姓名:
宋琛
目录
一.J2EE开发平台简介2
1.J2EE简介2
2.J2EE的概念3
3.J2EE的优势3
4.J2EE的四层模型4
二.项目简单概括6
1.概述6
三.模块化分7
1.该系统的组成模块7
2.本人负责的工作7
四.数据库设计8
1.experts表:
用于存储心理专家的信息8
2.users表:
用于网站注册用户的信息8
3.message表:
用于存储留言信息9
4.reserver表:
用于存储预约信息9
五.具体功能实现(运行时界面的截图、及主要的代码)10
1.实体包entity定义代码:
10
2.util包(与数据库连接参数的定义)14
3.Dao包中代码(接口以及对接口的实现)15
4.Action19
六.项目总结及体会39
一.J2EE开发平台简介
1.J2EE简介
J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,,企业内部或外部难以互通的窘境。
2.J2EE的概念
J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。
通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EnterpriseJavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。
3.J2EE的优势
J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:
(1)保留现存的IT资产:
由于企业必须适应新的商业需求,利用已有的企业信息系统方面的投资,而不是重新制定全盘方案就变得很重要。
这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。
J2EE架构可以充分利用用户原有的投资,如一些公司使用的BEATuxedo、IBMCICS,IBMEncina,、InpriseVisiBroker以及NetscapeApplicationServer。
这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。
每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。
由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。
(2)高效的开发:
J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间供应商去完成。
这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。
高级中间件供应商提供以下这些复杂的中间件服务:
状态管理服务--让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
持续性服务--让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
分布式共享数据对象CACHE服务--让开发人员编制高性能的系统,极大提高整体部署的伸缩性。
(3)支持异构环境:
J2EE能够开发部署在异构环境中的可移植程序。
基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。
因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。
这在典型的异构企业计算环境中是十分关键的。
J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
(4)可伸缩性:
企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。
基于J2EE平台的应用程序可被部署到各种操作系统上。
例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。
(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。
能消除系统中的瓶颈,允许多台服务器集成部署。
这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。
(5)稳定的可用性:
一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。
因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失。
若是意外停机,那会有灾难性后果。
J2EE部署到可靠的操作环境中,他们支持长期的可用性。
一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如SunSolaris、IBMOS/390。
最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。
这是实时性很强商业系统理想的选择。
4.J2EE的四层模型
J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。
事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议?
?
通常是某种数据库协议。
它使得重用业务逻辑和界面逻辑非常困难。
现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。
一个多层化应用能够为不同的每种服务提供一个独立的层,以下是J2EE典型的四层结构:
运行在客户端机器上的客户层组件
运行在J2EE服务器上的Web层组件
运行在J2EE服务器上的业务逻辑层组件
运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件
J2EE应用程序组件
J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的类和文件组装成J2EE应用程序,并与其他组件交互。
J2EE说明书中定义了以下的J2EE组件:
应用客户端程序和applets是客户层组件.
JavaServlet和JavaServerPages(JSP)是web层组件.
EnterpriseJavaBeans(EJB)是业务层组件.
(1)客户层组件
J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.
(2)web层组件
J2EEweb层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。
正如下图所示的客户层那样,web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的enterprisebean来进行处理。
(3)业务层组件
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.有三种企业级的bean:
会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.消息驱动bean结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息.
(4)企业信息系统层
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.
二.项目简单概括
1.概述
(1)目的
由于心理咨询中心业务的扩展,预约人数的增加,为了节省时间,提供网上预约服务。
方便医生和病人,同时使本网站成为普及心理知识的一个平台。
(2)系统功能
1.分角色登陆功能
2.注册功能
3.实现用户留言
4.预约功能
(3)进一步功能介绍
注册模块:
●可检测注册的用户名是否可用
●验证用户输入的密码是否相同
●提示用户注册是否成功
留言模块:
●注册用户可以发表留言
●专家可以查看并回复留言
预约模块:
●用户注册登录后可以进行预约
●专家登录后可以查看预约信息
(4)该预约系统用例图
三.模块化分
1.该系统的组成模块
用户需求调查,网页制作,系统功能的实现,文档的编写,软件测试。
2.本人负责的工作
网页制作中的部分工作,首页图片及超链接,医生介绍,文章阅读,登陆及注册结果页面;系统功能实现中,编写了分角色登陆及注册功能;文档的编写以及软件测试为本小组人员共同完成。
四.数据库设计
数据库中表格的设计与代码中实体类一致,本系统共需四个表格。
1.experts表:
用于存储心理专家的信息
2.users表:
用于网站注册用户的信息
3.message表:
用于存储留言信息
4.reserver表:
用于存储预约信息
五.具体功能实现(运行时界面的截图、及主要的代码)
1.实体包entity定义代码:
(1)User类
packagecom.ibm.entity;
publicclassUser{
privateintid;
privateStringusername;
privateStringpassword;
privateStringemail;
privateStringsex;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
}
(2)Message类
packagecom.ibm.entity;
publicclassMessage{
privateintid;
privateStringusername;
privateStringmess;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetMess(){
returnmess;
}
publicvoidsetMess(Stringmess){
this.mess=mess;
}
}
(3)Reserver类
packagecom.ibm.entity;
publicclassReserver{
privateintid;
privateStringrealname;
privateStringsex;
privateintage;
privateStringmaritalstatus;
privateStringjob;
privateStringphone;
privateStringtime;
privateStringfamily;
privateStringproblem;
privateStringhistory;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetRealname(){
returnrealname;
}
publicvoidsetRealname(Stringrealname){
this.realname=realname;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetMaritalstatus(){
returnmaritalstatus;
}
publicvoidsetMaritalstatus(Stringmaritalstatus){
this.maritalstatus=maritalstatus;
}
publicStringgetJob(){
returnjob;
}
publicvoidsetJob(Stringjob){
this.job=job;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
this.phone=phone;
}
publicStringgetTime(){
returntime;
}
publicvoidsetTime(Stringtime){
this.time=time;
}
publicStringgetFamily(){
returnfamily;
}
publicvoidsetFamily(Stringfamily){
this.family=family;
}
publicStringgetProblem(){
returnproblem;
}
publicvoidsetProblem(Stringproblem){
this.problem=problem;
}
publicStringgetHistory(){
returnhistory;
}
publicvoidsetHistory(Stringhistory){
this.history=history;
}
}
2.util包(与数据库连接参数的定义)
(1)packagecom.ibm.util;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassDB{
privateConnectionconn;
privateStringdriverName="com.mysql.jdbc.Driver";
privateStringurl="jdbc:
mysql:
//localhost:
3306/test";
privateStringusername="root";
privateStringpassword="root";
publicDB(){
try{
Class.forName(driverName);
}
catch(ClassNotFoundExceptione){
System.out.println("加载驱动错误");
e.printStackTrace();
}
}
publicConnectiongetConnection(){
if(conn==null){
try{
conn=DriverManager.getConnection(url,username,password);
}
catch(SQLExceptione){
conn=null;
e.printStackTrace();
}
}
returnconn;
}
publicvoidclose(){
if(conn!
=null){
try{
conn.close();
}
catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
3.Dao包中代码(接口以及对接口的实现)
(1)以UserDao接口及其实现为例:
UserDao接口
packagecom.ibm.dao;
importcom.ibm.entity.User;
publicinterfaceUserDao{
publicbooleanaddVisitor(Useruser1);
publicbooleancheckUser(Useruser);
publicbooleancheckUser2(Useruser);
publicbooleancheckExpert(Useruser);
publicbooleancheckExpert2(Useruser);
}
(2)UserDaoImpl:
packagecom.ibm.dao.impl;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importcom.ibm.dao.UserDao;
importcom.ibm.entity.User;
importcom.ibm.util.DB;
publicclassUserDaoImplimplementsUserDao{
privateDBdb;
privateConnectionconn;
privateStatementstm;
privateResultSetrs;
publicbooleanaddVisitor(Useruser){
booleanbool=false;
try{
db=newDB();
conn=db.getConnection();
stm=conn.createStatement();
Stringsql="insertintousers(username,password,email,sex)values('"
+user.getUsername()+"','"+user.getPassword()
+"','"+user.getEmail()
+"','"+user.getSex()
+"')";
stm.executeUpdate(sql);
bool=true;
}
catch(SQLExceptione){
e.printStackTrace();
}
finally{
try{
stm.close();
db.close();
}
catch(SQLExceptione){
e.printStackTrace();
}
}
returnbool;
}
publicbooleancheckUser(Useruser){
booleanbool=false;
try{
db=newDB();
conn=db.getConnection();
stm=conn.createStatement();
Stringsql="select*fromuserswhereusername='"+user.getUsername()+"'";
rs=stm.executeQuery(sql);
if(rs.next()){
bool=true;
}
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
stm.close();
db.close();
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
returnbool;
}
publicbooleancheckUser2(Useruser){
booleanbool=false;
try{
db=newDB();
conn=db.getConnection();