MVC设计模式编写的一个login小项目

来源:互联网 发布:深圳黑马程序员就业 编辑:程序博客网 时间:2024/05/17 20:14
    MVC设计模式编写的一个login小项目,其中的编程思想主要有,面向对象、面向接口编程;包分的比较细,比较复杂,使用实现接口编程;主要java代码如下:所用的html和jsp就不一一列出了,html中所用的高级点的技术就是插入背景和背景音乐:<bgsound src="images/style.mp3" loop="-1">;

     以及验证码的切换用到了css:

    <script type="text/javascript">
       function change(img){
          img.src = img.src + "?" + new Date().getTime(); 
       }  
        </script>

<img src="./CheckCode" onclick="change(this)">(看不清,点击验证码)

    还有大家所看到的欢迎字样的来回滚动:

<marquee behavior="alternate" crollamount="10">
   <img src="./images/welcome.gif" width="200" height="100" />
   <img src="./images/welcome.gif" width="200" height="100" />
   &nbsp;&nbsp;&nbsp;&nbsp;
   <img src="./images/welcome.gif" width="200" height="100" />
   &nbsp;&nbsp;&nbsp;&nbsp;
   <img src="./images/welcome.gif" width="200" height="100" />
  </marquee>

    

以下列出几个重要的java类,javabean和dao包下的接口、测试包中的java代码以及server层的简单类就不一一列出来了,这都比较简单,一下servlet包中的增删改查已经和与数据库连接中的类

dao包中的实现类:package com.csdn.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.csdn.bean.User;import com.csdn.util.DBConnection;public class UserDaoImp implements UserDao { // 封装与数据库关联的对象 private PreparedStatement ps; private ResultSet rs; public User login(String username, String password) {  // 1.声明返回值对象  User user = null;  // 2.声明sql语句  String sql = "select id,username,password,logintime from user where username=? and password=?";  // 3.获取连接对象  Connection con = DBConnection.getCon();  // 4:根据预处理的sql语句 获取 PreparedStatement对象  try {   ps = con.prepareStatement(sql);   // 5.为占位符 赋值   int index = 1;   ps.setString(index++, username);   ps.setString(index++, password);   // 6.执行查询   rs = ps.executeQuery();   // 7.遍历结果集   if (rs.next()) {    // 实例化返回值user对象    user = new User();    // 赋值    user.setId(rs.getInt("id"));    user.setLogintime(rs.getTimestamp("logintime"));    user.setUsername(rs.getString("username"));    user.setPassword(rs.getString("password"));   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 8.释放资源   DBConnection.release(rs, ps);  }  return user; // 这里的返回值一定要记得写,建议创建返回值对象user的时候就写上,以免编写完代码了忘了写,测试的时候出现空指针错误 } public boolean insert(User entity) {  // 1.声明返回值对象  boolean flag = false;  // 2.声明sql语句  String sql = "insert into user(username,password,logintime) values(?,?,?)";  // 3.获取连接对象  Connection con = DBConnection.getCon();  // 4.插入数据  Date currentTime = new Date();  //获取出错原因:Timestamp获取的有毫秒数,所以格式化时间的时候要带上毫秒数;格式:"yyyy-MM-dd HH:mm:ss.SSS";//Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]  //java.sql.Timestamp date = java.sql.Timestamp.valueOf(currentTime.toLocaleString());  //new出当前时间的毫秒数  java.sql.Timestamp date = new java.sql.Timestamp(currentTime.getTime());   try {   ps = con.prepareStatement(sql);   ps.setString(1, entity.getUsername());   ps.setString(2, entity.getPassword());   ps.setTimestamp(3, date);   int i = ps.executeUpdate();   if (i > 0) {    flag = true;   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return flag; // 这里的返回值一定要记得写,建议创建返回值对象user的时候就写上,以免编写完代码了忘了写,测试的时候出现空指针错误 } public boolean delete(User entity) {  // 1.声明返回值对象  boolean flag = false;  // 2.声明sql语句  String sql = "delete from user";  // 3.获取连接对象  Connection con = DBConnection.getCon();  // 4.插入数据  try {   ps = con.prepareStatement(sql);   int i = ps.executeUpdate();   if (i > 0) {    flag = true;   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return flag; // 这里的返回值一定要记得写,建议创建返回值对象user的时候就写上,以免编写完代码了忘了写,测试的时候出现空指针错误 } public boolean update(User entity) {  // 1.声明返回值对象  boolean flag = false;  // 2.声明sql语句  String sql = "update user set password=? where id=?";  // 3.获取连接对象  Connection con = DBConnection.getCon();  // 4.插入数据  try {   ps = con.prepareStatement(sql);   ps.setString(1, entity.getPassword());   ps.setInt(2, entity.getId());   int i = ps.executeUpdate();   if (i > 0) {    flag = true;   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return flag; } public List<User> queryAll() {  List<User> list = new ArrayList<User>();  String sql = "select id,username,password,logintime from user";  Connection con = DBConnection.getCon();  try {   ps = con.prepareStatement(sql);   rs = ps.executeQuery();   while (rs.next()) {    // 放到循环里面,否则就覆盖了    User user = new User();    user.setId(rs.getInt("id"));    user.setUsername(rs.getString("username"));    user.setPassword(rs.getString("password"));    user.setLogintime(rs.getDate("logintime"));    list.add(user);   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return list; } public boolean deleteById(Integer id) {  // 1.声明返回值对象  boolean flag = false;  // 2.声明sql语句  String sql = "delete from user where id=?";  // 3.获取连接对象  Connection con = DBConnection.getCon();  // 4.插入数据  try {   ps = con.prepareStatement(sql);   ps.setInt(1, id);   int i = ps.executeUpdate();   if (i > 0) {    flag = true;   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return flag; } public User queryById(Integer id) {  User user = null;  String sql = "select id,username,password,logintime from user where id=?";  Connection con = DBConnection.getCon();  try {   ps = con.prepareStatement(sql);   // 这里要从方法参数中传过来的值   ps.setInt(1, id);   rs = ps.executeQuery();   if (rs.next()) {    user = new User();    user.setId(rs.getInt("id"));    user.setUsername(rs.getString("username"));    user.setPassword(rs.getString("password"));    user.setLogintime(rs.getDate("logintime"));   }  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } finally {   // 5.释放资源   DBConnection.release(rs, ps);  }  return user; }} loginpackage com.csdn.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class LoginServlet extends HttpServlet { // userServlet相关操作 UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  // 解决乱码:因为在index.html界面中提交表单用的是post方法,所以直接以下代码就ok  request.setCharacterEncoding("UTF-8");  response.setContentType("text/html;charset=UTF-8");  // 一定要与对应的html中的<input type="password" name="password" /> 的name名称一致  String name = request.getParameter("username");  String pass = request.getParameter("password");  String checkcode = request.getParameter("checkcode");  String imgcode = (String) request.getSession().getAttribute("imgcode");  if(checkcode != null && imgcode !=null && checkcode.equals(imgcode)){      // 与数据库比较,判断用户是否存在   User entity = userService.login(name, pass);   if (entity == null) {    response.sendRedirect("./error.jsp");   } else {    // 这里用到了请求域    request.setAttribute("user", entity);    request.getRequestDispatcher("./success.jsp").forward(request,      response);   }  }else{   response.getWriter().print("验证码错误!!!");     } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}验证码:package com.csdn.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CheckCode extends HttpServlet { private static final int WIDTH = 130; private static final int HEIGHT = 30; public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  // 1.创建图片  BufferedImage image = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);  // 2.得到图片  Graphics g = image.getGraphics();  // 3 对图片进行绘制  // a.设置图片的背景色  setBackGround(g);  // c.添加干扰线  setRandomLine(g);  // g.向图形中写数据  String checkcode = setRandomNum(g);  request.getSession().setAttribute("imgcode", checkcode);  // 4.把图片写给浏览器  response.setContentType("image/jpeg");  // 告诉浏览器不要缓存  response.setHeader("Pragma", "no-cache");  response.setHeader("Cache-Control", "no-cache");  response.setIntHeader("Expires", -1);  ImageIO.write(image, "JPEG", response.getOutputStream()); } private String setRandomNum(Graphics g) {  g.setFont(new Font("宋体", Font.BOLD, 25));  Random random = new Random();  StringBuffer sb = new StringBuffer();  int x = 10;  for (int i = 0; i < 4; i++) {   // 产生随机数   String str = String.valueOf(random.nextInt(10));   sb.append(str);   g.setColor(new Color(random.nextInt(255), random.nextInt(255),     random.nextInt(255)));   int degree = random.nextInt() % 30;   ((Graphics2D) g).rotate(degree * Math.PI / 180, x, 20);   g.drawString(str, x, 20);   ((Graphics2D) g).rotate(-degree * Math.PI / 180, x, 20);   x += 30;  }  return sb.toString(); } private void setRandomLine(Graphics g) {  g.setColor(Color.green);  Random random = new Random();  for (int i = 0; i < 5; i++) {   int x1 = random.nextInt(WIDTH);   int y1 = random.nextInt(HEIGHT);   int x2 = random.nextInt(WIDTH);   int y2 = random.nextInt(HEIGHT);   g.drawLine(x1, y1, x2, y2);  } } private void setBackGround(Graphics g) {  g.setColor(Color.WHITE);  g.fillRect(0, 0, WIDTH, HEIGHT); } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class DeleteIdServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  response.setContentType("text/html;charset=UTF-8");  Integer id = Integer.valueOf(request.getParameter("id"));  boolean flag = userService.deleteById(id);  if (flag) {   JOptionPane.showMessageDialog(null, "删除成功");  } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class DeleteServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  delete(request, response); } public void delete(HttpServletRequest request, HttpServletResponse response)   throws UnsupportedEncodingException, IOException, ServletException {  response.setContentType("text/html;charset=UTF-8");  User entity = new User();  boolean flag = userService.delete(entity);  if (flag) {   JOptionPane.showMessageDialog(null, "删除成功");  } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.awt.Component;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class InsertServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  insert(request, response); } public void insert(HttpServletRequest request, HttpServletResponse response)   throws UnsupportedEncodingException, IOException, ServletException {  response.setContentType("text/html;charset=UTF-8");  // 一定要与对应的html中的<input type="password" name="password" /> 的name名称一致  String name = request.getParameter("username").trim();  String pass = request.getParameter("password").trim();  // 与数据库比较,判断用户是否存在  User entity = new User(name, pass, null);  //判断密码这句要先判断再执行,否则就不起作用了  if (!name.equals("") && !pass.equals("")) {   boolean flag = userService.insert(entity);   if (flag == true) {    JOptionPane.showMessageDialog(null, "插入成功!请继续操作");   }  } else {   JOptionPane.showMessageDialog(null, "用户名或密码不能为空!!");    } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class QueryIdServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  response.setContentType("text/html;charset=UTF-8");  PrintWriter pw = response.getWriter();  Integer id = Integer.valueOf(request.getParameter("id"));  User user = userService.queryById(id);  response.getWriter().write("<h1>查询内容是:</h1>");  pw.write("id:" + user.getId() + "<br>");  pw.write("用户名:" + user.getUsername() + "<br>");  pw.write("密码:" + user.getPassword() + "<br>");  pw.write("登录时间:" + user.getLogintime()); } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class QueryServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  response.setContentType("text/html;charset=UTF-8");  PrintWriter pw = response.getWriter();  // 与数据库比较,判断用户是否存在  List<User> list = userService.queryAll();  pw.write("<h1>查询内容是:</h1>");  for (User user : list) {   pw.write("id:" + user.getId() + "<br>");   pw.write("用户名:" + user.getUsername() + "<br>");   pw.write("密码:" + user.getPassword() + "<br>");   pw.write("登录时间:" + user.getLogintime() + "<br>");   response.getWriter().write("<h3>下一个用户是:</h3>");  } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}package com.csdn.servlet;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JOptionPane;import com.csdn.bean.User;import com.csdn.service.UserService;import com.csdn.service.UserServiceImp;public class UpdateServlet extends HttpServlet { UserService userService = new UserServiceImp(); public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  update(request, response); } public void update(HttpServletRequest request, HttpServletResponse response)   throws UnsupportedEncodingException, IOException, ServletException {  response.setContentType("text/html;charset=UTF-8");  Integer id = Integer.valueOf(request.getParameter("id"));  String oldPass = request.getParameter("oldPass");  String newPass = request.getParameter("newPass");  User entity = new User(id, null, newPass, null);  boolean flag = userService.update(entity);  if (flag) {   JOptionPane.showMessageDialog(null, "修改成功");  } } public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {  doGet(request, response); }}工具类:package com.csdn.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DBConnection { /*  * 数据库连接对象,数据库的连接都是仿照单例类模式写的 获取数据库连接对象  */ private static Connection con; public static Connection getCon() {  if (con == null) {   try {    // 加载数据库驱动    Class.forName("com.mysql.jdbc.Driver");    // 写url的时候一定要看清,写对了,不能马虎,否则测试的时候会报错    String url = "jdbc:mysql://localhost:3306/login?user=root&password=root&useUnicode=true&characterEncoding=UTF-8";    con = DriverManager.getConnection(url);   } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (ClassNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }  return con; } // 释放资源的方法 public static void release(ResultSet rs, PreparedStatement ps) {  if (rs != null) {   try {    rs.close();   } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }  if (ps != null) {   try {    ps.close();   } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  } }}  


原创粉丝点击