java servlet 和mysql实现简单的登录注册

1.注册页面:
在这里插入图片描述
构建用户数据库:
在这里插入图片描述
数据库连接

import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
		String driver = "com.mysql.cj.jdbc.Driver";
	    String url= "jdbc:mysql://localhost:3306/learn?serverTimezone=GMT%2B8";
	    String user = "root";
	    String password = "password";
	    
	    public Connection conn;

	    public DBConnection() {

	        try {
	            Class.forName(driver);
	            conn = (Connection) DriverManager.getConnection(url, user, password);
	            
	            if(!conn.isClosed())
	                System.out.println("Succeeded connecting to the Database!"); 
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
	    
	    public void close() {
	        try {
	            this.conn.close();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

		public static void main(String[] args) {
		
		}

}

数据库增删改查方法实现


import java.lang.reflect.Field;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class MysqlUtil {

	public static void main(String[] args) {
		List<Map<String,String>> maplist = new ArrayList<>();
		String sqlget = "select * from userinfo";
		String[] params = { "id" ,"username","phone","otherinfo"};
		maplist = show(sqlget, params);
		String json = mapToJson(maplist);
		System.out.println(json);
	}
	/**
	 * 用于插入数据
	 * @param sql insert语句
	 * @return
	 */
	public static int add(String sql) {
        int i=0;
        //数据库连接
        DBConnection db = new DBConnection();
        try {        
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.executeUpdate();
            preStmt.close();
            db.close();//关闭连接 
            i = 1;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i;//返回影响的行数,1为执行成功;
    }
    //
    public static void show(){
         String sql ="select * from books";
         DBConnection db = new DBConnection();
         
         System.out.println("-----------------");
         System.out.println("大家看一下我的图书");
         System.out.println("-----------------");
         
         try {
            Statement stmt = (Statement) db.conn.createStatement();
            ResultSet rs = (ResultSet) stmt.executeQuery(sql);
            while(rs.next()){
               
            	String bookId = rs.getString("bookId");
            	String bookname = rs.getString("bookname");
                String booktype = rs.getString("booktype");
                String bookauthor = rs.getString("bookauthor");
                System.out.println(bookId +"\t"+ bookname +"\t"+ booktype+"\t"+bookauthor);
            }
            rs.close();
            db.close();//
        } catch (SQLException e) {
            e.printStackTrace();
        } 
    }

    public static int update(String sql) {
        int i =0;
        DBConnection db = new DBConnection();
        try {
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);
            preStmt.executeUpdate();
            preStmt.close();
            db.close();
            i = 1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }
    

    /**
     *  查询数据
     * @param sql select * from 表
     * @param params [id,name,sex,age] 我们要查询的列名的一个字符串数组
     * @return
     */
    public static List< Map<String,String> > show(String sql, String[] params){
    	
    	List< Map<String,String> > listmap = new ArrayList<>();
    	
         DBConnection db = new DBConnection();
         ResultSet rs = null;
         try {
            Statement stmt = (Statement) db.conn.createStatement();
            rs = (ResultSet) stmt.executeQuery(sql);
            while(rs.next()){
            	Map<String,String> map = new HashMap<String,String>();
            	for(int i = 0; i < params.length; i++) {
            		map.put(params[i], rs.getString(params[i]));
            	}
            	listmap.add(map);
            }
            rs.close();
            db.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
		return listmap; 
         
     
    }
    
    
    
    public static int count(String sql){//传参了
        	int num=0;
        
    
             DBConnection db = new DBConnection();
             ResultSet rs = null;
             try {
                Statement stmt = (Statement) db.conn.createStatement();
                rs = (ResultSet) stmt.executeQuery(sql);
           if(rs.next()) {
            	
            	num=rs.getInt(1);
            }  
                rs.close();
                db.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }  catch(IllegalArgumentException e) {
            	
            	e.printStackTrace();
            }
             return num;
        }
    
    
    
    
public static <T>List<T>  show(String sql, Class<T> cl){//传参了
    	
    	List< T> listmap = new ArrayList<>();
    	
         DBConnection db = new DBConnection();
         ResultSet rs = null;
         try {
            Statement stmt = (Statement) db.conn.createStatement();
            rs = (ResultSet) stmt.executeQuery(sql);
            while(rs.next()){
            	T t=cl.newInstance();
            	Field[] fields=cl.getDeclaredFields();//获取类的所有值包含私有的,不包含父类的。getField是获取共有的,包含父类的
            	for (Field field : fields) {
					Object object=rs.getObject(field.getName());
					field.setAccessible(true);
					field.set(t, object);
				}
            	listmap.add(t);
            }
            rs.close();
            db.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
         return listmap;
    }

    
    
 
    
    
    
    /**
     *  查询数据
     * @param sql select * from 表
     * @param params [id,name,sex,age] 我们要查询的列名的一个字符串数组
     * @return
     */
    public static String showJson(String sql, String[] params){
		return MysqlUtil.mapToJson(MysqlUtil.show(sql, params));
    }

    
  
    public static int del(String delstr) {
        int i=0;
        DBConnection db = new DBConnection();
        try {    
            PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(delstr);
            preStmt.executeUpdate();
            
            preStmt.close();
            db.close();
            i = 1;
        } catch (SQLException e){
            e.printStackTrace();
        }
        return i;
    }

    
    /**
     * map转化为json数据字符串
     * @param maplist
     * @return
     */
    public static String mapToJson( List<Map<String,String>> maplist ) {
    	String jsonData = "{ \"data\":[";
		for(int i = 0; i < maplist.size(); i++) {
			String outstr = "[\"" ;
			int size = 0;
			for(String value : maplist.get(i).values()){
				size += 1;
				outstr += value;
				if( size < maplist.get(i).values().size() ) {
				     outstr += "\",\"";
				}
			}
		    outstr += "\"]";
		    if(i < maplist.size() -1) {
		    	outstr += ",";
		    }
			jsonData += outstr;
		}
		jsonData += "]}";
		
		return jsonData;
    }
}
	
	


_footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
</html>

_header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>

</body>
</html>

登录界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>


</head>
<jsp:include   page="_header.jsp" flush="true"/>
<body > 
<div style="height:200px; margin-top:300px;"class="form-group">
<form action="AccountServlet" method="post">
	<div class="row">
<div class="container">
		<div class="col-md-offset-3 col-md-1">&nbsp;&nbsp;:</div>
		<div class="col-md-2"><input class="form-control"name="account" type="text" ></div>
		</div>
	</div>
	<div class="row">
	<div class="container">
		<div class="col-md-offset-3 col-md-1">&nbsp;&nbsp;:</div>
		<div class="col-md-2"><input class="form-control"name="pwd" type="password" ></div>
	</div>
	</div>

	<div class="row">
			<div class="col-md-offset-4 col-md-6"><button class="btn btn-success" style="margin-top:50px;margin-left:20px;">登录</button></div>
	</div>
		<input type="hidden" name="method" value="login"/>
</form>

<div class="col-md-offset-5 col-md-6"><button class="btn btn-success" onclick="send()"style="margin-top:-50px;margin-left:70px;">注册</button></div>
</div>
</body>
<jsp:include   page="_footer.jsp" flush="true"/>
<script>
	 $(function(){
		var msg="${msg}";
		if(msg!=""){
			
			alert(msg);
		}
		 
		 
	 })

	function send(){
		 window.location.href="<%=request.getContextPath()%>/register.jsp"
	 }
	 function land(){
		 
		 window.location.href="<%=request.getContextPath()%>/managerland.jsp"
	 }
	 
</script>
</html>

注册界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<jsp:include   page="_header.jsp" flush="true"/>
<body>
<div style="margin-top:300px;"class="form-group">
	<div class="row" >
	<div class="container">
		<div class="col-md-offset-3 col-md-1">&nbsp;&nbsp;</div>
		<div class="col-md-2"><input class="form-control"id="account" type="text" ></div>
	</div>
	</div>
	<div class="row">
	<div class="container">
		<div class="col-md-offset-3 col-md-1">&nbsp;&nbsp;</div>
		<div class="col-md-2"><input class="form-control"id="pwd" type="password" ></div>
	</div>
	</div>
	<div class="row">
	<div class="container">
		<div class="col-md-offset-3 col-md-1">确认密码</div>
		<div class="col-md-2"><input class="form-control"id="pwdagain" type="password" ></div>
	</div>
	</div>
	<div class="row">
	<div class="container">
		<div class="col-md-offset-4 col-md-6"><button class="btn btn-success" onclick="register()"style="margin-top:50px;margin-left:50px;">注册</button></div>
	</div>
	</div>
</div>
</body>
<jsp:include   page="_footer.jsp" flush="true"/>
<script>
	 var register = function(){
		var account=$("#account").val();
		var pwd=$("#pwd").val();
		var pwdagain=$("#pwdagain").val();
		if(pwd.trim()!=pwdagain.trim()){
			alert("两次输入密码不一致,请重新输入");
			$("#pwd").val("");
			$("#pwdagain").val("");
			return;
		}
		if(account==""){
			alert("用户名不能为空,请重新输入");
			$("#pwd").val("");
			$("#pwdagain").val("");
			return;	
		}
		if(pwd==""){
			alert("密码不能为空,请重新输入");
			$("#pwd").val("");
			$("#pwdagain").val("");
			return;	
			
		}
		$.ajax({
	        type: "post",
	        dataType:"json", //返回格式为json
	        url: "<%=request.getContextPath()%>/AccountServlet",
	        data: {"account":account,"pwd":pwd,"pwdagain":pwdagain,"method":"register"},//method:告诉后台提交的是注册请求。如果做接口的话,需要pwdagain的值
	        cache: false,
	        async : false,
	        success: function (data)
	        {
	        	alert(data.msg);
	        	if(data.msg=="账户已存在"){
	        		$("#pwd").val("");
	    			$("#pwdagain").val("");
	    			return;		
	        	}
	        	if(data.msg=="两次输入的密码不一致"){
	        		$("#pwd").val("");
	    			$("#pwdagain").val("");
	    			return;	
	        		
	        	}
	        	//做跳转页面
	        	if(data.msg=="注册成功"){
	     window.location.href="<%=request.getContextPath()%>/login.jsp"}
	        },
	        
	        error:function (XMLHttpRequest, textStatus, errorThrown) {      
	            
	        }
	     });
		
	}
	  var gologin =function(){
		     window.location.href="<%=request.getContextPath()%>/login.jsp"
	  }

</script>
</html>

servlet

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qcby.connect.MysqlUtil;
import com.qcby.entity.News;

/**
 * Servlet implementation class AccountServlet
 */
@WebServlet("/AccountServlet")
public class AccountServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AccountServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		String method = request.getParameter("method");
		String login=request.getParameter("login");
		switch (method) {
		case "register":
			register(request, response);
			break;
		case "login":
			login(request,response);
	
		default: 
			break;
		}
	}
	/**
	 * 注册方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 */
	private void register(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
		String account = request.getParameter("account");
		String pwd = request.getParameter("pwd");
		String pwdagain = request.getParameter("pwdagain");
		String json="{";
		if(!pwd.trim().equals(pwdagain.trim())) {
			json+="\"msg\":\"两次输入的密码不一致\",";
			json+="\"code\":\"1001\"";
			json+="}";
			response.getWriter().write(json);
			return;
		
		}
		
		String sql="select count(*) from t_user where account ='"+account+"'";
		
		int count = MysqlUtil.count(sql);
		if(count>0) {
			json+="\"msg\":\"账户已存在\",";
			json+="\"code\":\"1002\"";
			json+="}";
			response.getWriter().write(json);
			return;
		
		}
		
		String sqlinsert="insert into t_user (account,pwd,createTime) values('"+account+"','"+pwd+"',now())";
		int add = MysqlUtil.add(sqlinsert);
		if(add==1) {
			json+="\"msg\":\"注册成功\",";
			json+="\"code\":\"1000\"";
		}
		json+="}";
		response.getWriter().write(json);
	
	}
	
	
	private void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String account=request.getParameter("account");
		String pwd=request.getParameter("pwd");
		String sql="select count(*) from t_user "
				+ "where account ='"+account+"' and pwd ='"+pwd+"'";
		int count=MysqlUtil.count(sql);
	
		if(count>0) {
			response.sendRedirect("Manage");
			
		}else {
			request.setAttribute("msg", "账户密码不匹配");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	
	}
	

	
	
	
	
	
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值