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" />
<img src="./images/welcome.gif" width="200" height="100" />
<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(); } } }}
- MVC设计模式编写的一个login小项目
- MVC模式小项目
- MVC设计模式小试验
- MVC设计模式---小笔记
- 设计模式的一个小案例
- 基于servlet的MVC模式------MVC模式设计四则运算小web应用
- 结合一个简单的项目分析MVC设计流程
- 纠正一个错误的观点-MVC不是设计模式
- java编写一个延迟加载的单例设计模式
- Spring MVC (6) spring MVC 写一个增删改查的小项目
- 如何设计一个Login Activity
- MVC设计模式的思考
- MVC模式的设计思想
- MVC设计模式的实现
- MVC设计模式的学习
- JSP的设计模式mvc
- MVC模式的设计思想
- MVC模式的设计思想
- 导入工程后运行时出错
- MediaScannerReceiver
- 用MPI+CUDA实现矩阵加法
- sqlninja 说明
- InputStream数据获取
- MVC设计模式编写的一个login小项目
- jstl标签 学习中...
- new/delete 和malloc/free 的区别
- VS2012安装后 VS2010出现fatal error LNK1123: failure during conversion to COFF
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- (笔记) 继承的三种方式及作用
- ORACLE触发器
- Cisco中DHCP的配置及实验记录
- Vtune 使用一 (初探)