1、User类具体代码如下:复制代码 1 package me.gacl.domain; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 /* 6 * author gacl 7 * 用户实体类 8 */ 9 public class User implements Serializable 10 11 private static final long serialVersionUID = -4313782718477229465L;12 13 / 用户ID14 private String id;15 / 用户名16 pr
2、ivate String userName;17 / 用户密码18 private String userPwd;19 / 用户邮箱20 private String email;21 / 用户生日22 private Date birthday;23 24 public String getId() 25 return id;26 27 28 public void setId(String id) 29 this.id = id;30 31 32 public String getUserName() 33 return userName;34 35 36 public void setU
3、serName(String userName) 37 this.userName = userName;38 39 40 public String getUserPwd() 41 return userPwd;42 43 44 public void setUserPwd(String userPwd) 45 this.userPwd = userPwd;46 47 48 public String getEmail() 49 return email;50 51 52 public void setEmail(String email) 53 this.email = email;54
4、55 56 public Date getBirthday() 57 return birthday;58 59 60 public void setBirthday(Date birthday) 61 this.birthday = birthday;62 63 3.2、开发数据访问层(dao、dao.impl)在me.gacl.dao包下创建一个IUserDao接口类,对于开发接口类,我习惯以字母I作类的前缀,这样一眼就看出当前这个类是一个接口,这也算是一种良好的开发习惯吧,通过看类名就可以方便区分出是接口还是具体的实现类。IUserDao接口的具体代码如下: 1 package me.g
5、acl.dao; 3 import me.gacl.domain.User; 4 5 public interface IUserDao 6 7 /* 8 * 根据用户名和密码来查找用户 9 * param userName10 * param userPwd11 * return 查到到的用户12 */13 User find(String userName, String userPwd);14 15 /*16 * 添加用户17 * param user18 */19 void add(User user);20 21 /*根据用户名来查找用户22 * param userName23 *
6、 return 查到到的用户24 */25 User find(String userName); 对于接口中的方法定义,这个只能是根据具体的业务来分析需要定义哪些方法了,但是无论是多么复杂的业务,都离不开基本的CRUD(增删改查)操作,Dao层是直接和数据库交互的,所以Dao层的接口一般都会有增删改查这四种操作的相关方法。在me.gacl.dao.impl包下创建一个UserDaoImpl类UserDaoImpl类是IUserDao接口的具体实现类,对于接口的实现类命名方式,我习惯以接口名(去除前缀I)+impl形式或者接口名+impl形式来命名:IUserDao(接口)UserDaoImp
7、l(实现类)或者IUserDao(接口)IUserDaoImpl(实现类),这也算是一些个人的编程习惯吧,平时看到的代码大多数都是以这两种形式中的一种来来命名接口的具体实现类的,反正就是要能够一眼看出接口对应的实现类是哪一个就可以了。UserDaoImpl类的具体代码如下: 1 package me.gacl.dao.impl; 3 import java.text.SimpleDateFormat; 4 import org.dom4j.Document; 5 import org.dom4j.Element; 6 import me.gacl.dao.IUserDao; 7 import
8、me.gacl.domain.User; 8 import me.gacl.util.XmlUtils; 9 10 /*11 * IUserDao接口的实现类12 * author gacl13 */14 public class UserDaoImpl implements IUserDao 15 16 Override17 public User find(String userName, String userPwd) 18 try19 Document document = XmlUtils.getDocument();20 /使用XPath表达式来操作XML节点21 Element
9、e = (Element) document.selectSingleNode(/useruserName=+userName+ and userPwd=+userPwd+);22 if(e=null)23 return null;24 25 User user = new User();26 user.setId(e.attributeValue(id);27 user.setEmail(e.attributeValue(email28 user.setUserPwd(e.attributeValue(userPwd29 user.setUserName(e.attributeValue(u
10、serName30 String birth = e.attributeValue(birthday31 SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd32 user.setBirthday(sdf.parse(birth);33 34 return user;36 catch (Exception e) 37 throw new RuntimeException(e);39 40 41 SuppressWarnings(deprecation)42 Override43 public void add(User user) 44
11、try45 Document document = XmlUtils.getDocument();46 Element root = document.getRootElement();47 Element user_node = root.addElement(user /创建user结点,并挂到root48 user_node.setAttributeValue(, user.getId();49 user_node.setAttributeValue(, user.getUserName();50 user_node.setAttributeValue(, user.getUserPwd
12、();51 user_node.setAttributeValue(, user.getEmail();52 53 SimpleDateFormat sdf=new SimpleDateFormat(54 user_node.setAttributeValue(, sdf.format(user.getBirthday();56 XmlUtils.write2Xml(document);57 58 catch (Exception e) 59 throw new RuntimeException(e);60 61 62 63 Override64 public User find(String
13、 userName) 65 try66 Document document = XmlUtils.getDocument();67 Element e = (Element) document.selectSingleNode(68 if(e=null)69 return null;70 71 User user = new User();72 user.setId(e.attributeValue(73 user.setEmail(e.attributeValue(74 user.setUserPwd(e.attributeValue(75 user.setUserName(e.attrib
14、uteValue(76 String birth = e.attributeValue(77 SimpleDateFormat sdf = new SimpleDateFormat(78 user.setBirthday(sdf.parse(birth);79 80 return user;81 82 catch (Exception e) 83 throw new RuntimeException(e);84 85 86 87 3.3、开发service层(service层对web层提供所有的业务服务) 在me.gacl.service包中创建IUserService接口类IUserServ
15、ice接口的具体代码如下: 1 package me.gacl.service; 4 import me.gacl.exception.UserExistException; 5 6 public interface IUserService 7 8 /* 9 * 提供注册服务10 * param user11 * throws UserExistException13 void registerUser(User user) throws UserExistException;16 * 提供登录服务17 * param userName18 * param userPwd19 * retur
16、n20 */21 User loginUser(String userName, String userPwd);22 在me.gacl.service.impl包中创建UserServiceImpl类UserServiceImpl类为IUserService接口的具体实现类,具体代码如下: 1 package me.gacl.service.impl; 3 import me.gacl.dao.IUserDao; 4 import me.gacl.dao.impl.UserDaoImpl; 5 import me.gacl.domain.User; 6 import me.gacl.exce
17、ption.UserExistException; 7 import me.gacl.service.IUserService; 8 9 public class UserServiceImpl implements IUserService 11 private IUserDao userDao = new UserDaoImpl();13 Override14 public void registerUser(User user) throws UserExistException 15 if (userDao.find(user.getUserName()!=null) 16 /chec
18、ked exception 17 /unchecked exception18 /这里抛编译时异常的原因:是我想上一层程序处理这个异常,以给用户一个友好提示19 throw new UserExistException(注册的用户名已存在!20 21 userDao.add(user);24 Override25 public User loginUser(String userName, String userPwd) 26 return userDao.find(userName, userPwd);27 28 29 3.4、开发web层3.4.1、 开发注册功能 1、在me.gacl.w
19、eb.UI包下写一个RegisterUIServlet为用户提供注册界面RegisterUIServlet收到用户请求后,就跳到register.jspRegisterUIServlet的代码如下: 1 package me.gacl.web.UI; 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax
20、.servlet.http.HttpServletResponse; 9 * author gacl10 * 为用户提供注册的用户界面的Servlet11 * RegisterUIServlet负责为用户输出注册界面12 * 当用户访问RegisterUIServlet时,就跳转到WEB-INF/pages目录下的register.jsp页面14 public class RegisterUIServlet extends HttpServlet 16 public void doGet(HttpServletRequest request, HttpServletResponse respo
21、nse)17 throws ServletException, IOException 18 request.getRequestDispatcher(/WEB-INF/pages/register.jsp).forward(request, response);19 21 public void doPost(HttpServletRequest request, HttpServletResponse response)22 throws ServletException, IOException 23 doGet(request, response);25 2、在/WEB-INF/pag
22、es/目录下编写用户注册的jsp页面register.jsp凡是位于WEB-INF目录下的jsp页面是无法直接通过URL地址直接访问的,在开发中如果项目中有一些敏感web资源不想被外界直接访问,那么可以考虑将这些敏感的web资源放到WEB-INF目录下,这样就可以禁止外界直接通过URL来访问了。register.jsp页面的代码如下: 1 2 3 4 5 用户注册 6 8 9 form action=$pageContext.request.contextPath/servlet/RegisterServlet method=post10 table width=60% border=111 12 用户名13 15 input type=text name=16 17 1
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2