[web开发入门]jsp+servlet+MYSQL 通讯录v1.0实现登录注册+增删改查(模糊查询)

项目总览
[web开发入门]jsp+servlet+MYSQL 通讯录v1.0实现登录注册+增删改查(模糊查询)

[web开发入门]jsp+servlet+MYSQL 通讯录v1.0实现登录注册+增删改查(模糊查询)

1.前端页面

login.jsp,登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
<h1>请注册</h1>
	<form action="AddressServlet",method = "post">
		用户名:<input type="text" id = "username" name = "username" size = "20" required = "required">
		密码:<input type="text" id = "password" name = "password" size = "20">
		<input type="hidden" id = "type" name = "type" value = "signup"/>
		<input type="submit" value = "提交">
 	</form>
</body>
</html>

list.jsp 登陆成功,显示通讯录

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>名单</title>
</head>
<body>
<h1>登陆成功</h1>
<%
String username=(String)request.getAttribute("username");
out.println(username + ",欢迎您使用通讯录v1.0");
%>
<h2>搜索联系人:</h2>
<form action="AddressServlet" method= "post">
	<input type = "text" name = "searchname" id = "searchname">
	<input type = "hidden" id = "username" name = "username" value = ${username}>
    <input type = "hidden" id = "type" name = "type" value = "search">
    <input type = "submit" value = "搜索">
</form>

<script type="text/javascript">
    function CheckAll(elementsA, elementsB) {
        for (i = 0; i < elementsA.length; i++) {
            elementsA[i].checked = true;
        }
        if (elementsB.checked == false) {
            for (j = 0; j < elementsA.length; j++) {
                elementsA[j].checked = false;
            }
        }
    }
    //判断用户是否选择了要删除的记录,如果是,则提示“是否删除”;否则提示“请选择要删除的记录”
    function checkdel(delname, formname) {
        var flag = false;
        for (i = 0; i < delname.length; i++) {
            if (delname[i].checked) {
                flag = true;
                break;
            }
        }
        if (!flag) {
            alert("请选择要删除的记录!");
            return false;
        } else {
            if (confirm("确定要删除吗?")) {
                formname.submit();
            }
        }
    }
</script>
<form action="AddressServlet" method="post" name="frm">
<table border="1" style="border-collapse:collapse">
   		<tr>
	   		<th>ID</th>
	   		<th>姓名</th>
	   		<th>手机</th>
	   		<th>地址</th>
	   		<th>删除</th>
   		</tr>
   			<%
   			Object getlists=request.getAttribute("personlists");
   			ArrayList<Person> personlists=(ArrayList<Person>)getlists;
   		
   		
   			if(personlists!=null)
   			{	
   				int id = 0;
   				for(Person p:personlists)
   				{
   					id++;
   			%>
   					<tr>
   						<td>
   							<%= id %>
   						</td>
   						<td>
   							<%= p.getName() %>
   						</td>
   						<td>
   							<%= p.getTel() %>
   						</td>
   						<td>
   							<%= p.getAddress() %>
   						</td>
   						<td><input name="delname" type="checkbox"
                    class="noborder" value="<%=p.getName()%>"></td>

   					</tr>
   			<% 
   				}
   			}
   			else
   			{%>
   				<tr>
   					<td>没有数据</td>
   				</tr>
   			 <%
   			}
   			%>
   	</table>
   	<footer>
            <input name="checkbox" type="checkbox" class="noborder"
                onClick="CheckAll(frm.delname,frm.checkbox)"> [全选/反选] [
                <a style="color:red;cursor:pointer;" onClick="checkdel(frm.delname,frm)">删除</a>]
            	<div id="ch" style="displ	ay: none">
            	<input type = "hidden" id = "username" name = "username" value = ${username}>
            	<input type = "hidden" id = "type" name = "type" value = "del">
                <input name="delname" type="checkbox" value="0">
            </div>
        </footer>
</form>
<form action="add.jsp" method = "post">
	<input type = "hidden" id = "username" name = "username" value = ${username}>
	<input type = "submit" value = "添加朋友">
</form>
   	
<form action="login.jsp" method = "get">
    <button type="submit">退出登录</button>
</form>
<input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页">
</body>
</html>

loginFailed.jsp 登录失败页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.net.*,java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>登录失败</title>
</head>
<body>
<h1>您输入的用户名或密码有误,请返回重新输入</h1>
<form action="login.jsp",method = "get">
<button type = "submit">返回</button>
</form>
</body>
</html>

signup.jsp 注册页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
<h1>请注册</h1>
	<form action="AddressServlet",method = "post">
		用户名:<input type="text" id = "username" name = "username" size = "20" required = "required">
		密码:<input type="text" id = "password" name = "password" size = "20">
		<input type="hidden" id = "type" name = "type" value = "signup"/>
		<input type="submit" value = "提交">
 	</form>
</body>
</html>

signupFailed.jsp注册失败

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>注册失败</title>
</head>
<body>
<h1>用户名"<%out.print((String)request.getAttribute("username")); %>"已存在,注册失败</h1>
<p>请更换用户名重试</p>
<form action="AddressServlet",method = "post">
		用户名:<input type="text" id = "username" name = "username" size = "20" required = "required">
		密码:<input type="text" id = "password" name = "password" size = "20">
		<input type="hidden" id = "type" name = "type" value = "signup"/>
		<input type="submit" value = "提交">
 	</form>
<p>若已拥有账户,请登录</p>
<form action="login.jsp" method = "get">
<button type = "submit">点击此处登陆</button>
</form>
</body>
</html>

search.jsp 查询页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>搜索</title>
</head>
<body bgcolor="#DFDBDE">
<script type="text/javascript">
window.onload = function () {
var myDiv = document.getElementById("h1");
//style属性 是 一个对象,里面有css的全部内容.
//myDiv是没有height属性的,但是myDiv.style下有height属性
myDiv.style.height = "50px";
myDiv.style.width = "1600px";
myDiv.style.backgroundColor = "rgb(248,248,248)";
}
function search(srh){
	var xmlhttp;
	var username = '<%=(String)request.getParameter("username")%>'
	
	//创建XMLHttpRequest对象
	  if (srh.length==0)
	  { 
	    document.getElementById("rlt").innerHTML="";
	    System.out.println("srh=0");
	    return;
	  }
	  if (window.XMLHttpRequest)
	  {
	    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
	    xmlhttp=new XMLHttpRequest();
	  }
	  else
	  {
	    // IE6, IE5 浏览器执行代码
	    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	  }
		//回调函数 
	  xmlhttp.onreadystatechange=function()
	  {//判断对象的状态是否交互完成&http的交互是否成功
	    if (xmlhttp.readyState==4 && xmlhttp.status==200)
	    {//设置元素节点中的html内容  
	      document.getElementById("rlt").innerHTML=xmlhttp.responseText;
	    }
	  }
	//设置连接信息
	  xmlhttp.open("GET","SearchServlet?q="+srh+"&username="+username,true);
	  xmlhttp.send();
}
</script>
<h1 id="h1" style="color:#00CCFF;">请输入关键字</h1>
<form action = "">
	<input  style="color:#00CCFF;" type = "text" id = "srh" onkeyup="search(this.value)">
</form>
<br>
<div id="rlt"></div>
</body>

add.jsp 添加联系人

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>添加朋友</title>
</head>
<body>
<h1>当前用户:<%
request.setCharacterEncoding("UTF-8");
out.print((String)request.getParameter("username"));%></h1>

<form action="AddressServlet" method = "post">
	姓名<input type = "text" id = "name" name = "name" size = "20" required = "required">
	电话<input type = "text" id = "tel" name = "tel" size = "20" required = "required">
	住址<input type = "text" id = "address" name = "address" size = "30" required = "required">
	<input type = "hidden" id = "username" name = "username" value = <%=request.getParameter("username") %>>
	<input type = "hidden" id = "type" name = "type" value = "add">
	<input type = "submit" value = "确认">
</form>
<input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页">
<!-- <form action="list.jsp" method = "get">
    <button type="submit">返回</button>
</form> -->
</body>
</html>

addFailed.jsp 联系人重复,添加失败

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "com.ben.bean.Person,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<title>联系人已存在</title>
</head>
<body>
<h1>您的联系人:"<%
out.print((String)request.getAttribute("name")); %>"已存在,请选择操作</h1>

<form action="AddressServlet", method = "post">
	<input type = "hidden" id = "username" name = "username" value = ${username}>
	<input type = "hidden" id = "name" name = "name" value = ${name}>
	<input type = "hidden" id = "tel" name = "tel" value = ${tel}>
	<input type = "hidden" id = "address" name = "address" value = ${address}>
	<input type = "hidden" id = "type" name = "type" value = "overwrite">
	<input type = "submit" value = "覆盖原有联系人">
</form>

<form action="add.jsp", method = "post">
	<input type = "hidden" id = "username" name = "username" value = ${username}>
	<input type = "submit" value = "重新添加联系人">
</form>
<input type="button" name="Submit" onclick="javascript:history.back(-1);" value="返回上一页">
</body>
</html>

2.servlet

AddressServlet.java

package com.ben.address;

import java.io.IOException;
import java.util.ArrayList;

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.ben.bean.Person;
import com.ben.bean.User;
import com.ben.service.*;

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

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

		request.setCharacterEncoding("UTF-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String type = request.getParameter("type");
		String name = request.getParameter("name");
		String searchname = request.getParameter("searchname");
		String[] delname = request.getParameterValues("delname");
		String tel = request.getParameter("tel");
		String address = request.getParameter("address");
		//登录
		if(!"".equals(username)) {
//			user = new User(username,password);
//			request.setAttribute("user", username);
			if(!"".equals(type)&&"login".equals(type)) {
				try {
					if(AddressService.islogin(username,password)){
						request.setAttribute("personlists", AddressService.list(username));
						request.setAttribute("username", username);
						//request.getRequestDispatcher("/list.jsp").forward(request, response);
						request.getRequestDispatcher("/search.jsp").forward(request, response);
						System.out.println("addservlet");
					}
					else {
						request.getRequestDispatcher("/loginFailed.jsp").forward(request, response);
						System.out.println(false);
					}
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
						
			}
			//注册
			if(!"".equals(type)&&"signup".equals(type)) {
				try {
					if(AddressService.signup(username, password)) {
						request.setAttribute("personlists", AddressService.list(username));
						request.setAttribute("username", username);
						request.getRequestDispatcher("/list.jsp").forward(request, response);
					}
					else
						request.setAttribute("username", username);
						request.getRequestDispatcher("/signupFailed.jsp").forward(request, response);
				}catch (ServletException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				}
			
			if(!"".equals(type)&&"add".equals(type)) {
				Person p = new Person(name,tel,address);
				try {
					if(AddressService.add(username,p)) {
						request.setAttribute("personlists", AddressService.list(username));
						request.setAttribute("username", username);
						request.getRequestDispatcher("/list.jsp").forward(request, response);
					}
					else {
						request.setAttribute("name", name);
						request.setAttribute("tel", tel);
						request.setAttribute("address", address);
						request.setAttribute("username", username);
						request.getRequestDispatcher("addFailed.jsp").forward(request, response);}
				}catch (ServletException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			//复写
			if(!"".equals(type)&&"overwrite".equals(type)) {
				Person p = new Person(name,tel,address);
				try {
					if(AddressService.overwrite(username,p)) {
						request.setAttribute("personlists", AddressService.list(username));
						request.setAttribute("username", username);
						request.getRequestDispatcher("/list.jsp").forward(request, response);
					}
					else
						request.setAttribute("personlists", AddressService.list(username));
						request.setAttribute("username", username);
						request.getRequestDispatcher("list.jsp").forward(request, response);
				}catch (ServletException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			//批量删除
			if(!"".equals(type)&&"del".equals(type)) {
				
					try {
						if(AddressService.isdel(username,delname)) {
							request.setAttribute("personlists", AddressService.list(username));
							request.setAttribute("username", username);
							request.getRequestDispatcher("/list.jsp").forward(request, response);
							System.out.println("delete success");
						}
					} catch (ClassNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				
			}
			//模糊搜索
			if(!"".equals(type)&&"search".equals(type)) {
				System.out.println("started searching");
				ArrayList searchrlt = new ArrayList<>();
				searchrlt = AddressService.searchlist(username,searchname);
				request.setAttribute("personlists", searchrlt);
				request.setAttribute("username", username);
				request.getRequestDispatcher("list.jsp").forward(request, response);
				System.out.println("srh succeed");
			
			}
			
			}
		}
	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

SerachServlet.java

package com.ben.address;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

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.ben.bean.Person;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");  
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String searchname = request.getParameter("q");
		String username = request.getParameter("username");
		Connection conn;
		PreparedStatement ps;
		ResultSet rs;
		ArrayList<Person> personlists = new ArrayList<Person>();
		final String DBDRIVER="com.mysql.cj.jdbc.Driver";
		String USERNAME="root";
		String PASSWORD="00000000";
		String URL="jdbc:mysql://localhost:3306/address?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8";
		
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql = "SELECT * FROM persons WHERE username = ? AND (name LIKE \"%\"?\"%\" OR tel LIKE \"%\"?\"%\" OR address LIKE \"%\"?\"%\") ORDER BY name ASC";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, searchname);
			ps.setString(3, searchname);
			ps.setString(4, searchname);
			rs = ps.executeQuery();
			while(rs.next()) {
				Person person = new Person(rs.getInt("idperson"),rs.getString("name"),rs.getString("tel"),rs.getString("address"));
				personlists.add(person);
			}
			rs.close();
	        ps.close();
	        conn.close();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
			out.print("<table border=\"1\" style=\"border-collapse:collapse\">");
			out.print("<tr>\r\n"  + 
					"	   		<th>姓名</th>\r\n" + 
					"	   		<th>手机</th>\r\n" + 
					"	   		<th>地址</th>\r\n" + 
					"   		</tr>");
			if(personlists!=null) {
				for(Person p:personlists) {
					out.print("<tr><td>"+p.getName()+"</td>"+
								"<td>"+p.getTel()+"</td>"+
								"<td>"+p.getAddress()+"</td>"+
								"</tr>");
				}
			}
			else {
				out.print("<tr> <td>未查询到结果</td></tr>");
			}
			out.print("</table>");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

3.bean

Person.java

package com.ben.bean;

public class Person {
	int id;
	String username;
	String name;
	String tel;
	String address;
	public Person() {
		super();
	}
	public Person(int id, String name, String tel, String address) {
		super();
		this.id = id;
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	public Person(String name, String tel, String address) {
		super();
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

User.java

package com.ben.bean;

public class User {
	String username;
	String password;
	public User() {
		// TODO Auto-generated constructor stub
	}
	
	
	
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}

	public String getPassword() {
		return password;
	}
	
	public String getUsername() {
		return username;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
}

4.dao

Utils.java

package com.ben.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.ben.bean.*;

public class Utils {
	static Connection conn;
	static PreparedStatement ps;
	static ResultSet rs;
	public static String uname;
	private static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
	private static String USERNAME="root";
	private static String PASSWORD="00000000";
	private static String URL="jdbc:mysql://localhost:3306/address?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8";
	//判断是否登陆成功
	public static boolean isLogin(String username,String password) throws ClassNotFoundException {
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, password);
			rs = ps.executeQuery();//初始没有指向内容,所以需要NEXT
			while (rs.next()){
				//也可以用col-name来取值
				if(rs.getString("username").equals(username)&&rs.getString("password").equals(password)) {
					return true;
				}
			}
			rs.close();
            ps.close();
            conn.close();
		}catch (SQLException e) {
			e.printStackTrace();
		}catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }
		
		return false;
	}
	//获取名单
	public static ArrayList<Person> list(String username){
		Person person;
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql = "SELECT * FROM persons WHERE username = ? ORDER BY name ASC";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			rs = ps.executeQuery();
			ArrayList personlists = new ArrayList<>();
			while(rs.next()) {
				person = new Person(rs.getInt("idperson"),rs.getString("name"),rs.getString("tel"),rs.getString("address"));
				personlists.add(person);
			}
			return personlists;
		}catch(SQLException e) {
			e.printStackTrace();
	}catch(Exception e){
        // 处理 Class.forName 错误
        e.printStackTrace();
    }
		return null;
		
	}
	
	public static ArrayList<Person> searchlist(String username,String searchname){
		Person person;
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql = "SELECT * FROM persons WHERE username = ? AND name LIKE \"%\"?\"%\" ORDER BY name ASC";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, searchname);
			rs = ps.executeQuery();
			ArrayList personlists = new ArrayList<>();
			while(rs.next()) {
				person = new Person(rs.getInt("idperson"),rs.getString("name"),rs.getString("tel"),rs.getString("address"));
				personlists.add(person);
			}
			return personlists;
		}catch(SQLException e) {
			e.printStackTrace();
	}catch(Exception e){
        // 处理 Class.forName 错误
        e.printStackTrace();
    }
		return null;
		
	}
	
	//添加用户
	public static boolean addUser(String username, String password) {
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			//用户查重
			String sql = "SELECT * FROM user WHERE username = ?";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			rs = ps.executeQuery();
			while(rs.next()) {
				if(username.equals(rs.getString("username")))
					return false;
			}
			sql = "INSERT INTO user(username,password) VALUE(?,?)";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, password);
			ps.executeUpdate();
            ps.close();
            conn.close();
            return true;
		}catch(SQLException e) {
			e.printStackTrace();
	}catch(Exception e){
        // 处理 Class.forName 错误
        e.printStackTrace();
    }
		return false;
		
	}
	//添加朋友
	public static boolean add(String username, Person p) {
		try {
			
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			//名单查重
			String sql = "SELECT * FROM persons WHERE username = ? AND name = ?";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, p.getName());
			rs = ps.executeQuery();
			while(rs.next()) {
				if(username.equals(rs.getString("username"))&&p.getName().equals(rs.getString("name")))
					return false;
			}
			sql = "INSERT INTO persons(username,name,tel,address) VALUE(?,?,?,?)";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, p.getName());
			ps.setString(3, p.getTel());
			ps.setString(4, p.getAddress());
			ps.executeUpdate();
			ps.close();
			conn.close();
			return true;
		}catch(SQLException e) {
			e.printStackTrace();
	}catch(Exception e){
        // 处理 Class.forName 错误
        e.printStackTrace();
    }
		return false;
	}
	
	public static boolean overwrite(String username, Person p) {
		try {
			
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			//名单查重
			String sql = "DELETE FROM persons WHERE username = ? AND name = ? ";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, p.getName());
			ps.executeUpdate();
			
			sql = "INSERT INTO persons(username,name,tel,address) VALUE(?,?,?,?)";
			ps = conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, p.getName());
			ps.setString(3, p.getTel());
			ps.setString(4, p.getAddress());
			ps.executeUpdate();
			ps.close();
			conn.close();
			return true;
		}catch(SQLException e) {
			e.printStackTrace();
	}catch(Exception e){
        // 处理 Class.forName 错误
        e.printStackTrace();
    }
		return false;
	}
	
	public static boolean isDel(String username,String[] delname) throws ClassNotFoundException {
		try {
			Class.forName(DBDRIVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql = "DELETE FROM persons WHERE username = ? AND name = ?";
			ps = conn.prepareStatement(sql);
			
			  if (delname.length>0){
		            for(int i=0;i<delname.length;i++){
		            	ps.setString(1, username);
		                ps.setString(2,delname[i]);   // 对SQL语句中的第1个参数赋值
		                ps.addBatch();              // 添加批处理命令
		            }
		        }
			  ps.executeBatch(); 
            ps.close();
            conn.close();
            return true;
		}catch (SQLException e) {
			e.printStackTrace();
		}catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }
		
		return false;
	}
}

AddressService.java

package com.ben.service;

import java.util.*;
import com.ben.bean.*;
import com.ben.dao.Utils;

public class AddressService {
	
		public static boolean islogin(String username,String pwd) throws ClassNotFoundException
		{
			return Utils.isLogin(username, pwd);
		}
		
		public static ArrayList<Person> list(String username)
		{
			return Utils.list(username);
		}
		
		public static ArrayList<Person> searchlist(String username, String searchname)
		{
			return Utils.searchlist(username,searchname);
		}
		
		public static boolean add(String username,Person p)
		{
			boolean rlt = Utils.add(username, p);
			System.out.println(rlt);
			System.out.println("add:"+username);
			return rlt;
		}
		
		public static boolean overwrite(String username,Person p)
		{
			boolean rlt = Utils.overwrite(username, p);
			System.out.println(rlt);
			System.out.println("overwrite:"+username);
			return rlt;
		}
		
		public static boolean signup(String username,String pwd)
		{
			boolean rlt = Utils.addUser(username, pwd);
			System.out.println(rlt);
			System.out.println("signup:"+username);
			return rlt;
		}
		
		public static boolean isdel(String username,String[] delname) throws ClassNotFoundException
		{
			boolean rlt = Utils.isDel(username, delname);
			System.out.println(rlt);
			System.out.println("isdel:"+username);
			return rlt;
		}
		
		
		
		
}

5.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" id="WebApp_ID" version="3.1">
  <display-name>address_v1</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <display-name>AddressServlet</display-name>
    <servlet-name>AddressServlet</servlet-name>
    <servlet-class>com.ben.address.AddressServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddressServlet</servlet-name>
    <url-pattern>/address_v1/AddressServlet</url-pattern>
    </servlet-mapping>
      <servlet>
    <display-name>SearchServlet</display-name>
    <servlet-name>SearchServlet</servlet-name>
    <servlet-class>com.ben.address.SearchServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SearchServlet</servlet-name>
    <url-pattern>/address_v1/SearchServlet</url-pattern>
  </servlet-mapping>
</web-app>

后来将web project转为maven project

7.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>address_v1</groupId>
  <artifactId>address_v1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
  		<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
		</dependency>
		<dependency>
		  <groupId>mysql</groupId>
		  <artifactId>mysql-connector-java</artifactId>
		  <version>8.0.12</version>
		</dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

MYSQL 数据库结构
两个table,分别是persons和user
[web开发入门]jsp+servlet+MYSQL 通讯录v1.0实现登录注册+增删改查(模糊查询)
[web开发入门]jsp+servlet+MYSQL 通讯录v1.0实现登录注册+增删改查(模糊查询)