源码和数据库下载地址:http://download.csdn.net/detail/biexiansheng/9759722

1:首先需要设计好数据库和数据表,这里简单截图说明我创建的字段和类型。

2:进入正题,开始开发前台和后台代码。首先创建一个动态web工程,然后先创建一个实体类。

 package com.bie.po;
/**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午9:59:03
* 用户的实体类
*/
public class User { private Integer id;
private String name;
private String password;
private String email;
private String phone;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
} //重写toString 方法
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
+ "]";
} }

3:然后创建login.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>用户登陆页面</title>
<style type="text/css">
h1{text-align:left;}
h4{text-align:left;color:red;}
body{background:url(images/1.png)}
a{text-decoration:none;font-size:20px;color:black;}
a:hover{text-decoration:underline;font-size:24px;color:red;}
</style> </head>
<body>
<form action="user/userlogin" method="post">
<h1>用户登陆页面</h1>
<h4>装饰中......</h4>
<hr/>
<table align="left">
<tr>
<td>账号:</td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" id="password"></td>
</tr>
<tr>
<td colspan="1">
</td>
<td>
<input type="submit" value="登陆"/>
<input type="reset" value="重置"/>
<a href="register.jsp" target="_blank">注册</a>
</td>
</tr>
</table>
</form>
</body>
</html>

4:再创建注册页面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>注册的页面</title>
<style type="text/css">
h1{text-align:center;}
h4{text-align:right;color:red;}
body{background:url(images/2.png)}
</style> <script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//alert("测试jQuery是否能用");
$("#form1").submit(function(){
var name=$("#name").val();//获取提交的值
if(name.length==0){//进行判断,如果获取的值为0那么提示账号不能为空
//alert("aa");//测试使用
$("#nameError").html("账号不能为空");
return false;
} //密码进行验证不能为空
var password=$("#password").val();//获取提交的密码的值
if(password.length==0){
$("#passwordError").html("密码不能为空");
return false;
} //确认密码进行验证
var relpassword=$("#relpassword").val();//获取提交的确认密码的值
if(relpassword.length==0){
$("#relpasswordError").html("确认密码不能为空哦");
return false;
} if(password!=relpassword){
$("#relpasswordError").html("确认密码输入不正确,请重新输入");
return false;
}
}); });
</script>
</head>
<body>
<form action="user/userregister" method="post" id="form1">
<h1>用户注册页面</h1>
<h4>装饰中......</h4>
<hr/>
<table align="center">
<tr>
<td>账&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</td>
<td>
<input type="text" name="name" id="name"/>
<div id="nameError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:</td>
<td>
<input type="password" name="password" id="password">
<div id="passwordError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>确认密码:</td>
<td>
<input type="password" name="relpassword" id="relpassword">
<div id="relpasswordError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>电话号码:</td>
<td><input type="text" name="phone" id="phone"></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td colspan="1">
</td>
<td>
<input type="submit" value="注册"/>
<input type="reset" value="重置"/>
<a href="login.jsp" target="_blank">登陆</a>
</td>
</tr>
</table>
</form>
</body>
</html>

5:再创建utils层,公共的工具层BaseDao.java;

 package com.bie.utils;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:01:14
* 数据交互层dao层
*/
public class BaseDao { private static String driver;//数据库驱动
private static String url;//数据库路径,找到对应的数据库
private static String user;//数据库账号
private static String password;//数据库密码 static{
driver=ResourceBundle.getBundle("db").getString("driver");
url=ResourceBundle.getBundle("db").getString("url");
user=ResourceBundle.getBundle("db").getString("user");
password=ResourceBundle.getBundle("db").getString("password");
}
/*private static String driver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql:///test";
private static String user="root";
private static String password="123456";*/ /***
* 连接数据库的方法
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getCon() throws ClassNotFoundException, SQLException{
Class.forName(driver);//加载数据库驱动
System.out.println("测试加载数据库成功");
Connection con=DriverManager.getConnection(url, user, password);
System.out.println("测试数据库链接成功");
return con;
} /***
* 关闭数据库的方法
* @param con
* @param ps
* @param rs
*/
public static void close(Connection con,PreparedStatement ps,ResultSet rs){
if(rs!=null){//关闭资源,避免出现异常
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} /***
* 同意增删改的方法
* @param sql
* @param arr
* @return
*/
public static boolean addUpdateDelete(String sql,Object[] arr){
Connection con=null;
PreparedStatement ps=null;
try {
con=BaseDao.getCon();//第一步 :连接数据库的操作
ps=con.prepareStatement(sql);//第二步:预编译
//第三步:设置值
if(arr!=null && arr.length!=0){
for(int i=0;i<arr.length;i++){
ps.setObject(i+1, arr[i]);
}
}
int count=ps.executeUpdate();//第四步:执行sql语句
if(count>0){
return true;
}else{
return false;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
} /*public static void main(String[] args) {
try {
BaseDao.getCon();
System.out.println("测试数据库链接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/ }

6:然后创建dao层数据交互层的接口和实现类

 package com.bie.dao;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:38:40
* 创建一个接口用于声明用户登陆注册的方法
*/
public interface UserDao { /***
* 用户登陆的方法声明
* @param user
* @return
*/
public User login(User user); /***
* 用户注册的方法声明
* @param user
* @return
*/
public boolean register(User user);
}
 package com.bie.dao.impl;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import com.bie.dao.UserDao;
import com.bie.po.User;
import com.bie.utils.BaseDao; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:38:56
*
*/
public class UserDaoImpl implements UserDao{ @Override
public User login(User user) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//1:获取数据库的连接
//2:书写sql语句
String sql="select * from user where name=? and password=? ";
ps=con.prepareStatement(sql);//3:预编译
//4:设置值
ps.setString(1, user.getName());
ps.setString(2, user.getPassword());
rs=ps.executeQuery();//5:执行sql语句
User users=null;
if(rs.next()){
users=new User();
//从数据库中获取值设置到实体类的setter方法中
users.setId(rs.getInt("id"));
users.setName(rs.getString("name"));
users.setPassword(rs.getString("password"));
users.setEmail(rs.getString("email"));
users.setPhone(rs.getString("phone")); return user;
}else{
return null;
} } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} /***
* 插入的方法,即注册
*/
@Override
public boolean register(User user) {
String sql="insert into user values(0,?,?,?,?) ";
List<Object> list=new ArrayList<Object>();
list.add(user.getName());
list.add(user.getPassword());
list.add(user.getEmail());
list.add(user.getPhone()); boolean flag=BaseDao.addUpdateDelete(sql,list.toArray());
if(flag){
return true;
}else{
return false;
}
} }

7:再创建servlet层进行登陆的业务逻辑处理(由于省去了service层,所以在servlet层进行业务逻辑处理了)

 package com.bie.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.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:49:44
*
*/
@WebServlet("/user/userlogin")
public class UserLoginServlet extends HttpServlet{ private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User user=new User();
//获取login.jsp页面提交的账号和密码
String name=request.getParameter("name");
String password=request.getParameter("password");
//测试数据
System.out.println(name+" "+password);
//获取login.jsp页面提交的账号和密码设置到实体类User中
user.setName(name);
user.setPassword(password); //引入数据交互层
UserDao dao=new UserDaoImpl();
User us=dao.login(user);
//测试返回的值
System.out.println(us);
if(us!=null){
request.setAttribute("info", "登陆成功");
}else{
request.setAttribute("info", "登录失败");
} request.getRequestDispatcher("/index/info.jsp").forward(request, response);
} }

8:再创建servlet层进行注册的业务逻辑处理(由于省去了service层,所以在servlet层进行业务逻辑处理了)

 package com.bie.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.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 下午1:34:17
* 注册的servlet
*/
@WebServlet("/user/userregister")
public class UserRegisterServlet extends HttpServlet{ private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User user=new User();
//获取login.jsp页面提交的账号和密码
String name=request.getParameter("name");
String password=request.getParameter("password");
String email=request.getParameter("email");
String phone=request.getParameter("phone"); //获取register.jsp页面提交的账号和密码设置到实体类User中
user.setName(name);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone); //引入数据交互层
UserDao dao=new UserDaoImpl();
boolean flag=dao.register(user);
if(flag){
request.setAttribute("info", "注册成功");
}else{
request.setAttribute("info", "注册失败");
} request.getRequestDispatcher("/index/info.jsp").forward(request, response);
} }

9:为了避免乱码,使用过滤器进行过滤。

 package com.bie.utils;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午11:08:49
*
*/
@WebFilter("/*")
public class UTFFilter implements Filter{ @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain)throws IOException, ServletException {
//将servletRequest转发为HttpServletRequest
HttpServletRequest request=(HttpServletRequest)servletRequest;
request.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

效果如下所示:

jsp+servlet实现最基本的注册登陆功能的更多相关文章

  1. 草草搞了个SERVLET的注册登陆功能

    按书来的,学习阶段,一切都好新奇..至少对比于DJANGO,好像复杂点点,但HTTP的东东,是相通的哈. package cc.openhome.controller; import java.io. ...

  2. 【转载】Django自带的注册登陆功能

    1.登陆 知识点: a.auth.authenticate(username=name值, password=password值) 验证用户名和密码 b.auth.login(request, use ...

  3. 小峰servlet/jsp(3)登陆功能实现

    一.User模型: User.java: package com.java1234.model; public class User { private int id; private String ...

  4. 关于jsp web项目,jsp页面与servlet数据不同步的解决办法(报错404、405等)即访问.jsp和访问web.xml中注册的/servlet/的区别

    报错信息: Type Status Report Message HTTP method GET is not supported by this URL Description The method ...

  5. Java Web项目案例之---登录注册和增删改查(jsp+servlet)

    登录注册和增删改查(jsp+servlet) (一)功能介绍 1.用户输入正确的密码进行登录 2.新用户可以进行注册 3.登录后显示学生的信息表 4.可以添加学生 5.可以修改学生已有信息 6.可以删 ...

  6. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

  7. JSP+Servlet+C3P0+Mysql实现的苹果网上商城

    项目简介 项目来源于:https://github.com/gpengDemo/Estore 本系统基于JSP+Servlet+C3P0+Mysql.涉及技术少,易于理解,适合JavaWeb初学者学习 ...

  8. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  9. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

随机推荐

  1. Python官方操作Excel文档

    xlwt 1.3.0 Downloads ↓ Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 ...

  2. linux系统--磁盘管理命令(二)

    一.硬盘的分区模式 之前的硬盘分区模式为MBR 主分区不超过4个 单个分区容量最大为2TB 前面的分区模式就为MBR分区模式. 另一种分区模式为GPT 主分区个数限制:在GPT的分区表中最多可以支持1 ...

  3. luogu P2508 [HAOI2008]圆上的整点

    传送门 推荐去bzoj看个视频了解一下 不要妄想视频直接告诉你题解 但是视频告诉了你后面要用的东西 首先我们要求的是\(x^2+y^2=n^2(x,y\in Z)\)的\((x,y)\)对数,可以转化 ...

  4. Shiro后台实现验证权限

    今天发现一个问题:使用shiro的时候,虽然隐藏掉了一些菜单,但是当我们通过get请求直接访问菜单的时候还是会访问到,也就是shiro可以在界面实现隐藏一些信息,但是没有真正的根据权限码验证请求,于是 ...

  5. js代码解析原则

    js引擎在读取js代码时会进行两个步骤,第一个步骤是解释,第二个步骤是执行. 解释就是先通篇扫描所有的Js代码,然后把所有声明提升到顶端,第二步是执行,执行就是执行代码的操作. 例: 例子1: < ...

  6. mysql 索引无法使用问题

    今天碰到一个问题,表中有一个索引不使用,怎么强制也没用 ,force index都没用, 后来才发现是类型不对, 比如索引字段是int,如果参数使用varchar,那么是无法使用索引的,参数类型最好统 ...

  7. Git入门——远程仓库及分支管理

    关于本地版本库的操作,请见:Git入门--本地版本库操作 本篇提到的所有命令: 小结 前面提到,Git相对于传统的SVN有着很大的优势,其中之一就在于集中式系统中,版本库只能存在于中央服务器上:而在G ...

  8. BootStrap学习从现在开始

    前言 原文链接 http://aehyok.com/Blog/Detail/6.html 当下最流行的前端开发框架Bootstrap,可大大简化网站开发过程,从而深受广大开发者的喜欢.本文总结了Boo ...

  9. openstack常见问题解决方法总结

    一.创建实例失败: 首先用下面命令查看服务是否正常 1. nova-manage service list 如果不正常,则使用下面命令重启,如果还不行,则查看日志, 1. service nova-a ...

  10. 解决git: 'subtree' is not a git command. See 'git --help'.

    一.第一方法 git clone https://github.com/git/git.git cd git/contrib/subtree sudo make prefix=/usr sudo ma ...