一、功能
(1)登录功能
(2)注册功能
(3)留言功能([1].先把数据存入数据库[2].再从数据库里取出刚存入的数据)
二、相关技术
前端:js、ajax、jstl、css、jquery、jsp
后台:java、mysql
三、演示
1、我事先建立好的数据库表
(1)user表:
(2)message表:
2.客户端的访问操作
(1)进入登录页面(http://localhost:8080/Liuyan/login.jsp)
(2)新用户没有账户,需要注册一个
注册成功后跳登录页面
(3)去user表里查看验证,发现一致对的
(4)用注册成功的账号小华去登录
(5) 登录成功后进主页
(6)小华给杨纸画留言,然后点留言按钮
(8)到message表里查看验证,完全正确
四、工程布局图
五、代码
1、com.oracle.dao包:
package com.oracle.dao;
import java.util.List;
import com.oracle.vo.Message;
public interface MessageDao {
//插入数据
public boolean addMessage(Message m)throws Exception;
//查询
public List<Message> searAll()throws Exception;
}
===============
package com.oracle.dao;
import java.util.List;
import com.oracle.vo.User;
public interface UserDao {
//插入数据
public boolean addUser(User user)throws Exception;
//查询
public User searchByunameandpwd(String uname,String pw)throws Exception;
public List<User> searchAll()throws Exception;
public String cartoon(String uname)throws Exception;
//根据人名查询
public User searchByName(String uname) throws Exception;
}
2、com.oracle.daoImpl包:
package com.oracle.daoImpl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.oracle.dao.MessageDao;
import com.oracle.util.DBTools;
import com.oracle.vo.Message;
import com.oracle.vo.User;
public class MessageDaoImpl implements MessageDao {
@Override
public boolean addMessage(Message m) throws Exception {
String sql = "insert into message(id,fromName,fromImg,toName,toImg,messDate,content)values(null,?,?,?,?,now(),?)";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, m.getFromName());
ps.setString(2, m.getFromImg());
ps.setString(3, m.getToName());
ps.setString(4, m.getToImg());
ps.setString(5, m.getContent());
int result = ps.executeUpdate();
return result > 0 ? true : false;
}
@Override
public List<Message> searAll() throws Exception {
String sql = "select * from message";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
List<Message> list = new ArrayList<>();
Message m = null;
while(rs.next()) {
m = new Message();
m.setContent(rs.getString("content"));
m.setFromImg(rs.getString("fromImg"));
m.setFromName(rs.getString("fromName"));
m.setId(rs.getInt("id"));
m.setMessDate(rs.getTimestamp("messDate"));
m.setToImg(rs.getString("toImg"));
m.setToName(rs.getString("toName"));
list.add(m);
}
return list;
}
}
=======================
package com.oracle.daoImpl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.oracle.dao.UserDao;
import com.oracle.util.DBTools;
import com.oracle.vo.User;
public class UserDaoImpl implements UserDao {
@Override
public boolean addUser(User user) throws Exception {
String sql = "insert into user(id,uname,password,gender,age,phone,birthday,hobby,cartoon)values(null,?,?,?,?,?,?,?,?)";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user.getUname());
ps.setString(2, user.getPassword());
ps.setInt(3, user.getGender());
ps.setInt(4, user.getAge());
ps.setString(5, user.getPhone());
ps.setDate(6, user.getBirthday());
ps.setString(7, Arrays.toString(user.getHobby()).replace("[", "").replace("]", ""));
ps.setString(8, user.getCartoon());
int result = ps.executeUpdate();
return result > 0 ? true : false;
}
@Override
public User searchByunameandpwd(String uname, String pw) throws Exception {
String sql = "select * from user where uname = ? and password = ?";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, uname);
ps.setString(2, pw);
ResultSet rs = ps.executeQuery();
User user = null;
while(rs.next()) {
user = new User();
user.setAge(rs.getInt("age"));
user.setBirthday(rs.getDate("birthday"));
user.setCartoon(rs.getString("cartoon"));
user.setGender(rs.getInt("gender"));
user.setHobby(rs.getString("hobby").split(","));
user.setId(rs.getInt("id"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
user.setUname(rs.getString("uname"));
}
return user;
}
@Override
public List<User> searchAll() throws Exception {
String sql = "select * from user";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
List<User> list = new ArrayList<>();
User user = null;
while(rs.next()) {
user = new User();
user.setAge(rs.getInt("age"));
user.setBirthday(rs.getDate("birthday"));
user.setCartoon(rs.getString("cartoon"));
user.setGender(rs.getInt("gender"));
user.setHobby(rs.getString("hobby").split(","));
user.setId(rs.getInt("id"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
user.setUname(rs.getString("uname"));
list.add(user);
}
return list;
}
@Override
public String cartoon(String uname) throws Exception {
String sql = "select cartoon from user where uname = ?";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, uname);
ResultSet rs = ps.executeQuery();
String cartoon = null;
while(rs.next()) {
cartoon = rs.getString("cartoon");
}
return cartoon;
}
@Override
public User searchByName(String uname) throws Exception {
String sql = "select * from user where uname = ?";
Connection conn = DBTools.getLocalConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, uname);
ResultSet rs = ps.executeQuery();
User user = null;
while(rs.next()) {
user = new User();
user.setAge(rs.getInt("age"));
user.setBirthday(rs.getDate("birthday"));
user.setGender(rs.getInt("gender"));
user.setHobby(rs.getString("hobby").split(","));
user.setId(rs.getInt("id"));
user.setCartoon(rs.getString("cartoon"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
user.setUname(rs.getString("uname"));
}
return user;
}
}
3、com.oracle.service包:
package com.oracle.service;
import java.util.List;
import com.oracle.vo.Message;
public interface MessageService {
//插入数据
public boolean addMessage(Message m)throws Exception;
//获得
public List<Message> getAll()throws Exception;
}
===============================
package com.oracle.service;
import java.util.List;
import com.oracle.vo.User;
public interface UserService {
//注册
public boolean register(User user)throws Exception;
//登录
public User login(String uname,String pw)throws Exception;
//获得
public List<User> getAll()throws Exception;
public String cartoon(String uname)throws Exception;
public User searchByName(String uname) throws Exception;
}
4、com.oracle.serviceImpl包:
package com.oracle.serviceImpl;
import java.util.List;
import com.oracle.dao.MessageDao;
import com.oracle.daoImpl.MessageDaoImpl;
import com.oracle.service.MessageService;
import com.oracle.vo.Message;
public class MessageServiceImpl implements MessageService {
MessageDao messagedao = new MessageDaoImpl();
@Override
public boolean addMessage(Message m) throws Exception {
// TODO Auto-generated method stub
return messagedao.addMessage(m);
}
@Override
public List<Message> getAll() throws Exception {
return messagedao.searAll();
}
}
==========================
package com.oracle.serviceImpl;
import java.util.List;
import com.oracle.dao.UserDao;
import com.oracle.daoImpl.UserDaoImpl;
import com.oracle.service.UserService;
import com.oracle.vo.User;
public class UserServiceImpl implements UserService {
UserDao userdao = new UserDaoImpl();
@Override
public boolean register(User user) throws Exception {
return userdao.addUser(user);
}
@Override
public User login(String uname, String pw) throws Exception {
// TODO Auto-generated method stub
return userdao.searchByunameandpwd(uname, pw);
}
@Override
public List<User> getAll() throws Exception {
return userdao.searchAll();
}
@Override
public String cartoon(String uname) throws Exception {
return userdao.cartoon(uname);
}
@Override
public User searchByName(String uname) throws Exception {
return userdao.searchByName(uname);
}
}
5、com.oracle.servlet包:
package com.oracle.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oracle.service.UserService;
import com.oracle.serviceImpl.UserServiceImpl;
import com.oracle.util.BeanUtil;
import com.oracle.vo.User;
public class UserServlet extends HttpServlet {
UserService us = new UserServiceImpl();
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
ServletContext sc = config.getServletContext();//获取servlet上下文,全局可用
try {
List<User> users = us.getAll();
sc.setAttribute("users", users);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String flag = request.getParameter("flag");
if("login".equals(flag)) {
String un = request.getParameter("uname");
String pw = request.getParameter("password");
User user = null;
try {
user = us.login(un, pw);
if(null != user) {
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("messageservlet").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if("checkName".equals(flag)) {
String un = request.getParameter("uname");
try {
User user = us.searchByName(un);
if(null != user) {
response.getWriter().write("success");
}else {
response.getWriter().write("error");
}
} catch (Exception e) {
e.printStackTrace();
}
}else if("register".equals(flag)) {
User user = new User();
BeanUtil.getBean(user, request);
try {
boolean createUser = us.register(user);
if(createUser) {
request.getRequestDispatcher("login.jsp").forward(request, response);
}else {
request.getRequestDispatcher("register.jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
====================
package com.oracle.servlet;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oracle.service.MessageService;
import com.oracle.service.UserService;
import com.oracle.serviceImpl.MessageServiceImpl;
import com.oracle.serviceImpl.UserServiceImpl;
import com.oracle.vo.Message;
import com.oracle.vo.User;
public class MessageServlet extends HttpServlet {
MessageService ms = new MessageServiceImpl();
UserService us = new UserServiceImpl();
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String flag = request.getParameter("flag");
if("add".equals(flag)) {
String content = request.getParameter("content");
String toName = request.getParameter("toName");
User u = (User) request.getSession().getAttribute("user");
String toImg = null;
try {
toImg = us.cartoon(toName);
} catch (Exception e) {
e.printStackTrace();
}
Message m = new Message();
m.setFromImg(u.getCartoon());
m.setFromName(u.getUname());
m.setToImg(toImg);
m.setToName(toName);
m.setContent(content);
try {
ms.addMessage(m);
} catch (Exception e) {
e.printStackTrace();
}
response.sendRedirect("messageservlet");//只能用重定向
}else {
try {
List<Message> messages = ms.getAll();
request.setAttribute("messages", messages);
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
6、com.oracle.util包:
package com.oracle.util;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtil {
public static Object getBean(Object obj,HttpServletRequest req) {
try {
BeanUtils.populate(obj, req.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
==============================
package com.oracle.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBTools {
public static final String URL = "jdbc:mysql://localhost:3306/info_?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
private static ThreadLocal<Connection> local = new ThreadLocal<Connection>();
public static Connection getLocalConn() throws Exception {
Connection conn = local.get();
if(null == conn) {
local.set(DBTools.getConn());
conn = local.get();
}
return conn;
}
public static Connection getConn() throws Exception {
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return connection;
}
public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
rs.close();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
7、com.oracle.vo包:
package com.oracle.vo;
import java.io.Serializable;
import java.sql.Timestamp;
public class Message implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String fromName;
private String fromImg;
private String toName;
private String toImg;
private Timestamp messDate;
private String content;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFromName() {
return fromName;
}
public void setFromName(String fromName) {
this.fromName = fromName;
}
public String getFromImg() {
return fromImg;
}
public void setFromImg(String fromImg) {
this.fromImg = fromImg;
}
public String getToName() {
return toName;
}
public void setToName(String toName) {
this.toName = toName;
}
public String getToImg() {
return toImg;
}
public void setToImg(String toImg) {
this.toImg = toImg;
}
public Timestamp getMessDate() {
return messDate;
}
public void setMessDate(Timestamp timestamp) {
this.messDate = timestamp;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Message [id=" + id + ", fromName=" + fromName + ", fromImg=" + fromImg + ", toName=" + toName
+ ", toImg=" + toImg + ", messDate=" + messDate + ", content=" + content + "]";
}
}
=======================
package com.oracle.vo;
import java.io.Serializable;
import java.sql.Date;
import java.util.Arrays;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String uname;
private String password;
private Integer gender;
private Integer age;
private String phone;
private Date birthday;
private String[] hobby;
private String cartoon;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getCartoon() {
return cartoon;
}
public void setCartoon(String cartoon) {
this.cartoon = cartoon;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "User [id=" + id + ", uname=" + uname + ", password=" + password + ", gender=" + gender + ", age=" + age
+ ", phone=" + phone + ", birthday=" + birthday + ", hobby=" + Arrays.toString(hobby) + ", cartoon="
+ cartoon + "]";
}
}
8、css
1)main.css
a {
text-decoration: none;
}
#mess {
border: 2px solid white;
size: 9px;
width: 600px;
}
textarea{
position: absolute;
right: 560px;
}
img{
width: 30px;
height: 30px;
}
======================
2)register.css
img {
width: 40px;
height: 40px;
}
9、js
1)checkName.js
function checkName(a) {
var xhr = new XMLHttpRequest();
// 建立连接
xhr.open("GET", "userservlet?flag=checkName&uname=" + a, true);
// 发送请求
xhr.send();
var sub = document.getElementById("sub");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var b = xhr.responseText;
if (b == "success") {
document.getElementById("sp").innerHTML = "<span style='color: green'>√</span>"
sub.removeAttribute("disabled");
} else {
document.getElementById("sp").innerHTML = "<span style='color: red'>×</span>"
// 让登陆按钮 失效
sub.setAttribute("disabled", true);
}
}
}
}
10、jsp
1)login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="top.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<form action="userservlet" method="post">
<input type="hidden" name="flag" value="login">
<tr>
<td>用户名:</td>
<td><input type="text" onblur="checkName(this.value)" name="uname" placeholder="用户名/手机/邮箱"><span id="sp"></span></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="password" placeholder="密码"></td>
</tr>
<tr>
<td><input id="sub" type="submit" value="登陆" disabled="disabled"></td>
<td><a href="register.jsp">注册</a></td>
</tr>
</form>
</table>
</body>
<script type="text/javascript" src="js/checkName.js"></script>
</html>
2)main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="top.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<link rel="stylesheet" href="css/main.css" type="text/css">
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<div>
<c:if test="${user != null }">
欢迎${user.uname }<img alt="图片已损坏" src="${user.cartoon }">登录 请留言...
</c:if>
<c:if test="${user == null }">
欢迎来到留言板,留言请<a href="login.jsp">登录</a>
</c:if>
</div>
<hr color="red" size="5px">
<div id="mess">
<c:forEach items="${messages }" var="m">
<img alt="图片已损坏" src="${m.fromImg }">${m.fromName }====>
<img alt="图片已损坏" src="${m.toImg }">${m.toName }:${m.content }${m.messDate }<a href="#">delete</a><br/>
</c:forEach>
</div>
<hr color="red" size="5px">
<div>
<form action="messageservlet" method="get">
<input type="hidden" name="flag" value="add">
发送给
<select name="toName">
<c:forEach items="${users }" var="u">
<c:if test="${user.uname != u.uname}">
<option value="${u.uname }">${u.uname }</option>
</c:if>
</c:forEach>
</select>
颜色: <select>
<option>红色</option>
<option>绿色</option>
<option>蓝色</option>
</select>
<br/>
<textarea rows="10" cols="60" name="content"></textarea><br/>
<input type="submit" value="留言">
</form>
</div>
</body>
</html>
3)register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="top.jsp"%>
<!DOCTYPE html>
<!-- <input type="image" src="image\2.png"> -->
<html>
<head>
<base href="<%=basePath%>">
<link rel="stylesheet" style="text/css" href="css/register.css">
<meta charset="UTF-8">
<title>注册页面··</title>
</head>
<body>
欢迎注册:
<form action="userservlet" method="get">
<input type="hidden" name="flag" value="register"><br/>
用户名:<input type="text" name="uname" onblur="CheckName(this.value)"><span id="sp"></span><br/>
密 码:<input type="password" name="password"><br/>
性 别:<input type="radio" name="gender" value="1">女
<input type="radio" name="gender" value="0">男<br/>
年 龄:<input type="text" name="age"><br/>
手机号:<input type="text" name="phone"><br/>
生 日:<input type="date" name="birthday"><br/>
爱 好:<input type="checkbox" name="hobby" value="java">java
<input type="checkbox" name="hobby" value="oracle">oracle
<input type="checkbox" name="hobby" value="mysql">mysql
<input type="checkbox" name="hobby" value="html">html
<input type="checkbox" name="hobby" value="jsp">jsp<br/>
头 像: <input type="radio" name="cartoon" value="image/1.ico">
<img alt="图片已损坏" src="image/1.ico">
<input type="radio" name="cartoon" value="image/01.gif">
<img alt="图片已损坏" src="image/01.gif">
<input type="radio" name="cartoon" value="image/02.gif">
<img alt="图片已损坏" src="image/02.gif">
<input type="radio" name="cartoon" value="image/03.gif">
<img alt="图片已损坏" src="image/03.gif">
<input type="radio" name="cartoon" value="image/05.gif">
<img alt="图片已损坏" src="image/05.gif">
<input type="radio" name="cartoon" value="image/06.gif">
<img alt="图片已损坏" src="image/06.gif"> <br/>
<input type="submit" value="注册" >
<input type="reset" value="重置"><br/>
</form>
</body>
<script type="text/javascript">
function CheckName(a){
//需要 使用 ajax完成 局部刷新 技术 , 首先必须 创建 XMLHttpRequest对象
var xmlhttp = new XMLHttpRequest();
//建立连接
xmlhttp.open("GET","userservlet?flag=checkName&uname="+a,true);// 与 ajax 引擎 建立 连接
//发送请求
xmlhttp.send(); //发送
//获取响应
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var b = xmlhttp.responseText;//这就是我 响应的结果
if(b == "success"){
document.getElementById("sp").innerHTML = "<span style='color: red'>×</span>";
}else{
document.getElementById("sp").innerHTML = "<span style='color: green'>√</span>";
}
}
}
}
</script>
</html>
4)top.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>