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

    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" οnclick="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;
 }
}


 

login

package 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();
   }
  }

 }
}


 


 


转载于:https://www.cnblogs.com/yangkai-cn/archive/2012/11/05/4017387.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值