现在很多web项目都能用到登录界面,其实想要实现也不难,只要运用一下我们之前记录的笔记,可以做出一个非常简单的注册登录效果。
如果ItellJ IDEA中写JSP页面时out.print()报错误,请跳转页面解决!
步骤说明:
1、代码请参考—— 第十二篇JDBC操作数据库之验证码校验。2、在第十二篇基础上继续实现功能——第十三篇JDBC操作数据库之注册用户。
一.registerUser.jsp
1.使用js实现验证功能function reg(form)
2.使用js功能实现图片更换function change()
3.由于简单验证,并没有使用正则表达式.
4.密码为了测试并没有显示为“*”
5.头像只是两张图片,位于images/**.png
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>用户注册</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="css/userStyle.css">
<script type="text/javascript">
function reg(form){
if(form.username.value == ""){
alert("用户名不能为空!");
return false;
}
if(form.password.value == ""){
alert("密码不能为空!");
return false;
}
if(form.repassword.value == ""){
alert("确认密码不能为空!");
return false;
}
if(form.password.value != form.repassword.value){
alert("两次密码输入不一致!");
return false;
}
if(form.tel.value == ""){
alert("联系电话不能为空!");
return false;
}
if(form.email.value == ""){
alert("电子邮箱不能为空!");
return false;
}
}
function change(){
var photo = document.getElementById("photo");
var photoImg = document.getElementById("photoImg");
photoImg.src = photo.value;
}
</script>
</head>
<body>
<div class="head">用户注册</div>
<div class="div1">
<ul>
<li><a href="registerUser.jsp"> 用户注册 |</a></li>
<li><a href="loginUser.jsp"> 用户登录 |</a> </li>
<li><a href="message.jsp"> 当前用户 |</a></li>
<li><a href="ExitLogin"> 退出登录 |</a></li>
<li><a href="#"> 真的没了 |</a></li>
</ul>
</div>
<div class="divreg">
<form action="<%=request.getContextPath()%>/Register" method="post" οnsubmit="return reg(this)">
<table align="center" width="450" border="0">
<tr>
<td align="right">用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="text" name="password"></td>
</tr>
<tr>
<td align="right">确定密码:</td>
<td><input type="text" name="repassword"></td>
</tr>
<tr>
<td align="right">性别:</td>
<td>
<input type="radio" name="sex" value="男" checked="checked">男
<input type="radio" name="sex" value="女">女
</td>
</tr>
<tr>
<td align="right">头像:</td>
<td>
<select name="photo" id="photo" οnchange="change();">
<option value="images/boy.png" selected="selected">boy</option>
<option value="images/girl.png">girl</option>
</select>
<img id="photoImg" src="images/boy.png">
</td>
</tr>
<tr>
<td align="right">联系电话:</td>
<td><input type="text" name="tel"></td>
</tr>
<tr>
<td align="right">电子邮箱:</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
二.User.java
package com.entity;
/**
* Created by Ray on 2018/3/14 0013.
**/
public class User {
private int id; //编号
private String username; //用户
private String password; //密码
private String sex; //性别
private String tel; //电话
private String photo; //头像
private String email; //邮箱
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
三.UserDao.java
1.判断用户名在数据库中是否存在
2.新增用户
package com.model;
import com.dbutil.Dbconn;
import com.entity.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* Created by Ray on 2018/3/14 0014.
**/
public class UserDao {
User user = null;
Dbconn dbconn = new Dbconn();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
/**
* @Author: Ray
* @Date: 2018/3/14 0014
* @Description: 判断用户名在数据库中是否存在
* @Return: boolean
*/
public boolean userIsExist(String username){
//获取数据库连接
connection = dbconn.getConnection();
//根据用户名查询的sql语句
String sql = "select * from user where username = ?";
try{
//获取PreparedStatement对象
preparedStatement= connection.prepareStatement(sql);
//对占位符进行动态赋值
preparedStatement.setString(1,username);
//执行查询并获取结果集
resultSet = preparedStatement.executeQuery();
//判断结果集是否有效
if(!resultSet.next()){
//如果无效则证明此用户名可用
return true;
}
//释放资源
resultSet.close();
preparedStatement.close();
}catch (Exception e){
e.printStackTrace();
}
return false;
}
/**
* @Author: Ray
* @Date: 2018/3/14 0014
* @Description: 新增用户
* @Return:
*/
public void addUser(User user){
//获取数据库连接
connection = dbconn.getConnection();
//新增用户信息的sql语句
String sql = "insert into user(username,password,sex,tel,photo,email) values (?,?,?,?,?,?)";
try{
//获取PreparedStatement对象
preparedStatement = connection.prepareStatement(sql);
//对占位符进行动态赋值
preparedStatement.setString(1,user.getUsername());
preparedStatement.setString(2,user.getPassword());
preparedStatement.setString(3,user.getSex());
preparedStatement.setString(4,user.getTel());
preparedStatement.setString(5,user.getPhoto());
preparedStatement.setString(6,user.getEmail());
//执行新增操作
preparedStatement.executeUpdate();
//释放资源
preparedStatement.close();
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
四.Register.java
1.获取input标签name属性的值
2.username输出到控制台,防止中文出现乱码
3.判断用户名是否存在
package com.control;
import com.entity.User;
import com.model.UserDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by Ray on 2018/3/14 0014.
**/
public class Register extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取input name值
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String photo = request.getParameter("photo");
String tel = request.getParameter("tel");
String email = request.getParameter("email");
//username输出到控制台
System.out.println("username = " + username);
//调用模型
UserDao userDao = new UserDao();
if(username != null){
//判断用户名在数据库中是否存在
if(userDao.userIsExist(username)){
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setSex(sex);
user.setPhoto(photo);
user.setTel(tel);
user.setEmail(email);
//执行新增操作
userDao.addUser(user);
request.setAttribute("info","恭喜,注册成功!<br>");
}else{
request.setAttribute("info","错误:此用户名已存在!<br>");
}
}
request.getRequestDispatcher("message.jsp").forward(request,response);
}
}
五.message.jsp
1.接收提示信息
2.输出到页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page import="com.entity.User" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>提示信息</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="css/userStyle.css">
</head>
<body>
<div class="head">提示信息</div>
<div class="div1">
<ul>
<li><a href="registerUser.jsp"> 用户注册 |</a></li>
<li><a href="loginUser.jsp"> 用户登录 |</a></li>
<li><a href="message.jsp"> 当前用户 |</a></li>
<li><a href="ExitLogin"> 退出登录 |</a></li>
<li><a href="#"> 真的没了 |</a></li>
</ul>
</div>
<div class="out">
<%
//获取提示信息
String info = String.valueOf(request.getAttribute("info"));
//如果提示信息不为空,则输出提示信息
if (info != "null") {
out.print(info);
}
%>
</div>
</body>
</html>
六.userStyle.css
1.位于webapp/css
@CHARSET "UTF-8";
body {
margin: 0px;
padding: 0px;;
font-size: 12px;
}
.border{
width: 500px;
height: 500px;
}
.head{
font-size: 36px;
font-weight: bold;
margin: 30px 0 0 130px ;
}
td{
font-size: 12px;
}
.div1 ul li{
list-style-type: none;
float: left;
margin: 20px 20px 0 0;
}
.div2{
margin: 100px 0 0 -80px;
}
.divreg{
float: left;
margin: 100px 0 0 -400px;
}
.divmsg{
float: left;
margin: -10px 0 0 -120px;
}
.out{
margin: 100px 0 0 150px;
}
a:link{
font-family:Verdana;
font-size:12px;
color:black;
text-decoration: underline;
}
a:hover{
font-family:Verdana;
font-size:12px;
color:red;
text-decoration:none;
}
a:visited{
font-family:Verdana;
font-size:12px;
color:black;
text-decoration: underline;
}
七.web.xml
1.注意对应的Servlet
2.由于不会用到页面拦截,所以注释了.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>BookList</servlet-name>
<servlet-class>com.control.BookList</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookList</servlet-name>
<url-pattern>/BookList</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookAdd</servlet-name>
<servlet-class>com.control.BookAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookAdd</servlet-name>
<url-pattern>/BookAdd</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookUpdate</servlet-name>
<servlet-class>com.control.BookUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookUpdate</servlet-name>
<url-pattern>/BookUpdate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDoUpdate</servlet-name>
<servlet-class>com.control.BookDoUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDoUpdate</servlet-name>
<url-pattern>/BookDoUpdate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDelete</servlet-name>
<servlet-class>com.control.BookDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDelete</servlet-name>
<url-pattern>/BookDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookDoDelete</servlet-name>
<servlet-class>com.control.BookDoDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookDoDelete</servlet-name>
<url-pattern>/BookDoDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookBatchAdd</servlet-name>
<servlet-class>com.control.BookBatchAdd</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookBatchAdd</servlet-name>
<url-pattern>/BookBatchAdd</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookBatchDelete</servlet-name>
<servlet-class>com.control.BookBatchDelete</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookBatchDelete</servlet-name>
<url-pattern>/BookBatchDelete</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BookFind</servlet-name>
<servlet-class>com.control.BookFind</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookFind</servlet-name>
<url-pattern>/BookFind</url-pattern>
</servlet-mapping>
<!--验证码功能-->
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.control.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DrawImage</servlet-name>
<servlet-class>com.control.DrawImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DrawImage</servlet-name>
<url-pattern>/DrawImage</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class>com.control.Register</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Register</servlet-name>
<url-pattern>/Register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginUser</servlet-name>
<servlet-class>com.control.LoginUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginUser</servlet-name>
<url-pattern>/LoginUser</url-pattern>
</servlet-mapping>
<!--登录拦截-->
<!--<filter>-->
<!--<filter-name>LoginFilter</filter-name>-->
<!--<filter-class>com.Filter.LoginFilter</filter-class>-->
<!--<init-param>-->
<!--<param-name>noLoginPaths</param-name>-->
<!--<param-value>registerUser.jsp;bookList.css;userStyle.css;loginSql.jsp;login.jsp;fail.jsp;Login;ErrorFilter;DrawImage</param-value>-->
<!--</init-param>-->
<!--</filter>-->
<!--<filter-mapping>-->
<!--<filter-name>LoginFilter</filter-name>-->
<!--<url-pattern>/*</url-pattern>-->
<!--</filter-mapping>-->
<!--配置过滤器-->
<filter>
<filter-name>CharSetFilter</filter-name>
<filter-class>com.Filter.CharSetFilter</filter-class>
<init-param>
<!--用来指定一个具体的字符集-->
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!--映射过滤器-->
<filter-mapping>
<filter-name>CharSetFilter</filter-name>
<!--“/*”表示拦截所有的请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--拦截404,500页面-->
<error-page>
<error-code>404</error-code>
<location>/error/error404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error500.jsp</location>
</error-page>
<filter>
<filter-name>ErrorFilter</filter-name>
<filter-class>com.Filter.ErrorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ErrorFilter</filter-name>
<url-pattern>/error.jsp</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
</web-app>
八.页面效果