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