基于MVC模式实现用户注册和登录功能

目录

  • 1、实验简介
  • 2、具体细节分析
  • 3、实验工具
  • 4、整体框架截图
  • 5、代码实现
    • 1、login.jsp
    • 2、ok.jsp
    • 3、register.jsp
    • 4、list.jsp
    • 5、edit.jsp
    • 6、DBConn.java
    • 7、User.java
    • 8、UserService.java
    • 9、AddServlet.java
    • 10、DeleteServlet.java
    • 11、EditServlet.java
    • 12、LoginServlet.java
    • 13、web.xml
  • 6、结果截图
  • 7、总结

1、实验简介

  1、理解MVC模式。
  2、掌握JSP+Servlet+JavaBean实现MVC的方法。
  3、JSP中数据库的增删改查操作

2、具体细节分析

  设计一个Web应用,系统分为三层,系统根据每个Java类所负责的任务,把系统分为三层,分别为web层、service层和model层,web层用于放置Servlet类,service层负责存放业务逻辑类,model层负责存放数据JavaBean。
  编写一个注册页面register.jsp,提供一个用户注册的表单,并把用户填写的信息提交给名为add的servlet。
  add利用JDBC连接数据库,并实现往数据库中插入一条数据(同时写入JavaBean),成功跳转到list.jsp页面,失败跳转回register.jsp页面。
  list.jsp页面负责显示所有已注册的用户信息,并提供删除和修改功能,分别对应名为edit和delete的servlet。
  edit和delete分别完成用户信息修改和删除功能,成功后给用户相应提示信息。

3、实验工具

  ■ MyEclipse 2017 CI
  ■ SQLyog - 64 bit
  ■ MySQL(mysql-8.0.18-winx64)
  ■ Tomcat(apache-tomcat-8.5.45)

4、整体框架截图

基于MVC模式实现用户注册和登录功能_第1张图片

5、代码实现

1、login.jsp

<%@ page contentType="text/html;charset=gb2312" %>
<html>
  <head>
    <title>Login</title>
  </head>
  <body bgcolor=#CCCC33>
  <div align="center">
  <font size=3>
    <h1>请登录</h1>
    <form action="loginServlet" method="post">
    <table>
        <tr>
        	<td>用户名:</td>
        	<td><input type="text" name="username"></td>
        </tr>
        <tr>
        	<td>密 码:</td>	
        	<td><input type="password" name="password"></td>
        </tr>
        <tr>
        	<td></td>
    		<td><input type="submit" value="提交"></td>
    	</tr>
    </table>
    </form> 
    </div>
    </font>
    </div>
  </body>
</html>

2、ok.jsp

<%@ page contentType="text/html;charset=gb2312" %>
<html>
  <head>
    <title>Success</title>
  </head>
  <body bgcolor=#7f78d2>
    <h1 align="center">登录成功!欢迎您 </h1>
    <div align="center">
    <form action="register.jsp" method=post>
    <input type="submit" value="去注册" >
    </form>
    </div>
  </body>
</html>

3、register.jsp

<%@ page contentType="text/html;charset=gb2312" %>
<html>
  <head>
    <title>Login</title>
  </head>
  <body bgcolor=#99CCCC>
  <div align="center">
  <font size=3>
    <h1>请注册</h1>
    <form action="AddServlet" method="post">
    <table>
        <tr>
        	<td>用户名:</td>
        	<td><input type="text" name="username"></td>
        </tr>
        <tr>
        	<td>密 码:</td>	
        	<td><input type="password" name="password"></td>
        </tr>
        <tr>
        	<td></td>
    		<td><input type="submit" value="提交"></td>
    	</tr>
    </table>
    </form>
    </font>
    </div>
    <script>
     var Null= '<%=request.getParameter("Null")%>';
    if(Null=='yes'){
        alert("用户名和密码不得为空!");
    }
    </script>
  </body>
</html>

4、list.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<jsp:useBean id="bean" class="model.User" scope="session"/>
<html>
<head>
    <title>查询</title>
</head>
<body bgcolor=#99CC33>
<h2 align="center">用户信息如下:</h2>
<table align="center" border=2>
<% String [] columnName=bean.getColumnName(); %>
		<tr>
		<% for(String s:columnName){
		 %>  <th><%=s%></th>
		 <%}
		 %>	</tr>
		 <% String [][]record=bean.getTableRecord(); 
		 for(int i=0;i<record.length;i++){
		 %>  <tr>
		 <% for(int j=0;j<record[i].length;j++){
		  %>  <td><%=record[i][j]%></td>
		  <%
		  }%>
		   <td><button onclick="window.location.href='edit.jsp?id='+<%=record[i][0]%>+'&username='+<%=record[i][1]%>+'&password='+<%=record[i][2]%>">修改</button></td>
       	   <td><button onclick="window.location.href = 'DeleteServlet?id='+<%=record[i][0]%>">删除</button></td>
		  </tr>
		  <%}
		  %>
	 </table>
	 <div align="center">
    <form action="register.jsp" method=post>
    <input type="submit" value="去注册" >
    </form>
    </div>
   </body>
</html>

5、edit.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="bean" class="model.User" scope="session"/>
<html>
<head>
    <title>编辑</title>
</head>
<body bgcolor=#CCCC00>
<%
    int id = Integer.parseInt(request.getParameter("id"));
    String username = request.getParameter("username");
    String password = request.getParameter("password");
%>
<h3 align="center">修改用户<%=username%>的数据</h3>
<div align="center">
<form action="EditServlet" method="post" >
    <input type="hidden" name="id" value="<%=id%>"/>
    <table>
        <tr>
        	<td>用户名:</td>
        	<td><input type="text" name="username" value="<%=username%>" size="5"/></td>
        </tr>
        <tr>
        	<td>密 码:</td>	
        	<td><input type="text" name="password" value="<%=password%>" size="5"/></td>
        </tr>
        <tr>
        	<td></td>
    		<td><input type="submit" value="确认修改"></td>
    	</tr>
    </table>
</form>
</div>
</body>
</html>

6、DBConn.java

package db;
import java.sql.*;
public class DBConn {
	public Connection getConnection() {
		try {
//			加载注册驱动程序
			try {
				Class.forName("org.gjt.mm.mysql.Driver");
			} catch (Exception e) {
				e.printStackTrace();
			}	
			String url="jdbc:mysql://127.0.0.1:3306/stu?user=root&password=&characterEncoding=gb2312";
			return DriverManager.getConnection(url);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		 return null;
	}
}

7、User.java

package model;
public class User {
	int id;
	String username;
	String password;
//	存放列名
	String []columnName;
//	存放记录
	String [][]tableRecord=null;
	public String[] getColumnName() {
		return columnName;
	}
	public void setColumnName(String[] columnName) {
		this.columnName = columnName;
	}
	public String[][] getTableRecord() {
		return tableRecord;
	}
	public void setTableRecord(String[][] tableRecord) {
		this.tableRecord = tableRecord;
	}
	public int getId() {
		return id;
	}
	public void setId(int i) {
		this.id = i;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

8、UserService.java

package service;
import java.sql.*;
import db.DBConn;
import model.User;
public class UserService {
//	****************************************登录service**********************************************
	public boolean checkLogin(User bean) {
//		从JavaBean中获得属性值
		String username=bean.getUsername();
		String password=bean.getPassword();
//		创建连接
		try {
			DBConn db=new DBConn();
//			传统连接方式
			Connection conn = db.getConnection();
//			不使用预处理语句
//			Statement stat = conn.createStatement();
//			String sql="select * from user where username='"+username+"' and password='" + password+"'";
//			ResultSet rs=stat.executeQuery(sql);
//			使用预处理语句
			PreparedStatement pre=conn.prepareStatement("select * from user where username='"+username+"' and password='" + password+"'");
			ResultSet rs=pre.executeQuery();
			if(rs.next()){
				pre.close();
				rs.close();
			    return true;
			}
			else
			    return false;
			} catch (SQLException e) {
				System.out.println("数据库连接出错!");
			return false;
		}	
	}	
//	****************************************注册和查询service**********************************************
	public boolean add(User bean) {
		String username=bean.getUsername();
		String password=bean.getPassword();
//		检查值
		System.out.println(username);
		System.out.println(password);
		System.out.println("addservice获取成功");
		try {
			DBConn db=new DBConn();
//			传统连接方式,不使用预处理语句
//			Connection conn = db.getConnection();
//			Statement stat = conn.createStatement();
//			String sql1="select * from user where username='"+username+"' and password='" + password+"'";
//			String sql="insert into user(username,password)VALUES('"+username+"','"+password+"')";
//			ResultSet rs=stat.executeQuery(sql1);			
//			使用预处理语句
			Connection conn = db.getConnection();
			PreparedStatement pre=conn.prepareStatement("select * from user where username=? and password=?");
			pre.setString(1,username);
			pre.setString(2,password);
			ResultSet rs=pre.executeQuery();
			if(!rs.next()){
				PreparedStatement pre1=conn.prepareStatement("insert into user(username,password) VALUES(?,?)");
				pre1.setString(1,username);
				pre1.setString(2,password);
			    pre1.executeUpdate();
//			      不使用预处理语句
//				stat.executeUpdate(sql);
			    PreparedStatement pre2=conn.prepareStatement("select * from user order by id");
			    ResultSet rs1=pre2.executeQuery();
			    ResultSetMetaData metaData=pre2.getMetaData();
//			       得到结果集的列数
			    int columnCount=metaData.getColumnCount();
			    String []columnName=new String[columnCount];
			    for(int i=0;i<columnName.length;i++){
//			   	得到列名
			    	columnName[i]=metaData.getColumnName(i+1);
			    }
//			      更新JavaBean数据模型
			    bean.setColumnName(columnName);
//			      将游标移动到结果集的最后一行
			    rs1.last();
//			      得到记录行号
			    int rowNumber=rs1.getRow(); 
			    String[][] tableRecord=bean.getTableRecord();
			    tableRecord=new String[rowNumber][columnCount];
//			       将游标移动到结果集初始位置,第一行之前
			    rs1.beforeFirst();
			    int i=0;
			    while(rs1.next()){
			    	for(int k=0;k<columnCount;k++){
			    		tableRecord[i][k]=rs1.getString(k+1);
			    	}
			    	i++;
			    }
//			       更新JavaBean数据模型
			    bean.setTableRecord(tableRecord);
			    conn.close();
			    pre.close();
			    pre1.close();
			    pre2.close();
			    rs1.close();
			    return true;
			    }
			else
			    return false;
			} catch (SQLException e) {
				System.out.println("数据库连接出错!");
				return false;
			}
	}
//	****************************************找到IDservice**********************************************
	public User Search(int id) throws SQLException {
        User user = new User();
        DBConn dbConn = new DBConn();
        if (dbConn.getConnection()!=null) {
            Connection conn = dbConn.getConnection();
            PreparedStatement pre=conn.prepareStatement("select * from user where id=?");
            pre.setInt(1,id);
            ResultSet rs = pre.executeQuery();
            if (rs.next()){
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                conn.close();
                pre.close();
                rs.close();
            }
            return user;
        }else{
            return user;
        }
    }
//	****************************************修改service**********************************************
	public boolean Edit(User user) throws SQLException {
        DBConn dbConn = new DBConn();
        String username = user.getUsername();
        String password = user.getPassword();
        int id = user.getId();
        if (dbConn.getConnection()!=null) {
            Connection conn = dbConn.getConnection();
            PreparedStatement pre=conn.prepareStatement("update user set username = ? , password = ? where id = ?");
            pre.setString(1,username);
            pre.setString(2,password);
            pre.setInt(3,id);
            pre.executeUpdate();
            
            PreparedStatement pre2=conn.prepareStatement("select * from user order by id");
		    ResultSet rs1=pre2.executeQuery();
		    ResultSetMetaData metaData=pre2.getMetaData();
//		       得到结果集的列数
		    int columnCount=metaData.getColumnCount();
		    String []columnName=new String[columnCount];
		    for(int i=0;i<columnName.length;i++){
//		       得到列名
		    	columnName[i]=metaData.getColumnName(i+1);
		    }
//		      更新JavaBean数据模型
		    user.setColumnName(columnName);
//		      将游标移动到结果集的最后一行
		    rs1.last();
//		      得到记录行号
		    int rowNumber=rs1.getRow(); 
		    String[][] tableRecord=user.getTableRecord();
		    tableRecord=new String[rowNumber][columnCount];
//		    S将游标移动到结果集初始位置,第一行之前
		    rs1.beforeFirst();
		    int i=0;
		    while(rs1.next()){
		    	for(int k=0;k<columnCount;k++){
		    		tableRecord[i][k]=rs1.getString(k+1);
		    	}
		    	i++;
		    }
//		       更新JavaBean数据模型
		    user.setTableRecord(tableRecord);
		    conn.close();
		    pre.close();
		    pre2.close(); 
		    rs1.close();
            return true;
        }else{
            return false;
        }
    }
//	****************************************删除service**********************************************
	public boolean Delete(User user) throws SQLException {
        DBConn dbConn = new DBConn();
        int id = user.getId();
        if (dbConn.getConnection()!=null) {
            Connection conn = dbConn.getConnection();
            PreparedStatement pre=conn.prepareStatement("delete from user where id = ?");
            pre.setInt(1,id);
            pre.executeUpdate();
            
            PreparedStatement pre2=conn.prepareStatement("select * from user order by id");
		    ResultSet rs1=pre2.executeQuery();
		    ResultSetMetaData metaData=pre2.getMetaData();
//		       得到结果集的列数
		    int columnCount=metaData.getColumnCount();
		    String []columnName=new String[columnCount];
		    for(int i=0;i<columnName.length;i++){
//		       得到列名
		    	columnName[i]=metaData.getColumnName(i+1);
		    }
//		      更新JavaBean数据模型
		    user.setColumnName(columnName);
//		      将游标移动到结果集的最后一行
		    rs1.last();
//		      得到记录行号
		    int rowNumber=rs1.getRow(); 
		    String[][] tableRecord=user.getTableRecord();
		    tableRecord=new String[rowNumber][columnCount];
//		       将游标移动到结果集初始位置,第一行之前
		    rs1.beforeFirst();
		    int i=0;
		    while(rs1.next()){
		    	for(int k=0;k<columnCount;k++){
		    		tableRecord[i][k]=rs1.getString(k+1);
		    	}
		    	i++;
		    }
//		       更新JavaBean数据模型
		    user.setTableRecord(tableRecord);
		    conn.close();
		    pre.close();
		    pre2.close();
		    rs1.close();
            return true;
        }else{
            return false;
        }
    }	
}

9、AddServlet.java

package web;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import db.DBConn;
import model.User;
import service.UserService;

public class AddServlet extends HttpServlet {
@Override
public void init() throws ServletException {
	super.init();
}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("gb2312");
	String username = req.getParameter("username");
	String password = req.getParameter("password");
//	检测值
	System.out.println(username);
	System.out.println(password);
	System.out.println("addservelt获取成功");
	if(username.length()>0&&password.length()>0){
//	写入JavaBean
	User bean=new User();
	HttpSession session=req.getSession(true);
	session.setAttribute("bean",bean);
	bean.setUsername(username);
	bean.setPassword(password);
	UserService addservice = new UserService();
//	判断是否注册成功
	if(addservice.add(bean)){	
//		转发
		RequestDispatcher dis=req.getRequestDispatcher("list.jsp"); 
		dis.forward(req, resp); 
	}else{
//		重定向
		resp.sendRedirect("register.jsp");	
	}
	}else
		resp.sendRedirect("register.jsp?Null=yes");	
	}
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

10、DeleteServlet.java

package web;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.User;
import service.UserService;
public class DeleteServlet extends HttpServlet {
	@Override
	public void init() throws ServletException {
		super.init();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("gb2312");  	
        int id = Integer.parseInt(req.getParameter("id"));
        User user = null;
        UserService userService = new UserService();
        try {
            user = userService.Search(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
      HttpSession session=req.getSession(true);
  	  session.setAttribute("bean",user);
        try {
            if (userService.Delete(user)){
            	RequestDispatcher dis=req.getRequestDispatcher("list.jsp"); 
        		dis.forward(req, resp); 
            }else{
                resp.sendRedirect("edit.jsp");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
}

11、EditServlet.java

package web;
import java.io.IOException;
import java.sql.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.User;
import service.UserService;

public class EditServlet extends HttpServlet {
@Override
public void init() throws ServletException {
	super.init();
}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("gb2312");
    
    int id = Integer.parseInt(req.getParameter("id"));
    String name = req.getParameter("username");
    String word = req.getParameter("password");
    
    User user = new User();
    HttpSession session=req.getSession(true);
	session.setAttribute("bean",user);
    user.setId(id);
    user.setUsername(name);
    user.setPassword(word);

    UserService userService = new UserService();
    try {
        if (userService.Edit(user)){
        	RequestDispatcher dis=req.getRequestDispatcher("list.jsp"); 
    		dis.forward(req, resp); 
        }else{
            resp.sendRedirect("edit.jsp");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
	}
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
}

12、LoginServlet.java

package web;
import java.sql.*;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import model.User;
import service.UserService;

public class LoginServlet extends HttpServlet {
@Override
	public void init() throws ServletException {
	super.init();
}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("gb2312");
	String username = req.getParameter("username");
	String password = req.getParameter("password");
//	创建JavaBean
	User bean=new User();
	bean.setUsername(username);
	bean.setPassword(password);
	UserService service = new UserService();
//	判断是否登录成功
	if(service.checkLogin(bean)){
//		重定向
//		resp.sendRedirect("ok.jsp");
//		转发
		RequestDispatcher dis=req.getRequestDispatcher("ok.jsp"); 
		dis.forward(req, resp); 
	}else{
//		重定向
		resp.sendRedirect("login.jsp");	
	}
}
@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
}

13、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>ch7_test</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    
  <servlet>
      <servlet-name>addServlet</servlet-name>
      <servlet-class>web.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addServlet</servlet-name>
    <url-pattern>/AddServlet</url-pattern>
  </servlet-mapping>
  
   <servlet>
      <servlet-name>loginServlet</servlet-name>
      <servlet-class>web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>
   
     <servlet>
      <servlet-name>EditServlet</servlet-name>
      <servlet-class>web.EditServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>EditServlet</servlet-name>
    <url-pattern>/EditServlet</url-pattern>
  </servlet-mapping>
  
    <servlet>
      <servlet-name>DeleteServlet</servlet-name>
      <servlet-class>web.DeleteServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DeleteServlet</servlet-name>
    <url-pattern>/DeleteServlet</url-pattern>
  </servlet-mapping>

</web-app>

6、结果截图

基于MVC模式实现用户注册和登录功能_第2张图片在这里插入图片描述在这里插入图片描述在这里插入图片描述

7、总结

  要理解MVC模式,使用JSP+Servlet+JavaBean分层实现。这样会很有条理,思路会更加清晰。
  记得将mysql-connector-java-5.1.5-bin.jar放到所写项目“WebRoot/WEB-INF/lib”目录下。随是小问题,却行容易遗忘。
  可参见https://blog.csdn.net/Haa__/article/details/104636171.


声明:
文章内容仅供参考。
如因本人发布的作品内容涉及版权或存在其他问题,请于文章发布后的30日内联系我进行删除。
谢谢浏览!

你可能感兴趣的:(JSP)