一.数据库db_01   表usert   字段username,password

二. 目录

三. 配置信息

四. 代码

index.jsp

<script type="text/javascript">
function refresh() {
src="index.jsp?id="+Math.random();
}
</script>
<%@ page contentType="charset=UTF-8" language="java"
import ="java.awt.*"
import ="java.awt.image.BufferedImage"
import="java.util.*"
import="javax.imageio.ImageIO"
pageEncoding="gb2312"
%> <%
response.setHeader("Cache-Control","no-cache");
//在内存中创建图像
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics g=image.getGraphics();
//设置背景色
g.setColor(new Color(200,200,200));
g.fillRect(0,0,width,height);
//取随机产生的验证码(4位数字)
Random rnd=new Random();
int randNum=rnd.nextInt(8999)+1000;
String randStr=String.valueOf(randNum);
//将验证码存入session
session.setAttribute("randStr",randStr);
//将验证码显示到图像中
g.setColor(Color.black);
g.setFont(new Font("", Font.PLAIN,20));
g.drawString(randStr,10,17);
//随机产生100个干扰点,使图像中的验证码不易被其他程序探测到
for (int i = 0; i < 100; i++) {
int x=rnd.nextInt(width);
int y=rnd.nextInt(height);
g.drawOval(x,y,1,1);
}
//输出图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
out.clear();
out=pageContext.pushBody(); %>

LoginServlet.jsp

<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" %>
<html>
<head>
<title>LoginServlet</title>
</head>
<body>
<script type="text/javascript">
function validate() {
if(login.username1.value===""){
alert("账号不能为空");
return;
}
if(login.passwd.value===""){
alert("密码不能为空");
return;
}
if(login.code.value===""){
alert("请输入正确的验证码");
return;
}
login.submit();
}
function refresh() {
login.imgValidate.src="index.jsp?id="+Math.random();
}
</script> <form name="login" action="/LoginCl" method="post">
用户名:<input type="text" name="username1"><br>
密码:<input type="password" name="passwd"><br>
<input type="checkbox" name="keep" >两周内免登陆<br>
验证码:<input type="text" name="code" size=10>
<%--点击图片可进行验证码刷新--%>
<img name="imgValidate" src = "index.jsp" onclick="refresh()" ><br> <input type="button" value="登录" onclick="validate()">
<%
String username = null;
String password = null;
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
if ("username".equals(cookies[i].getName())) {
username = cookies[i].getValue();
} else if ("password".equals(cookies[i].getName())) {
password = cookies[i].getValue();
}
}
if (username != null && password != null) {
response.sendRedirect("welcome.jsp?uname=" +URLEncoder.encode(username,"utf-8")+ "&password=" + password);
}
%>
</form> <form action="register.jsp" method="post">
<input type="submit" value="注册">
</form> </body>
</html>

register.jsp

<%@ page language="java" pageEncoding="gb2312" %>
<html>
<head>
<title>register</title>
</head>
<body>
<h1>欢迎您进行注册</h1>
<script language="JavaScript" type="text/javascript">
function checkPassword() {
var ps=/^[A-Za-z0-9]{6,20}$/;
if (!ps.exec(register.password1.value)) {
alert("密码必须同时包含大小写字母和数字且长度应该在6-20之间");
return;
}
register.submit();
}
</script>
<form name="register" action="registerMessage.jsp" method="post">
请输入账号:<input type="text" name="name"><br>
请输入密码:
<input type="password" name="password1">(要求:必须包含大小写英文和数字无非法字符,长度大于6位小于20位)<br>
请选择性别:<input name="sex" type="radio" value="男" checked>男
<input name="sex" type="radio" value="女" >女<br>
请选择家乡:<select name="home" >
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="江西">江西</option>
</select>
<br>
请选择您的爱好:<input name="fav" type="checkbox" value="唱歌">唱歌
<input name="fav" type="checkbox" value="跳舞">跳舞
<input name="fav" type="checkbox" value="打球">打球
<input name="fav" type="checkbox" value="玩游戏">玩游戏<br>
<input type="button" value="注册" onclick="checkPassword()">
</form>
</body>
</html>

registerMessage.jsp

<%@ page import="java.sql.*" %>
<%@ page import="login.Dao.UserDao" %>
<%@ page language="java" pageEncoding="gb2312" %>
<html>
<head>
<title>message</title>
</head>
<body>
<h2>信息注册成功!该用户注册信息如下:</h2>
<%
request.setCharacterEncoding("gb2312");
String name=request.getParameter("name");
String password=request.getParameter("password1");
String sex = request.getParameter("sex");
String home = request.getParameter("home");
out.println("账号:"+name);
out.println("密码:"+password);
out.println("性别:"+sex);
out.println("家乡:"+home);
out.println("兴趣爱好:");
String[] fav = request.getParameterValues("fav");
for (int i = 0; i < fav.length; i++) {
out.print(fav[i]+" ");
}
try {
UserDao userDao=new UserDao();
userDao.insertUser(name,password);
out.println("<br> <a href=LoginServlet.jsp>信息注册成功,点击此处进行登录</a>");
} catch (SQLException e) {
e.printStackTrace();
}
%>
</body>
</html>

Bean层:

Counter.java

package login.Bean;

public class Counter {
private int count=1;
public Counter(){}
public int getCount() {
return count++;
} public void setCount(int count) {
this.count = count;
} }

user.java
package login.Bean;

public class User {
private String name;
private String pd;
public User(){}
public String getPd() {
return pd;
}
public void setPd(String pd) {
this.pd = pd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Dao层:

UserDao.java

package login.Dao;

import java.sql.*;
import java.util.ArrayList; public class UserDao {
public boolean SearchUser(String u,String p) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet rs =null;
Connection con = null;
//启动mysql驱动器
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_01?useUnicode=true&characterEncoding=utf-8", "root", "root");
String sql = "select * from usert where username=? and password=?";
preparedStatement = con.prepareStatement(sql);
preparedStatement.setString(1, u);
preparedStatement.setString(2, p);
rs = preparedStatement.executeQuery();
if(rs.next()){
return true;
}
else {
return false;
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
if(rs!=null) {
rs.close();
}
if(preparedStatement!=null) {
preparedStatement.close();
}
if(con!=null){
System.out.println("数据库连接成功!");
con.close();
}
}
return false;
} public void insertUser(String u,String p) throws SQLException {
ArrayList users=new ArrayList();
PreparedStatement preparedStatement = null;
Connection con = null;
//启动mysql驱动器
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_01?useUnicode=true&characterEncoding=utf-8", "root", "root");
preparedStatement = con.prepareStatement("insert into usert values(?,?)");
preparedStatement.setString(1,u);
preparedStatement.setString(2,p);
preparedStatement.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
if(con!=null) {
con.close();
}
if(preparedStatement!=null) {
preparedStatement.close();
}
}
} }

Register层:

LoginCl.java (servlet)

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.SQLException; @WebServlet(name = "LoginCl", value = "/LoginCl")
public class LoginCl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//中文乱码解决方法
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//防止非法登录 得到session
HttpSession httpSession = request.getSession(true);
//修改session的存在时间为20s
httpSession.setMaxInactiveInterval(20);
httpSession.setAttribute("pass", "ok");
//获取用户名的账号和密码
String u = null;
//针对jsp 其username为username1
u = request.getParameter("username1");
String p = null;
p = request.getParameter("passwd");
//得到提交的验证码
String code = request.getParameter("code");
//获取session验证码
HttpSession session = request.getSession();
String randStr = (String) session.getAttribute("randStr");
//获取到
if (code.equals(randStr)) {
//访问数据库
UserDao userDao=new UserDao();
try {
if (!userDao.SearchUser(u,p)) {
response.getWriter().println("<a href=LoginServlet.jsp>抱歉:账号或密码错误,请注意核实信息重新输入</a>");
return;
} else {
String keep = request.getParameter("keep");
if (keep != null) {
//创建cookie
Cookie cookie1 = new Cookie("username", u);
Cookie cookie2 = new Cookie("password", p);
//设置关联路径
cookie1.setPath(request.getContextPath());
cookie2.setPath(request.getContextPath());
//设置cookie的消亡时间 两周
cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
//把cookie信息写给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
response.sendRedirect("welcome.jsp?uname=" + URLEncoder.encode(u, "utf-8") + "&password=" + p);
}
} catch (SQLException e) {
e.printStackTrace();
}
} } @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}

web.xml

welcom.jsp

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=gb2312" pageEncoding="gb2312" language="java" import="login.Bean.*"
%>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
<title>welcome</title>
</head>
<body>
<%
request.setCharacterEncoding("gb2312");
HttpSession httpSession=request.getSession(true);
String val=(String)httpSession.getAttribute("pass");
if(val==null){
response.sendRedirect("LoginServlet.jsp");
}
int counter=0;
application.setAttribute("COUNTER",new Integer(counter));
%>
<jsp:useBean id="mycount" class="login.Bean.Counter" scope="session"/>
<jsp:useBean id="user" class="login.Bean.User" scope="session">
<jsp:setProperty name="user" property="name" param="uname"/>
<jsp:setProperty name="user" property="pd" param="password"/>
</jsp:useBean>
<h1>主界面</h1>
<%--welcome name =<%=u%> password =<%=p%><br>--%>
<%--welcome name :<jsp:getProperty name="user" property="name" />--%>
welcome name :
<%
out.println(URLDecoder.decode(user.getName(),"utf-8"));
%>
password:<jsp:getProperty name="user" property="pd" /><br> <%--welcome name :<%out.println(session.getAttribute("username"));%>
password:<%out.println(session.getAttribute("password"));%><br>--%>
<%--这是你第:<%=counter%>次访问本网站!<br>--%>
这是你第:<jsp:getProperty name="mycount" property="count"/>
次访问本网站!<br>
<a href='LoginServlet.jsp'>返回重新登录</a><br>
<%
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("lastAccessTime")) {
out.println("您上次访问的时间是:");
Long lastAccessTime = Long.parseLong(cookies[i].getValue());
Date date = new Date(lastAccessTime);
out.println(date.toLocaleString());
}
}
}

//用户访问过后重新设置用户的访问时间,存储在cookie中,然后发送到客户端浏览器
Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+"");
//设置cookie的有效期为5min
cookie.setMaxAge(300);
//将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时
// 就会把cookie也输入到客户端浏览器
response.addCookie(cookie);
%>
</body>
</html>

 五. 效果

输入登录信息之后:

数据库信息:

JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)的更多相关文章

  1. Spring Security框架下实现两周内自动登录"记住我"功能

    本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...

  2. Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录

    Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...

  3. SpringBoot 整合 Shiro 密码登录与邮件验证码登录(多 Realm 认证)

    导入依赖(pom.xml)  <!--整合Shiro安全框架--> <dependency> <groupId>org.apache.shiro</group ...

  4. 结合数据库登录注册模块,登录成功之后跳到WebView

    最近刚刚做了一个模块,在本地建立一个数据库,存储注册的账号,登录的时候取出,正确则登录,登录之后跳到一个webView网页. 直接上代码吧. LoginActivity.java package co ...

  5. 基于web的网上书城系统开发-----登录注册扩展-------验证码功能

    public class CheckCode extends HttpServlet { private static final long serialVersionUID = 1L; privat ...

  6. [oldboy-django][2深入django]登录注册页面验证码

    后台生成随机验证码 #验证码生成 - 在login.html 中有一张验证码图片 设置图片的src url, 相当于发送一次get请求,返回的内容为图片渲染的内容 <div class=&quo ...

  7. SpringBoot 拦截器--只允许进入登录注册页面,没登录不允许查看其它页面

    SpringBoot注册登录(一):User表的设计点击打开链接 SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接 SpringBoot注册登录(三):注册--验证 ...

  8. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  9. nodejs+express+mongodb实现登录注册

    nodejs+express+mongodb实现登录注册 1 简介 登录注册功能使用nodejs+express+mongodb完成,其中对mongodb的操作使用mongoose完成,对mongod ...

随机推荐

  1. maven下使用jstl标签(1.2)版本

    使用的是1.2版本的,只需要一个jstl-1.2.jar    jsp中头部加入<%@ taglib prefix="c" uri="http://java.sun ...

  2. CentOS7+Rsyslog+MySQL 搭建 Rsyslog 日志服务器

    文章目录 1.主机环境 2.rsyslog搭建 2.1.rsyslog-server搭建 2.2.rsyslog-client 2.2.1.测试 2.3.rsyslog日志分类 2.3.1.测试 3. ...

  3. 三行Python代码,让你的数据处理脚本快别人4倍

    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言,我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺 ...

  4. [旧][Android] View 工作原理(一)

    备注 原发表于2016.05.23,资料已过时,仅作备份,谨慎参考 前言 本文参考<Android 开发艺术探索>及网上各种资料进行撰写,目的是为自己理清 Android 中 View 的 ...

  5. Clickhouse - MergeTree原理

    Clickhouse - MergeTree原理 MergeTree引擎以及隶属于MergeTree引擎族的所有引擎是Clickhouse表引擎中最重要, 最强大的引擎. MergeTree引擎族中的 ...

  6. 2021年国内外五大BI厂商_商业智能工具推荐

    ​每家公司对于BI工具的使用都有自己的特点和期望,所以当面对国内外那么多的BI厂商时,大家可能会觉得难以选择.今天我将会为大家介绍国内外五大BI厂商,对于它们做出一些分析,让大家更了解这些BI厂商. ...

  7. Oracle ASM 磁盘组基础知识整理(收藏版)

    转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...

  8. springMVC 调查问卷系统 record

    Maven下的依赖包有两个 spring-web和springWebMVC springwebMVC包含spring-web依赖, 但是spring-web的等级大于Spring-webmvc 没有 ...

  9. Java课程设计---学生信息管理系统需求分析及总体设计

    按照软件工程实践的原则,开发大型程序需要经历需求分析.总体设计.详细设计.编码实现.系统测试.系统维护等几个阶段. 1.需求分析 本阶段是整个软件开发过程中最重要的环节.通过了解实际运行的系统或与用户 ...

  10. [炼丹术]基于SwinTransformer的目标检测训练模型学习总结

    基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...