基于Servlet+JSP+JavaBean开发模式的用户登录注册Word文件下载.docx
《基于Servlet+JSP+JavaBean开发模式的用户登录注册Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Servlet+JSP+JavaBean开发模式的用户登录注册Word文件下载.docx(33页珍藏版)》请在冰点文库上搜索。
![基于Servlet+JSP+JavaBean开发模式的用户登录注册Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/3019ac57-e18f-42bc-94f3-c13b06073759/3019ac57-e18f-42bc-94f3-c13b060737591.gif)
User类具体代码如下:
复制代码
1packageme.gacl.domain;
2
3importjava.io.Serializable;
4importjava.util.Date;
5/**
6*@authorgacl
7*用户实体类
8*/
9publicclassUserimplementsSerializable{
10
11privatestaticfinallongserialVersionUID=-4313782718477229465L;
12
13//用户ID
14privateStringid;
15//用户名
16privateStringuserName;
17//用户密码
18privateStringuserPwd;
19//用户邮箱
20privateStringemail;
21//用户生日
22privateDatebirthday;
23
24publicStringgetId(){
25returnid;
26}
27
28publicvoidsetId(Stringid){
29this.id=id;
30}
31
32publicStringgetUserName(){
33returnuserName;
34}
35
36publicvoidsetUserName(StringuserName){
37this.userName=userName;
38}
39
40publicStringgetUserPwd(){
41returnuserPwd;
42}
43
44publicvoidsetUserPwd(StringuserPwd){
45this.userPwd=userPwd;
46}
47
48publicStringgetEmail(){
49returnemail;
50}
51
52publicvoidsetEmail(Stringemail){
53this.email=email;
54}
55
56publicDategetBirthday(){
57returnbirthday;
58}
59
60publicvoidsetBirthday(Datebirthday){
61this.birthday=birthday;
62}
63}
3.2、开发数据访问层(dao、dao.impl)
在me.gacl.dao包下创建一个IUserDao接口类,对于开发接口类,我习惯以字母I作类的前缀,这样一眼就看出当前这个类是一个接口,这也算是一种良好的开发习惯吧,通过看类名就可以方便区分出是接口还是具体的实现类。
IUserDao接口的具体代码如下:
1packageme.gacl.dao;
3importme.gacl.domain.User;
4
5publicinterfaceIUserDao{
6
7/**
8*根据用户名和密码来查找用户
9*@paramuserName
10*@paramuserPwd
11*@return查到到的用户
12*/
13Userfind(StringuserName,StringuserPwd);
14
15/**
16*添加用户
17*@paramuser
18*/
19voidadd(Useruser);
20
21/**根据用户名来查找用户
22*@paramuserName
23*@return查到到的用户
24*/
25Userfind(StringuserName);
对于接口中的方法定义,这个只能是根据具体的业务来分析需要定义哪些方法了,但是无论是多么复杂的业务,都离不开基本的CRUD(增删改查)操作,Dao层是直接和数据库交互的,所以Dao层的接口一般都会有增删改查这四种操作的相关方法。
在me.gacl.dao.impl包下创建一个UserDaoImpl类
UserDaoImpl类是IUserDao接口的具体实现类,对于接口的实现类命名方式,我习惯以"
接口名(去除前缀I)+impl"
形式或者"
接口名+impl"
形式来命名:
IUserDao(接口)→UserDaoImpl(实现类)或者IUserDao(接口)→IUserDaoImpl(实现类),这也算是一些个人的编程习惯吧,平时看到的代码大多数都是以这两种形式中的一种来来命名接口的具体实现类的,反正就是要能够一眼看出接口对应的实现类是哪一个就可以了。
UserDaoImpl类的具体代码如下:
1packageme.gacl.dao.impl;
3importjava.text.SimpleDateFormat;
4importorg.dom4j.Document;
5importorg.dom4j.Element;
6importme.gacl.dao.IUserDao;
7importme.gacl.domain.User;
8importme.gacl.util.XmlUtils;
9
10/**
11*IUserDao接口的实现类
12*@authorgacl
13*/
14publicclassUserDaoImplimplementsIUserDao{
15
16@Override
17publicUserfind(StringuserName,StringuserPwd){
18try{
19Documentdocument=XmlUtils.getDocument();
20//使用XPath表达式来操作XML节点
21Elemente=(Element)document.selectSingleNode("
//user[@userName='
"
+userName+"
'
and@userPwd='
+userPwd+"
]"
);
22if(e==null){
23returnnull;
24}
25Useruser=newUser();
26user.setId(e.attributeValue("
id"
));
27user.setEmail(e.attributeValue("
email"
28user.setUserPwd(e.attributeValue("
userPwd"
29user.setUserName(e.attributeValue("
userName"
30Stringbirth=e.attributeValue("
birthday"
31SimpleDateFormatsdf=newSimpleDateFormat("
yyyy-MM-dd"
32user.setBirthday(sdf.parse(birth));
33
34returnuser;
36}catch(Exceptione){
37thrownewRuntimeException(e);
39}
40
41@SuppressWarnings("
deprecation"
)
42@Override
43publicvoidadd(Useruser){
44try{
45Documentdocument=XmlUtils.getDocument();
46Elementroot=document.getRootElement();
47Elementuser_node=root.addElement("
user"
//创建user结点,并挂到root
48user_node.setAttributeValue("
user.getId());
49user_node.setAttributeValue("
user.getUserName());
50user_node.setAttributeValue("
user.getUserPwd());
51user_node.setAttributeValue("
user.getEmail());
52
53SimpleDateFormatsdf=newSimpleDateFormat("
54user_node.setAttributeValue("
sdf.format(user.getBirthday()));
56XmlUtils.write2Xml(document);
57
58}catch(Exceptione){
59thrownewRuntimeException(e);
60}
61}
62
63@Override
64publicUserfind(StringuserName){
65try{
66Documentdocument=XmlUtils.getDocument();
67Elemente=(Element)document.selectSingleNode("
68if(e==null){
69returnnull;
70}
71Useruser=newUser();
72user.setId(e.attributeValue("
73user.setEmail(e.attributeValue("
74user.setUserPwd(e.attributeValue("
75user.setUserName(e.attributeValue("
76Stringbirth=e.attributeValue("
77SimpleDateFormatsdf=newSimpleDateFormat("
78user.setBirthday(sdf.parse(birth));
79
80returnuser;
81
82}catch(Exceptione){
83thrownewRuntimeException(e);
84}
85}
86
87}
3.3、开发service层(service层对web层提供所有的业务服务)
在me.gacl.service包中创建IUserService接口类
IUserService接口的具体代码如下:
1packageme.gacl.service;
4importme.gacl.exception.UserExistException;
5
6publicinterfaceIUserService{
7
8/**
9*提供注册服务
10*@paramuser
11*@throwsUserExistException
13voidregisterUser(Useruser)throwsUserExistException;
16*提供登录服务
17*@paramuserName
18*@paramuserPwd
19*@return
20*/
21UserloginUser(StringuserName,StringuserPwd);
22}
在me.gacl.service.impl包中创建UserServiceImpl类
UserServiceImpl类为IUserService接口的具体实现类,具体代码如下:
1packageme.gacl.service.impl;
3importme.gacl.dao.IUserDao;
4importme.gacl.dao.impl.UserDaoImpl;
5importme.gacl.domain.User;
6importme.gacl.exception.UserExistException;
7importme.gacl.service.IUserService;
8
9publicclassUserServiceImplimplementsIUserService{
11privateIUserDaouserDao=newUserDaoImpl();
13@Override
14publicvoidregisterUser(Useruser)throwsUserExistException{
15if(userDao.find(user.getUserName())!
=null){
16//checkedexception
17//uncheckedexception
18//这里抛编译时异常的原因:
是我想上一层程序处理这个异常,以给用户一个友好提示
19thrownewUserExistException("
注册的用户名已存在!
!
20}
21userDao.add(user);
24@Override
25publicUserloginUser(StringuserName,StringuserPwd){
26returnuserDao.find(userName,userPwd);
27}
28
29}
3.4、开发web层
3.4.1、开发注册功能
1、在me.gacl.web.UI包下写一个RegisterUIServlet为用户提供注册界面
RegisterUIServlet收到用户请求后,就跳到register.jsp
RegisterUIServlet的代码如下:
1packageme.gacl.web.UI;
3importjava.io.IOException;
4importjavax.servlet.ServletException;
5importjavax.servlet.http.HttpServlet;
6importjavax.servlet.http.HttpServletRequest;
7importjavax.servlet.http.HttpServletResponse;
9*@authorgacl
10*为用户提供注册的用户界面的Servlet
11*RegisterUIServlet负责为用户输出注册界面
12*当用户访问RegisterUIServlet时,就跳转到WEB-INF/pages目录下的register.jsp页面
14publicclassRegisterUIServletextendsHttpServlet{
16publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
17throwsServletException,IOException{
18request.getRequestDispatcher("
/WEB-INF/pages/register.jsp"
).forward(request,response);
19}
21publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
22throwsServletException,IOException{
23doGet(request,response);
25
2、在/WEB-INF/pages/目录下编写用户注册的jsp页面register.jsp
凡是位于WEB-INF目录下的jsp页面是无法直接通过URL地址直接访问的,
在开发中如果项目中有一些敏感web资源不想被外界直接访问,那么可以考虑将这些敏感的web资源放到WEB-INF目录下,这样就可以禁止外界直接通过URL来访问了。
register.jsp页面的代码如下:
1<
%@pagelanguage="
java"
pageEncoding="
UTF-8"
%>
2<
!
DOCTYPEHTML>
3<
html>
4<
head>
5<
title>
用户注册<
/title>
6<
/head>
8<
bodystyle="
text-align:
center;
>
9<
formaction="
${pageContext.request.contextPath}/servlet/RegisterServlet"
method="
post"
10<
tablewidth="
60%"
border="
1"
11<
tr>
12<
td>
用户名<
/td>
13<
15<
inputtype="
text"
name="
16<
17<
/tr>
1