基于MVC思想的JSP+Servlet+JavaBean的登录模块

来源:互联网 发布:软件开发测试题 编辑:程序博客网 时间:2024/04/28 23:53

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">用户实体对象</span>

  User类用于封装用户实体对象,提供了用户对象的详细信息以及相应的setXXX()getXXX()方法:

<span style="font-family:Times New Roman;">package model;public class User {private int id;// 标识private String username;// 用户名private String password;// 密码private String sex;// 性别private String tel;// 电话private String photo;// 头像private String email;// 电子邮箱public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getPhoto() {return photo;}public void setPhoto(String photo) {this.photo = photo;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}</span><span style="font-family:宋体;"></span>


数据库连接工具类

  对数据库的操作封装成一个类,在类中提供相应的方法。获取数据库连接对象和关闭数据库连接的方法:

<span style="font-family:Times New Roman;">package model;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DataBaseUtil {public static Connection getConnection(){   Connection conn=null;   try{   Class.forName("com.mysql.jdbc.Driver");   String url="jdbc:mysql://localhost:3306/registersystem";   conn=DriverManager.getConnection(url,"root","123");   }catch(Exception e){   e.printStackTrace();   System.out.println("数据库连接失败!");   }   return conn;}public static void closeConnection(Connection conn){if(null!=conn){try {conn.close();} catch (SQLException e) {// TODO: handle exceptione.printStackTrace();System.out.println("数据库关闭失败!");}}}}</span>


用户数据库操作

  与用户相关的数据库操作方法封装成一个类中,此类提供一系列需要的方法。例如:添加对象和验证对象。方法如下:

<span style="font-family:Times New Roman;">package model;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class UserDao {public boolean userIsExist(String username){Connection conn=DataBaseUtil.getConnection();String sql="SELECT * FROM login_user where username=?";try {PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1, username);ResultSet rs=ps.executeQuery();if(!rs.next()){return true;}rs.close();//释放ResultSet对象数据资源ps.close();//释放PreparedStatement对象资源} catch (SQLException e) {e.printStackTrace();}finally{DataBaseUtil.closeConnection(conn);}return false;}public void saveUser(User user){Connection conn=DataBaseUtil.getConnection();String sql="INSERT INTO login_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";try {PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1, user.getUsername());ps.setString(2,user.getPassword());ps.setString(3,user.getSex());ps.setString(4,user.getTel());ps.setString(5,user.getPhoto());ps.setString(6,user.getEmail());ps.executeUpdate();ps.close();//释放PreparedStatement对象资源} catch (SQLException e) {// TODO: handle exceptione.printStackTrace();System.out.println("数据库写入数据失败!");}finally{DataBaseUtil.closeConnection(conn);///关闭数据库连接,释放连接资源}}public User login(String username,String password){User user=null;Connection conn=DataBaseUtil.getConnection();String sql="SELECT * FROM login_user WHERE username=? AND password=?";try {PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1, username);ps.setString(2,password);ResultSet rs=ps.executeQuery();if(rs.next()){user=new User();user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setSex(rs.getString("sex"));user.setTel(rs.getString("tel"));user.setPhoto(rs.getString("photo"));user.setEmail(rs.getString("email"));}rs.close();//释放ResultSet对象数据资源ps.close();//释放PreparedStatement对象资源} catch (SQLException e) {// TODO: handle exceptione.printStackTrace();System.out.println("用户登录验证错误!");}finally{DataBaseUtil.closeConnection(conn);}return user;}}</span>


创建Servlet对象:

  RegServlet类用于实现用户注册,创建reg.jsp视图用于显示。LoginServlet类实现用户登录,处理登录请求。UserExitServlet类进行处理,用于用户退出。

<span style="font-family:Times New Roman;">package controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import model.User;import model.UserDao;public class RegServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{String username=request.getParameter("username");String password=request.getParameter("password");String sex=request.getParameter("sex");String photo=request.getParameter("photo");String tel=request.getParameter("tel");String email=request.getParameter("email");System.out.println("--"+username+"-"+password+"-"+sex+"-"+photo+"-"+email);UserDao userDao=new UserDao();if(null!=username && !username.isEmpty()){if(userDao.userIsExist(username)){User user=new User();user.setUsername(username);user.setPassword(password);user.setEmail(email);user.setTel(tel);user.setSex(sex);user.setPhoto(photo);userDao.saveUser(user);request.setAttribute("info", "恭喜,注册成功!<br/>");}else{request.setAttribute("info", "错误:此用户已经存在!<br/>");}}///ifrequest.getRequestDispatcher("message.jsp").forward(request, response);}}</span>
<span style="font-family:Times New Roman;">package controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import model.User;import model.UserDao;public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 2L;public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{String username=request.getParameter("username");String password=request.getParameter("password");UserDao userDao=new UserDao();User user=userDao.login(username, password);if(null!=user){///将用户对象放入Session中request.getSession().setAttribute("user", user);request.getRequestDispatcher("message.jsp").forward(request, response);}else{request.setAttribute("info", "错误:用户名或密码错误!");request.getRequestDispatcher("message.jsp").forward(request, response);}}}</span>

<span style="font-family:Times New Roman;">package controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import model.User;public class UserExitServlet extends HttpServlet {private static final long serialVersionUID = 4L;///The specified HTTP method is not allowed for Get当写成doPost时候,不能正常获取//资源,未重写父类方法以至于报错,方法需要对应。备忘!public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{HttpSession session=request.getSession();User user=(User)session.getAttribute("user");if(null!=user){session.removeAttribute("user");request.setAttribute("info", user.getUsername()+"已成功退出!");}System.out.println("--LOVE--");///转发到时message.jsp页面request.getRequestDispatcher("message.jsp").forward(request, response);}}</span>



Servlet配置文件如下:

<span style="font-family:Times New Roman;"><servlet>  <servlet-name>RegServlet</servlet-name>  <servlet-class>controller.RegServlet</servlet-class> </servlet> <servlet>  <servlet-name>LoginServlet</servlet-name>  <servlet-class>controller.LoginServlet</servlet-class> </servlet> <servlet>  <servlet-name>ExitServlet</servlet-name>  <servlet-class>controller.UserExitServlet</servlet-class> </servlet> <servlet-mapping>  <servlet-name>RegServlet</servlet-name>  <url-pattern>/RegServlet</url-pattern> </servlet-mapping> <servlet-mapping>  <servlet-name>LoginServlet</servlet-name>  <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <servlet-mapping>  <servlet-name>ExitServlet</servlet-name>  <url-pattern>/ExitServlet</url-pattern> </servlet-mapping></span>


创建数据表语句如下:

<span style="font-family:Times New Roman;">CREATE TABLE login_user(       id int PRIMARY KEY AUTO_INCREMENT,username char(25),password char(25),sex char(25),tel char(25),photo char(25),email char(25))</span>
完整源程序下载地址: 源程序  密码:t69d

0 0
原创粉丝点击