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">账 户:</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">密 码:</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">账 户</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">密 码</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);
}
}
}