WEB网站的注册、登录、验证码

项目结构图

在这里插入图片描述

用户登录页面login.jsp代码


<%@ page language="java" contentType="text/html; UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function changeimg(){
		document.getElementById("img1").src="/web05/verifycodeservlet?time="+new Date().getTime();
		//在这个事件触发的地址上加时间是因为,浏览器加载的图片会有缓存,浏览器会默认加载缓存里的图片,所以就算点击之后
		//图片也不会有变化,为了不出现这样的情况,可以在地址后面加一个随时会变的参数,这样浏览器就会加载新的图片,
		
	}


</script>
</head>
<body>
<%
	String msg="";
	if(request.getAttribute("msg")!=null){
		msg=(String)request.getAttribute("msg");
	}


%>
<h1>登录页面</h1>
<h3><font color="red"><%=msg %></font></h3>
<form action="/web05/loginservle" method="post">
	<table border="1" width="500">
	<tr>
		<td>用户名</td>
		<td><input type="text" name="username" valuse="${cookie.remember.value}" } /></td>
	</tr>
	<tr>
		<td>密码</td>
		<td><input type="password" name="password" valuse="${cookie1.password.value}" } /></td>
	</tr>
	<tr>
		<td>验证码</td>
		<td><input type="text" name="checkcode" size="6"/>
		<img id="img1" src="/web05/verifycodeservlet">
		<a href="#" onclick="changeimg()">看不清,换一张</a>
		<!-- 通过事件绑定,来改变验证码 -->
		</td>
	</tr>
	<tr>
		<td><input type="checkbox" name="remember"/></td>
		<td>记住用户名</td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="登录"/></td>
	</tr>
	
	</table>
</form>
</body>
</html>

登录成功页面代码success.jsp

<%@ page import="com.itheima.Useritl.user" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(request.getSession().getAttribute("existuser")==null){
%>
<h1>您还没有登录!请先去<a href="/web05/login.jsp">登录</a>!</h1>
<%
}
else{
%>
<h1>用户登录成功!</h1>
<%user existuser = (user)request.getSession().getAttribute("existuser"); %>

<h3>您好<%=existuser.getUsername() %></h3>
<a href="/web05/logoutservlet">退出登录</a>
<%
}
%>
</body>
</html>

用户工具类user.java

package com.itheima.Useritl;

public class user {
	private Integer id;
	private String username;
	private String password;
	private String nickname;
	private int age;
	public Integer getId() {
		return id;
	}
	public void setId(Integer 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 getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "user [id=" + id + ", username=" + username + ", password=" + password + ", nickname=" + nickname
				+ ", age=" + age + "]";
	}
}

用户登录工具类UserModel.java

package com.itheima.Useritl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.itheima.DBuitle.JDBCUitel1;


public class UserModel {
	
	
	public user login(user use) throws SQLException{
		
		if(use!=null) {
		QueryRunner queryrunner = new QueryRunner(JDBCUitel1.getdatasource());
		
		//user rs = queryrunner.query("select * from user where id=?", new BeanHandler<user>(user.class), 2);
		
		
		
		user existuser = queryrunner.query("select * from user where username=? and password=?", new BeanHandler<user>(user.class), use.getUsername(),use.getPassword());
		
		
		
		return existuser;
		}else {
			return null;
		}
		
		
		
	}

}

用户登录servlet代码loginservle.java

package com.itheima.domain;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.itheima.DBuitle.JDBCUitel1;
import com.itheima.Useritl.UserModel;
import com.itheima.Useritl.user;

/**
 * Servlet implementation class loginservlet
 */
public class loginservle extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			request.setCharacterEncoding("UTF-8");
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			String checkcode1 = request.getParameter("checkcode");
			String checkcode2 = (String) request.getSession().getAttribute("checkcode");
//			System.out.println("checkcode1=="+checkcode1+"checkcode2=="+checkcode2);
			request.getSession().removeAttribute("checkcode");
			if(!checkcode1.equalsIgnoreCase(checkcode2)) {
				//一次性验证码的校验,如果验证码错误,返回错误信息,并且回到登录页面
				request.setAttribute("msg", "验证码输入错误!");
				request.getRequestDispatcher("./login.jsp").forward(request, response);
				return;
			}
			//System.out.println("username:"+username+"password:"+password);
			user use = new user();
			use.setUsername(username);
			use.setPassword(password);
			
	//		System.out.println(use);
			UserModel usermo = new UserModel();
	//		System.out.println("1");
			user existuser  = usermo.login(use);
	//		System.out.println("11");
	//		System.out.println(existuser);
			if(existuser ==null) {
//				登录失败
//				向request域中保存一个信息
				request.setAttribute("msg", "用户名或密码错误");
				//使用请求转发进行页面跳转,这个时候request和response会一起转发过去,就是把所有数据都转发过去了,用于在登录页面进行错误回显
				request.getRequestDispatcher("./login.jsp").forward(request, response);
			}else {
				//记住用户名
				//判断复选框是否已经勾选
	//			String remember=request.getParameter("remember");
				String remember = request.getParameter("remember");
	//			System.out.println("remmember=="+remember);
				if("on".equals(remember)) {
					Cookie cookie=new Cookie("remember",existuser.getUsername());
					Cookie cookie1=new Cookie("password",existuser.getPassword());
					cookie.setPath("/web05");//设置有效路径
					cookie.setMaxAge(60*60);//设置有效时间
					response.addCookie(cookie);//回写到浏览器
					response.addCookie(cookie1);
				//	System.out.println("设置cookie");
				}
				//登录成功
				//保存用户信息:保存到会话当中
				HttpSession session = request.getSession();
				//保存数据
				session.setAttribute("existuser", existuser);
				//重定向到成功页面
				response.sendRedirect("./success.jsp");
			}
			
		}catch(Exception e) {
			e.printStackTrace();
			throw new RuntimeException();
			
		}
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doGet(request, response);
	}

}

生成验证码的servlet代码verifycodeservlet.java

package com.itheima.domain;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



/**
 * Servlet implementation class verifycodeservlet
 */
public class verifycodeservlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 //禁止浏览器缓冲随机图片
        response.setDateHeader("Expires", -1);//防止启动浏览器时取先前缓冲的数据
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");

        //通知客户机以图片方式打开发送过去的数据
        response.setHeader("Content-Type", "image/jpeg");

        //在内存中创建一副图片
        int width = 60;
        int height = 30;
        String data = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijklmnpqrstuvwxyz";    //随机字符字典,其中0,o,1,I 等难辨别的字符最好不要
        Random random = new Random();//随机类
        //1 创建图片数据缓存区域(核心类)
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建一个彩色的图片
        //2 获得画板(图片,ps图层),绘画对象。
        Graphics g = image.getGraphics();
        //3 选择颜色,画矩形3,4步是画一个有内外边框的效果
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, width, height);
        //4白色矩形
        g.setColor(Color.WHITE);
        g.fillRect(1, 1, width-2, height-2);
        
        /**1 提供缓存区域,为了存放4个随机字符,以便存入session */
        StringBuilder builder = new StringBuilder();
        
        //5 随机生成4个字符
                    //设置字体颜色
        g.setFont(new Font("宋体", Font.BOLD&Font.ITALIC, 20));
        for(int i = 0 ; i < 4 ;i ++){
            //随机颜色
            g.setColor(new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)));
            
            //随机字符
            int index = random.nextInt(data.length());
            String str = data.substring(index, index + 1);
            
            /**2 缓存*/
            builder.append(str);
            
            //写入
            g.drawString(str, (width / 6) * (i + 1) , 20);                     
        }
        //给图中绘制噪音点,让图片不那么好辨别
        for(int j=0,n=random.nextInt(100);j<n;j++){
            g.setColor(Color.RED);
            g.fillRect(random.nextInt(width),random.nextInt(height),1,1);//随机噪音点
        }

        
        /**3 获得随机数据,并保存session*/
        String checkcode = builder.toString();
  //      System.out.println(checkcode);
        request.getSession().setAttribute("checkcode",checkcode);
        
        
        //.. 生成图片发送到浏览器 --相当于下载
        ImageIO.write(image, "jpg", response.getOutputStream());
    }

	

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doGet(request, response);
	}

}

用户退出登录的servlet代码logoutservlet.java

package com.itheima.domain;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class logoutservlet
 */
public class logoutservlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public logoutservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getSession().invalidate();
		response.sendRedirect("./login.jsp");
	}

	/**
	 * @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);
	}

}

数据库连接池代码JDBCUitel1.java

package com.itheima.DBuitle;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.omg.CORBA.portable.InputStream;

import com.alibaba.druid.pool.DruidDataSourceFactory;

public class JDBCUitel1 {
		
		private static DataSource dataSource=null;//初始化连接池
		
		static {
			
		//创建连接池
		Properties properties = new Properties();
		try {
		
		properties.load(new FileInputStream("D:/apache-tomcat-8.5.39/webapps/web05/WEB-INF/classes/druid.properties"));//读取配置文件,设置参数
		//Java项目的文件路径和Javaweb项目的路径是不同的,通过tomcat的重新配置,文件位置会改变。
		dataSource = DruidDataSourceFactory.createDataSource(properties);
		
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		}
		
	
		public static Connection getconnection() {
			Connection conn = null;
			try {
				
			conn = dataSource.getConnection();
			//获取连接池中的连接
				
			}catch(Exception e) {
				e.printStackTrace();
			}
			return conn;
		}
		public static DataSource getdatasource() {
			return dataSource;
			
			
		}

			public static void release(Statement stmt,Connection conn) {
						if(stmt!=null) {
							try {
								stmt.close();
							}catch(SQLException e) {
								e.printStackTrace();
							}
							stmt=null;
						}
							
					
						if(conn!=null) {
							
							try {
								conn.close();
							}catch(SQLException e) {
								e.printStackTrace();
							}
							conn=null;
						}
			}
			public static void release(ResultSet rs,Statement stmt,Connection conn) {
				if(stmt!=null) {
					try {
						stmt.close();
					}catch(SQLException e) {
						e.printStackTrace();
					}
					stmt=null;
				}
					
			
				if(conn!=null) {
					
					try {
						
						conn.close();
					}catch(SQLException e) {
						e.printStackTrace();
					}
					conn=null;
				}
				if(rs!=null) {
						
						try {
							rs.close();
						}catch(SQLException e) {
							e.printStackTrace();
						}
						rs=null;
					}
}
}

配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>web05</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>loginservle</display-name>
    <servlet-name>loginservle</servlet-name>
    <servlet-class>com.itheima.domain.loginservle</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginservle</servlet-name>
    <url-pattern>/loginservle</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>verifycodeservlet</display-name>
    <servlet-name>verifycodeservlet</servlet-name>
    <servlet-class>com.itheima.domain.verifycodeservlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>verifycodeservlet</servlet-name>
    <url-pattern>/verifycodeservlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>logoutservlet</display-name>
    <servlet-name>logoutservlet</servlet-name>
    <servlet-class>com.itheima.domain.logoutservlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>logoutservlet</servlet-name>
    <url-pattern>/logoutservlet</url-pattern>
  </servlet-mapping>
</web-app>

配置文件druid.properties

url=jdbc:mysql://localhost/web_test3?serverTimezone=UTC
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=123456
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值