首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Jsp+Servlet+JDBC兑现登录注册

2012-10-24 
Jsp+Servlet+JDBC实现登录注册1.? 搭建环境?? 2.? 在MySQL 中建立数据库表 表结构如下: Id:无实意主键,采

Jsp+Servlet+JDBC实现登录注册

1.? 搭建环境??
2.? 在MySQL 中建立数据库表
表结构如下:

Id:无实意主键,采用自增方式生成

stuId :学号

Name:姓名

Password:密码

registerDate:注册时间

email: Email

phone:电话号码

sex :性别

对应的SQL 语句如下:

DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (

? `Id` int(11) NOT NULL auto_increment,

? `stuId` varchar(20) NOT NULL,

? `name` varchar(50) NOT NULL,

? `sex` varchar(6) ,

? `registerDate` date ,

? `email` varchar(100) ,

? `phone` varchar(30 ,

? `password` varchar(20) ,

? PRIMARY KEY? (`Id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.? 新建Web 项目

在MyEclipse 中新建 "Web Project" ,命名为 RegisterSystem , Target Runtime 选项选择“ Apache Tomcat v6.0 ”,其它选项默认即可,点击完成,创建项目完毕。

4.? 开发实体类Account

新建类,命名为“Account ”,为该类定义属性,其中属性与数据表的各列相对应。为类添加方法,方法只需包括对属性的 Get 和 Set 方法,不包含任何业务逻辑。

5.? 配置数据源

数据源的配置有如下三种方法:

方法 一:
在Tomcat6.0 解压目录 conf 下找到 context.xml, 在其中的 <Context></Context>? 中加入如下代码:

Java代码?
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"???
??? password="lectery" username="root" driverClassName="org.gjt.mm.mysql.Driver"?
?url="jdbc:mysql://localhost/exp01" maxActive="100" maxIdle="30" maxWait="5000"/>?
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
??? password="lectery" username="root" driverClassName="org.gjt.mm.mysql.Driver"
?url="jdbc:mysql://localhost/exp01" maxActive="100" maxIdle="30" maxWait="5000"/>
?

在工程应用中/WEB-INF/ 下的 web.xml 中加入如下代码:

Java代码?
<resource-ref>??
? <description>MySQL DataSource</description>??
? <res-ref-name>jdbc/mysql</res-ref-name>??
? <res-type>javax.sql.DataSource</res-type>??
? <res-auth>Container</res-auth>??
</resource-ref>??
<resource-ref>
? <description>MySQL DataSource</description>
? <res-ref-name>jdbc/mysql</res-ref-name>
? <res-type>javax.sql.DataSource</res-type>
? <res-auth>Container</res-auth>
</resource-ref>
?
把MySQL-Connector-java-3.0.12-bin.jar( 可换更高版本 ) 加到 Tomcat 安装目录中的 lib 目录下和工程中的 lib 目录下。


方 法 二:
在Tomcat6.0 解压目录 conf 下找到 server.xml, 在其中的 <GlobalNamingResources></GlobalNamingResources> 中加入如下代码:

Java代码?
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"???
password="lectery" username="root" driverClassName="org.gjt.mm.mysql.Driver"???
url="jdbc:mysql://localhost/exp01" maxActive="100" maxIdle="30" maxWait="5000"/>?
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
password="lectery" username="root" driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost/exp01" maxActive="100" maxIdle="30" maxWait="5000"/>
?
在Tomcat6.0 解压目录 conf 下找到 context.xml, 在其中的 <Context></Context> 中加入并修改成如下代码:

Java代码?
<Context path="/RegisterSys" debug="1" reloadable="true" docBase="E:\EclipseWorkPlace\RegisterSys\WebRoot">??
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.Datasource"/>??
???????? <!--此处可能有系统其它自动生成的内容 -->??
</Context>?
<Context path="/RegisterSys" debug="1" reloadable="true" docBase="E:\EclipseWorkPlace\RegisterSys\WebRoot">
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.Datasource"/>
???????? <!--此处可能有系统其它自动生成的内容 -->
</Context>

?
在工程中/WEB-INF/ 下的 web.xml 中加入如下代码:

Java代码?
<resource-ref>??
<description>MySQL DataSource</description>??
<res-ref-name>jdbc/mysql</res-ref-name>??
<res-type>javax.sql.DataSource</res-type>??
<res-auth>Container</res-auth>??
</resource-ref>??
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
?
把MySQL-Connector-java-3.0.12-bin.jar( 或更高版本 ) 加到 Tomcat 安装目录中的 lib 目录下和工程中的 lib 目录下。

方法三:
在Tomcat6.0 解压目录 conf 下找到 server.xml, 在其中的 <Host></Host> 中加入如下代码:

Java代码?
<Context path="/RegisterSys" docBase="E:\EclipseWorkPlace\RegisterSys\WebRoot"?
debug="5" reloadable="true" crossContext="true">??
?
<Logger className="org.apache.catalina.logger.FileLogger"?
prefix="localhost_MysqlTest_log." suffix=".txt"?
timestamp="true"/>??
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" password="lectery"???
username="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/exp01"???
maxActive="100" maxIdle="30" maxWait="5000"/>??
</Context>?
<Context path="/RegisterSys" docBase="E:\EclipseWorkPlace\RegisterSys\WebRoot"
debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_MysqlTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" password="lectery"
username="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/exp01"
maxActive="100" maxIdle="30" maxWait="5000"/>
</Context>

?

在工程中/WEB-INF/ 下的 web.xml 中加入如下代码:

Java代码?
<resource-ref>??
? <description>MySQL DataSource</description>??
? <res-ref-name>jdbc/mysql</res-ref-name>??
? <res-type>javax.sql.DataSource</res-type>??
? <res-auth>Container</res-auth>??
</resource-ref>??
<resource-ref>
? <description>MySQL DataSource</description>
? <res-ref-name>jdbc/mysql</res-ref-name>
? <res-type>javax.sql.DataSource</res-type>
? <res-auth>Container</res-auth>
</resource-ref>
?

? 把MySQL-Connector-java-3.0.12-bin.jar( 或更高版本 ) 加到 Tomcat 安装目录中的 lib 目录下和工程中的 lib 目录下。
通过以上三步,大部分时候还是起作用的,但有时会出现异常,因此不建议使用。
以上几种方案在实践中经受了测试,方法一和二比较稳定,方发三比较不稳定,所以对于方法三的采用须谨慎。为简单起见,本实验中采用了方法一的做法,经过测试数据源配置成功。

?

6.开发数据库访问类

由于本次实验中只涉及到了一张数据库表,所以代码编写起来相对简单。整体DAO 的组织采用了常见的三层结构,在编写过程中参考了 Clinton Begin的经典例子 JPetStore 中有关数据库访问类编写的代码 。?? 开发Jsp 页面

本实验的最终目标是要实现一个注册登录系统,所以jsp 页面大致上分为 5 个,分别为

v? Register.jsp:用户注册页面,显示用户注册表单

v? Login.jsp:登录页面,显示登录信息输入框

v? Login_success.jsp:登录成功页面,显示登录成功信息

v? Register_success.jsp注册成功页面,显示注册成功信息和登录链接

v? Error.jsp:系统错误页面,返回系统的异常信息,主要供开发人员使用

其中jsp 页面采用 JSTL 和 EL 相结合的方式编写,使得代码更加清晰,易于维护。同时,在页面中适当加入了 JavaScript 脚本和 css 样式,使得界面更加美观。

7.开发控制器类

根据对系统总体功能的分析,控制器类分为以下三个:

v? RegisterServlet:负责处理 register.jsp 提交的用户注册请求,对用户注册流程实现总体的控制。当请求到来时,首先对用户注册信息进行验证,如果验证通过则调用 AccountService 类中的方法将注册信息保存到数据库中,添加记录成功后将跳转到 register_success.jsp 提示用户注册成功,并显示登录链接;如果验证没有通过则按照实验要求把错误信息放到 session 共享范围中,供 jsp 页面显示;若在执行程序过程中出现异常,则控制器将跳转到 error.jsp 页面并显示出异常相关信息,供开发人员修改其中的问题。

v? LoginServlet:负责处理 login.jsp 提交的登录申请。首先对用户输入的登录信息进行合法性验证(如信息是否为空或字符串长度是否符合规定等),如果没有通过验证则将跳转回登录页面并显示错误信息;如果验证通过则调用 dao 提供的相关方法在数据库中查找符合要求的用户信息,若成功找到符合要求的用户则转到 login_success.jsp 并显示登录成功等相关信息,同时将此次登录的用户名存放到客户端的 cookie 文件中供用户下次登录使用,若没有查询到符合条件的用户则将跳转回登录界面 login.jsp 并提示用户重新输入登录信息。若在执行程序过程中出现异常,则控制器将跳转到 error.jsp 页面并显示出异常相关信息,供开发人员修改其中的问题。

GenerateCodeServlet:由于 登录页面需要完成验证码功能 ,所以将整个的验证码生成代码封装在了单独的Servlet 中,也可以编写一个工具类将验证码生成代码放到工具类中,以便将来的复用,同时能够对业务层和控制层进行有效的分离,使程序更加清晰。

热点排行