具有注册、登陆以及后台管理功能的web开发
设计一个带有注册、登陆、后台用户管理的网站
使用(Html+Css+JavaScript+Jsp+Servlet+JDBC+JSTL+EL)
工具:Eclipse(NetBeans)、Mysql8.0.12、Tomcat9.0、Navicat
设计思路如下:
用户方面:
管理员方面:
一、设计数据库
在名为joker的数据库中创建一个user1表,内容如下:
二、编写User类
User类用于封装用户信息
三、编写JdbcUtils类
JdbcUtils用于连接数据库:
public class JdbcUtils {
//注册驱动的工具类
private static String url = "jdbc:mysql://localhost:3306/joker?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true";
private static String user = "root";
private static String password = "joker666";
private static String dv = "com.mysql.cj.jdbc.Driver";
//注册驱动
static {
try {
Class.forName(dv);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取连接对象
public static Connection getCon() throws SQLException{
Connection conn = null;
conn = (Connection) DriverManager.getConnection(url, user, password);
return conn;
}
//关闭的方法
public static void close(Statement statement,Connection conn){
if(statement !=null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//关闭的方法
public static void close(PreparedStatement preparedStatement,Connection conn,ResultSet resultSet){
if(preparedStatement !=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
四、编写UserDAO类
UserDAO类用于数据库的插入、查询以及删除(修改没时间写)
public class UserDAO {
//数据库连接对象
public User login(String username,String password) {
User u=null;
Connection connection =null;
PreparedStatement pstmt=null;
ResultSet resultSet=null;
//赋值
try {
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1 where name=? and password=?";
pstmt = (PreparedStatement) connection.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
resultSet = pstmt.executeQuery();
if(resultSet.next()){
u=new User();
u.setUsername(resultSet.getString("name"));
u.setPassword(resultSet.getString("password"));
u.setPnumber(resultSet.getString("phonenumber"));
u.setSex(resultSet.getString("sex"));
u.setEmail(resultSet.getString("email"));
u.setHobby(resultSet.getString("hobby"));
u.setAddr1(resultSet.getString("addr1"));
u.setAddr2(resultSet.getString("addr2"));
u.setIntroduce(resultSet.getString("introduce"));
System.out.println("登录成功!");
}else{
System.out.println("用户名或者密码错误!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtils.close(pstmt, connection);
}
return u;
}
/**
* 添加用户
* @param user
*/
public void addUser(User user) {
Connection connection = null;
PreparedStatement psmt = null;
try {
connection = JdbcUtils.getCon();
String sql ="insert into user1(name,password,phonenumber,sex,email,hobby,addr1,addr2,introduce)values(?,?,?,?,?,?,?,?,?);";
psmt = (PreparedStatement) connection.prepareStatement(sql);
//运用实体对象进行参数赋值
psmt.setString(1, user.getUsername());
psmt.setString(2,user.getPassword());
psmt.setString(3,user.getPnumber());
psmt.setString(4,user.getSex());
psmt.setString(5,user.getEmail());
psmt.setString(6,user.getHobby());
psmt.setString(7,user.getAddr1());
psmt.setString(8,user.getAddr2());
psmt.setString(9,user.getIntroduce());
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(psmt, connection);
}
}
/**
* 删除用户
* @param name
* @return
* @throws UnsupportedEncodingException
*/
public void delUser(String id) throws UnsupportedEncodingException {
Connection connection = null;
PreparedStatement psmt = null;
int i_d;
i_d = Integer.parseInt(id);
try {
connection = JdbcUtils.getCon();
String sql = "delete from user1 where id=?";
psmt = (PreparedStatement) connection.prepareStatement(sql);
psmt.setInt(1, i_d);
psmt.executeUpdate();
System.out.println("删除成功!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(psmt, connection);
}
}
/**
* 查询用户
* @return
*/
public ResultSet seleUser() {
Connection connection =null;
PreparedStatement ps=null;
ResultSet resultSet=null;
//赋值
try {
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1";
ps = (PreparedStatement) connection.prepareStatement(sql);
resultSet = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
}
五、RegisterServlet类
用户点击注册按钮会跳转到此类,在此类将信息进行处理:
/**
* Servlet implementation class RegisterServlet
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获得请求的各项信息
String name=request.getParameter("realname");
String password=request.getParameter("password");
String phonenumber=request.getParameter("phonenumber");
String sex=request.getParameter("sex");
String email=request.getParameter("email");
String[] hobby=request.getParameterValues("hobby");
String hobby1 = "";
int i;
String addr1=request.getParameter("addr1");
String addr2=request.getParameter("addr2");
String introduce=request.getParameter("introduce");
//进行“转码”翻译
for(i=0;i<hobby.length;i++) {
if(hobby[i] != null) {
hobby1 += hobby[i];
}
}
if(addr1.equals("1")) {
addr1 = "河北省";
if(addr2.equals("10")) {
addr2 = "承德市";
}
if(addr2.equals("11")) {
addr2 = "廊坊市";
}
if(addr2.equals("12")) {
addr2 = "唐山市";
}
}
if(addr1.equals("2")) {
addr1 = "河南省";
if(addr2.equals("20")) {
addr2 = "郑州市";
}
if(addr2.equals("21")) {
addr2 = "开封市";
}
if(addr2.equals("22")) {
addr2 = "洛阳市";
}
}
if(addr1.equals("3")) {
addr1 = "山东省";
if(addr2.equals("30")) {
addr2 = "烟台市";
}
if(addr2.equals("31")) {
addr2 = "德州市";
}
if(addr2.equals("32")) {
addr2 = "临沂市";
}
}
//将信息封装至User类中
User user=new User();
user.setUsername(name);
user.setPassword(password);
user.setPnumber(phonenumber);
user.setSex(sex);
user.setEmail(email);
user.setHobby(hobby1);
user.setAddr1(addr1);
user.setAddr2(addr2);
user.setIntroduce(introduce);
//进行数据库的插入
UserDAO userDAO=new UserDAO();
userDAO.addUser(user);
System.out.println("注册成功");
request.getRequestDispatcher("./index.jsp").forward(request, response);
}
}
六、LoginServlet类
用户注册成功后会跳转到登录界面,当用户点击登录按钮会跳转到此类,在此类将请求的信息进行处理:
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
//获得请求信息
String username = request.getParameter("username");
String password = request.getParameter("password");
//判断用户是否存在
UserDAO userDAO=new UserDAO();
User user=userDAO.login(username, password);
if(user!=null){
session.setMaxInactiveInterval(1800);
session.setAttribute("user", user);
//将对象放入session中
response.sendRedirect("./success1.jsp");
}else{
response.sendRedirect("./fail.jsp");
}
}
}
七、ManaloginServelet类
当管理员在登陆的时候会跳转到此类,此类将信息进行处理:
/**
* Servlet implementation class ManaloginServelet
*/
@WebServlet("/ManaloginServelet")
public class ManaloginServelet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
//获得请求的管理员的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//默认内置账号为admin,密码为123456
if(username.equals("admin") && password.equals("123456")) {
UserDAO userDAO=new UserDAO();
ResultSet resultSet = userDAO.seleUser();
//显示第一页的用户信息
request.setAttribute("page", 1);
session.setMaxInactiveInterval(1800);
//将查询到的用户信息放入session中
session.setAttribute("rs", resultSet);
response.sendRedirect("./adminServlet");
System.out.println("管理员登陆成功");
} else {
response.sendRedirect("./Manafail.jsp");
}
}
}
八、adminServlet类
当管理员登陆成功,会从ManaloginServelet跳转至此类,在此将用户信息分页显示,默认一页显示10人
/**
* Servlet implementation class adminServlet
*/
@WebServlet("/adminServlet")
public class adminServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
listPage listPage=new listPage();
List<User> list = new ArrayList<User>();
int rowCount; //记录总个数
int pageCount; //记录总页数
int beginIndex = 1; //开始的个数
int i = 0; //用作循环
int pageSize = 10; //一页大小
int prePage; //前一页
int nextPage; //后一页
int curPage = 1; //当前页
String strcurPage ;
HttpSession session = request.getSession();
ResultSet rs = (ResultSet)session.getAttribute("rs");
session.setAttribute("rs", rs);
if(rs != null ) {
try {
UserDAO userDAO=new UserDAO();
ResultSet resultSet = userDAO.seleUser();
resultSet.last();
rowCount = resultSet.getRow(); // 总个数
pageCount = (int) Math.ceil(rowCount/(pageSize*1.0)); //总页数
strcurPage = request.getParameter("cur");
if(strcurPage != null) {
curPage = Integer.parseInt(strcurPage);
}
//设置上一页
prePage = curPage-1;
if(prePage <= 0)
prePage = 1;
//设置下一页
nextPage = curPage+1;
if(nextPage >= pageCount)
nextPage = pageCount;
beginIndex = (curPage-1)*pageSize+1; //开始指针指向当前页的第一个数据
if (beginIndex <= 0) { //无上一页
beginIndex = 1;
}
if (resultSet.absolute(beginIndex)) {
do {
//设置用户信息
User user = new User() ;
user.setUserID(beginIndex+i);
user.setUser_ID(Integer.parseInt(resultSet.getString("id")));
user.setUsername(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
user.setPnumber(resultSet.getString("phonenumber"));
user.setSex(resultSet.getString("sex"));
user.setEmail(resultSet.getString("email"));
user.setHobby(resultSet.getString("hobby"));
user.setAddr1(resultSet.getString("addr1"));
user.setAddr2(resultSet.getString("addr2"));
user.setIntroduce(resultSet.getString("introduce"));
//添加用户信息
list.add(user);
i++;
if (i == pageSize) {
break;
}
} while (resultSet.next());
}
//将信息封装在listPage类中
listPage.setCurPage(curPage);
listPage.setPrePage(prePage);
listPage.setNextPage(nextPage);
listPage.setPageCount(pageCount);
listPage.setPageSize(pageSize);
listPage.setRowCount(rowCount);
listPage.setList(list);
request.setAttribute("listPage", listPage);
request.getRequestDispatcher("./Manasuccess1.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
九、listPage类
用于封装用户以及分页信息
十、admin2Servlet类
管理员在查看用户信息界面,欲查看用户的介绍界面,会跳转到此类
/**
* Servlet implementation class admin2Servlet
*/
@WebServlet("/admin2Servlet")
public class admin2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id;
HttpSession session = request.getSession();
ResultSet rs = (ResultSet)session.getAttribute("rs");
Connection connection =null;
PreparedStatement ps=null;
String introduce = "";
String cur = "";
int i_d;
try {
//获得请求的id,并转换成int类型
id = request.getParameter("id");
id = java.net.URLDecoder.decode(id,"utf-8");
i_d = Integer.parseInt(id);
//获得当前页信息,用于返回
cur = request.getParameter("cur");
cur = java.net.URLDecoder.decode(cur,"utf-8");
session.setAttribute("rs", rs);
connection=JdbcUtils.getCon();
//静态sql语句
String sql = "select * from user1 where id=?";
ps = (PreparedStatement) connection.prepareStatement(sql);
ps.setInt(1, i_d);
rs = ps.executeQuery();
if(rs.next()){
introduce = rs.getString("introduce");
}
//将introduce与cur放入request中
request.setAttribute("introduce", introduce);
request.setAttribute("cur", cur);
request.getRequestDispatcher("./Manasuccess2.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.close(ps, connection);
}
}
}
十一、Delservlet类
管理员在查看用户信息界面,欲删除某个用户,会跳转到此类
@WebServlet("/Delservlet")
public class Delservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
ResultSet res = (ResultSet)session.getAttribute("rs");
if(res != null){
String id = request.getParameter("id");
String cur = request.getParameter("cur");
id = java.net.URLDecoder.decode(id,"utf-8");
//删除用户信息
UserDAO userDAO=new UserDAO();
userDAO.delUser(id);
session.setAttribute("rs", res);
request.setAttribute("cur", cur);
request.getRequestDispatcher("adminServlet").forward(request, response);
}else{
response.sendRedirect("./fail.jsp");
}
}
}
十二、各个页面展示
1.用户注册
2.用户登录
3.用户登录成功界面
4.用户查看自我介绍界面
5.管理员登陆界面
6.管理员登陆成功界面
7.管理员查看用户介绍界面
8.数据库截图
9.项目截图
项目地址:
书写不易,转载请留言!