首先建user数据库,字段id,username,password,sex,hobby,addr,img
建city数据库,字段id,name,sid
导入utils
package com.baidu.utils;
import org.apache.commons.dbutils.QueryRunner;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
private static ComboPooledDataSource c=new ComboPooledDataSource();
private static QueryRunner qr=new QueryRunner©;
public static QueryRunner getQR() {
return qr;
}
}
创建User实体类,City实体类,PageBean分页实体类
package com.baidu.domain;
import java.util.List;
public class PageBean {
private int tr;//每页要显示的行数 我们自己规定 每页显示几行数据
private int trSum;//一共有多少条数据
private int page;//当前是第几页 用户前端页面 传给后台
/*
* 用法:Math.ceil(double x);
* 功能:返回大于或等于指定表达式的最小整数 即向上取整
* 用例:写分页的时候根据查到的记录总数count和
* 每页数据数rows
* 求出总共有多少页 这里都定义为int型
*/
private int pageSum; //总页码 Math.ceil(trSum/tr)
private List<User> list;
public PageBean() {
super();
// TODO Auto-generated constructor stub
}
public PageBean(int tr, int trSum, int page, int pageSum, List<User> list) {
super();
this.tr = tr;
this.trSum = trSum;
this.page = page;
this.pageSum = pageSum;
this.list = list;
}
public int getTr() {
return tr;
}
public void setTr(int tr) {
this.tr = tr;
}
public int getTrSum() {
return trSum;
}
public void setTrSum(int trSum) {
this.trSum = trSum;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSum() {
return pageSum;
}
public void setPageSum(int pageSum) {
this.pageSum = pageSum;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String toString() {
return "PageBean [tr=" + tr + ", trSum=" + trSum + ", page=" + page + ", pageSum=" + pageSum + ", list=" + list
+ "]";
}
}
写注册.jsp前端界面
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body background="guanli.jpg">
<form action="${pageContext.request.contextPath }/RegisterServlet" method="post" enctype="multipart/form-data">
账号:<input type="text" name="username"><span id="s1">账号的长度必须是3位以上</span><br>
密码:<input type="password" name="password"><span id="s2">密码的长度必须是3位以上</span><br>
重复密码:<input type="repassword" name="repassword"><span id="s3">密码和重复密码必须一致</span><br>
性别:
<input type="radio" name="sex" value="男" >男
<input type="radio" name="sex" value="女">女<br>
爱好:
<input type="checkbox" name="hobby" class="hobby" value="LOL">LOL
<input type="checkbox" name="hobby" class="hobby" value="CF">CF
<input type="checkbox" name="hobby" class="hobby" value="QQ飞车">QQ飞车
<input type="checkbox" name="hobby" class="hobby" value="DNF">DNF<br>
地址:
<select id="sheng" name="sheng">
<option>---请选择---</option>
</select>
<select id="shi" name="shi">
<option>---请选择---</option>
</select><br>
头像:
<input type="file" name="file" id="file"><br>
<input type="submit" value="注册">
</form>
</body>
<script type="text/javascript" src="jq.js"></script>
<script type="text/javascript">
$.get("/day03/CityServlet",function(msg){
var sheng=eval("("+msg+")");
for(var i=0; i<sheng.length; i++){
$("#sheng").append("<option>"+sheng[i]+"</option>");
}
});
$("#sheng").change(function(){
$("#shi").text("");
$("#shi").append("<option>---请选择---</option>");
$.post("/day03/CityServlet",{sheng:$(this).val()},function(msg){
var shi = eval("("+msg+")");
for(var i=0; i<shi.length; i++){
$("#shi").append("<option>"+shi[i]+"</option>");
}
})
});
//验证的内容
//1.账号的长度
$("#username").blur(function(){
var un=$(this).val();
if(un.length>2){
$.post("/day03/FindUserServlet",{username:un},function(msg){
if(msg=="true"){
$("#s1").text("对不起,账号已重复");
}else{
$("#s1").text("正确");
}
});
}else{
$("#s1").text("账号的长度不符合要求!");
}
});
$("#password").blur(function(){
var repwd=$(this).val();
if(pwd.length>2){
$("#s2").text("正确");
}else{
$("#s2").text("密码的长度不符合要求!");
}
})
$("#password").blur(function(){
var pwd=$("#password").val();
var repwd=$(this).val();
if(repwd==pwd){
$("#s3").text("正确");
}else{
$("#s3").text("两次密码不一样!");
}
});
</script>
</html>
写注册servlet
Register.Servlet
package com.baidu.servlet;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import com.baidu.domain.User;
import com.baidu.service.UserService;
@WebServlet("/RegisterServlet")
@MultipartConfig
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
UserService us=new UserService();
//getParameter后台获取前台http页面传递过来的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String sheng = request.getParameter("sheng");
String shi = request.getParameter("shi");
String addr = sheng+","+shi;
String[] hobbys = request.getParameterValues("hobby");
String hobby = "";
if (hobbys != null) {
hobby = Arrays.toString(hobbys);
}
Part file = request.getPart("file");
long time = System.currentTimeMillis();
String img = time+".jpg";
String realPath = getServletContext().getRealPath("");
file.write(realPath+"/"+img);
User u=new User(null, username, password, sex, hobby, addr, img);
//由add生成UserService里
//public void add(User u) {
//ud.add(u, qr);
// }
us.add(u);
//将servlet的请求转发到服务器上的另一个资源(servlet,JSP文件或HTML文件)。
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
跳转UserService
package com.baidu.service;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import com.baidu.dao.UserDao;
import com.baidu.domain.User;
import com.baidu.domain.PageBean;
import com.baidu.utils.JDBCUtils;
public class UserService {
//创建dao层对象
private UserDao ud=new UserDao();
//获取queryRunner对象
QueryRunner qr=JDBCUtils.getQR();
public void add(User u) {
//跳转UserDao
ud.add(u, qr);
}
public List<User> show(PageBean pb) {
return ud.show(pb,qr);
}
public int count1(String username, String sex) {
return ud.count1(username,sex,qr);
}
public List<User> show1(String username, String sex, PageBean pb) {
return ud.show1(username,sex,pb,qr);
}
public User login(String username, String password) {
return ud.login(username, password,qr);
}
}
跳转UserDao写sql语句查询数据库
package com.baidu.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.baidu.domain.PageBean;
import com.baidu.domain.User;
public class UserDao {
public void add(User u, QueryRunner qr) {
//添加语句
String sql="insert into user value(null,?,?,?,?,?,?);";
Object[] o= {u.getUsername(),u.getPassword(),u.getSex(),u.getHobby(),u.getAddr(),u.getImg()};
try {
qr.update(sql,o);
} catch (SQLException e) {
e.printStackTrace();
}
}
public int count(QueryRunner qr) {
String sql="select count(*) from user;";
try {
//ScalarHandler:将单个值封装、例如select count(*),求内容的条数
//如果查出结果为空,返回0,不是null
Object o = qr.query(sql, new ScalarHandler());
//int i = (int) qr.query(sql, new ScalarHandler());
return Integer.parseInt(o.toString());
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
public List<User> show(PageBean pb, QueryRunner qr) {
String sql="select * from user limit ?,?;";
/*
* Select * from xx limit x,y;
* X:(page-1)*tr
* Y:tr
* */
Object[]o={(pb.getPage()-1)*pb.getTr() , pb.getTr()};
try {
//返回数组
List<User>list=qr.query(sql, new BeanListHandler<User>(User.class),o);
return list;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public int count1(String username, String sex, QueryRunner qr) {
String sql="select * from user where username like ? and sex=?;";
Object[] o={"%"+username+"%",sex};
try {
//ScalarHandler:将单个值封装、例如select count(*),求内容的条数
//如果查出结果为空,返回0,不是null
Object obj = qr.query(sql, new ScalarHandler(),o);
//int i = (int) qr.query(sql, new ScalarHandler());
return Integer.parseInt(obj.toString());
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
public List<User> show1(String username, String sex, PageBean pb, QueryRunner qr) {
String sql="select * from user where username like ? and sex=? limit ?,?;";
/*
* Select * from xx limit x,y;
* X:(page-1)*tr
* Y:tr
* */
Object[]o={"%"+username+"%",sex,(pb.getPage()-1)*pb.getTr() , pb.getTr()};
try {
//返回数组
List<User>list=qr.query(sql, new BeanListHandler<User>(User.class),o);
return list;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public User login(String username, String password, QueryRunner qr) {
String sql = "select * from user where username=? and password=?;";
Object[] o = { username, password };
try {
return qr.query(sql, new BeanHandler<User>(User.class), o);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
登录.jsp
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body background="1.jpeg">
姓名:<input id="username"><br>
密码:<input id="password"><br>
<input type="button" value="登录" id="submit">
<a href="${pageContext.request.contextPath }/register.jsp">注册</a>
</body>
<script type="text/javascript" src="jq.js"></script>
<script type="text/javascript">
$("#submit").click(function(){
var un = $("#username").val();
var pw = $("#password").val();
$.post("/day03/LoginServlet",{username:un,password:pw},function(msg){;
if(msg=="true"){
location.href="/day03/ShowServlet";
}else{
alert("账号或密码错误!");
}
});
});
</script>
</html>
LoginServlet
package com.baidu.servlet;
import java.io.IOException;
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.baidu.dao.UserDao;
import com.baidu.domain.User;
import com.baidu.service.UserService;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理中文乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username=request.getParameter("username");
String password=request.getParameter("password");
UserService us=new UserService();
User u =us.login(username,password);
if(u == null)
{
response.getWriter().write("false");
}else {
request.getSession().setAttribute("u", u);
response.getWriter().write("true");
}
}
/**
* @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);
}
}
跳转UserService
跳转UserDao