Javaweb网站用户注册登录实现小记

2023-11-15

用户注册登录过程主要分为几个步骤:(1)前端页面设计;(2)数据访问模型包;(3)Servlet容器数据接收处理;(4)跳转至页面。下面分步骤小记一下,供以后参考:

整个实现环境:Eclipse Version: 2018-09 (4.9.0)--Eclipse Java EE IDE for Web Developers.;JDK 1.8.0_73;mysql:5.6.44-win32(远程数据库);Tomcat9.0

项目结构如下:

(1)前端页面设计

       由于仅仅是用户注册登录,因此设计就较为简单。在Eclipse中新建Dynamic web project,并命名为new。WebContent用于存放页面设计文档,如结构图中的front目录为前端页面文档,包括css、img和jsp文件。其上一级目录中的index.jsp仅为跳转使用,前端页面首页为front目录下的index.jsp。如下首页代码,资源文件如css和img可以不管,重点是实现的过程。

首页代码参考:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>  
<meta http-equiv="content-type" content="text/html" charset="GB2312">
<title>myweb</title>
<link rel="stylesheet" type="text/css" href="css/front.css">
</head>
<body>
 
<div class="box1">
<div class="header">
<li><a href="user.jsp">公司简介</a></li>
<li><a href="news.html">公司新闻</a></li>
<!--  如果session中username的值存在,则显示欢迎用户 和用户退出-->
<% if(request.getSession().getAttribute("username")!=null){ %>

 <li>welcome,<%=request.getSession().getAttribute("username")%></li>
  <li><a href="logout.jsp">用户退出</a></li>
 <% } else{ %>
 <!--  如果session中username的值不存在,则显示用户注册 和用户登录-->
 <li><a href="register.jsp">用户注册</a></li>
<li><a href="login.jsp">用户登录</a></li>
 <% } %>
</div>
<div class="main">
 <img src="img/car.jpg">
</div>
</div>

用户注册register.jsp代码:

<%@ 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>
<link rel="stylesheet" type="text/css" href="css/front.css">
</head>
<body>
<div class="box">
  <form action="UserRegister" method="post">
   <div class="section">
     <label>username</label>
     <input type="text" name="username">   
   </div>
    <div class="section">
     <label>username</label>
     <input type="password" name="userpwd">   
   </div>
   <div class="section">
     <label>gender</label>
     <input type="radio" name="sex"> male  
     <input type="radio" name="sex"> female
   </div>
      <div class="section">
     <input type="submit" name="submit" value="提交">
     <input type="reset" name="reset" value="Reset">   
   </div>
   </form>
</div>
</body>
</html>

用户登录login.jsp代码:

<%@ 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>
<link rel="stylesheet" type="text/css" href="css/front.css">
</head>
<body>
<div class="box">
  <form action="UserServlet" method="post">
   <div class="section">
     <label>username</label>
     <input type="text" name="username">   
   </div>
    <div class="section">
     <label>username</label>
     <input type="password" name="userpwd">   
   </div>
      <div class="section">
     <input type="submit" name="submit" value="提交">
     <input type="reset" name="reset" value="Reset">   
   </div>
   </form>
</div>
</body>
</html>

用户退出logout.jsp代码:

<%@ 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>
<% request.getSession().setAttribute("username", null); %>
<script>
  window.location.href="index.jsp";
</script>
</body>
</html>

用户登录和用户注册在前端页面处都是表单样式,这里form表单里的action指向了servlet容器,servlet容器用于处理http请求如表单提交request以及响应response反馈给页面。

(2)DAO数据访问模型对象

这里的DAO是数据访问对象包简写,本次还未涉及使用任何框架。在java Resources里新建一个dao包,(新建package),然后在该包里新建两个java类,一个是负责连接数据库和关闭数据库的封装类DButils.java,一个是负责与数据库交互处理如新增、删除、更新、查询等操作的类,这里名为为LoginDaolmp.java,即用于处理用户登录和注册的数据模型类。

DButils.java类代码如下:

package dao;
import java.sql.*;
public class DButils {	 
		static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
	    static final String DB_URL = "jdbc:mysql://106.13.111.246:3306/new";		
	    static final String USER = "cao";
	    static final String PASS = "root123";
	    static Connection conn = null;
	    
	    public static Connection getConnection(){ 
	        try {
	            //加载oracle驱动
	            Class.forName(JDBC_DRIVER);
	            //通过驱动获取数据库的连接
	            conn  = DriverManager.getConnection(DB_URL,USER,PASS);
	            System.out.println("连接成功");
	        } catch (Exception e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
	        return conn;
	    }
	    
	    public static void Close(){
	        try { 
	        	if(conn!=null) {	            	  
	                  conn.close();
	            }

	        } catch (SQLException e) {
	            // TODO: handle exception
	        	 e.printStackTrace();
	        }
	    }	
}

LoginDaolmp.java代码如下:

package dao;
import java.sql.*;
public class LoginDaolmp {
  
//登录时查询用户名和密码是否匹配,如果匹配则返回真	
	public boolean searchName(String loginName, String loginpwd) {
		Connection conn=(Connection)DButils.getConnection();
		String sql="select * from user where username=? and userpwd=?";
		try {
			PreparedStatement ps=(PreparedStatement)conn.prepareStatement(sql);
			ps.setString(1, loginName);
			ps.setString(2,loginpwd);
			ResultSet rs=ps.executeQuery();
			while(rs.next()) {
				return true;
			}
		} catch (SQLException e) {
            // TODO: handle exception
        	 e.printStackTrace();
	    }
		return false;
	
	}
	//注册时将新用户名和信息插入数据库,操作成功则返回真	
	public boolean RegisterName(String loginName, String loginpwd,String sex) {
		Connection conn=(Connection)DButils.getConnection();
		PreparedStatement ps=null;
		String sql="insert into user values(null,?,?,?)";
		try {			 
			ps=conn.prepareStatement(sql);
			ps.setString(1, loginName);
			ps.setString(2,loginpwd);
			ps.setString(3, sex);
			int result=ps.executeUpdate(); 
			if(result==1) {
			return true;}
			 
		} catch (SQLException e) {
            // TODO: handle exception
        	 e.printStackTrace();
	    }
		 return false;	
	}
}

(3)Servlet容器接收响应处理

当进入首页点击用户登录或用户注册时,表单响应会提交至servlet容器。操作时新建servlet容器,然后新建两个类,一个为处理用户登录,一个为处理用户注册。这里分别命名为UserRegister和UserServlet,如下为处理用户登录的UserServlet类代码:

package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 dao.LoginDaolmp;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
		String username=request.getParameter("username"); //获取表单里用户名文本框信息
		String userpwd=request.getParameter("userpwd");//获取表单里用户密码文本框信息
		LoginDaolmp dl=new LoginDaolmp(); 
		PrintWriter out=response.getWriter();
		boolean isHave=dl.searchName(username, userpwd);//调用查询用户名和密码是否匹配方法
		if(isHave) {
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/html;charset=utf-8");
			request.setAttribute("username", username);	 	
			request.getSession().setAttribute("username", username); //将登录用户名保存在session里
           out.println("<script>alert('登录成功!');window.location.href='index.jsp'</script>");
		}else {
			request.getSession().setAttribute("info", "account does not right");  	
			response.sendRedirect("index.jsp");
		}		
	}

}

如下为处理用户注册的UserRegister类代码:

package 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 dao.LoginDaolmp;

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String username=request.getParameter("username");
		String userpwd=request.getParameter("userpwd");
		String sex=request.getParameter("sex");
		LoginDaolmp dl=new LoginDaolmp();
		boolean isHave=dl.RegisterName(username, userpwd, sex);
		if(isHave) {
			request.setAttribute("username", username);
			System.out.println("注册成功!");
			request.getRequestDispatcher("index.jsp").forward(request, response);
		}else {
			request.getSession().setAttribute("info", "account does not right");
			response.sendRedirect("front/register.jsp");
		}
	}
}

可以看到在servlet容器里两个类主要编写的是doPost方法,在doPost方法里处理用户注册和登录。

(4)测试效果

当点击首页的用户登录后,进入登录表单页面,填写用户名和密码,点击提交后就会进入UserServlet类进行用户信息匹配操作处理,如果返回为真,则将用户名信息保存到session里,首页页面显示的就是欢迎用户信息了。如下:

整个用户登录和注册的处理过程就实现完毕,里面还有一些小的细节未处理好,如request.getRequestDispatcher(url).forward(request,response),其中的url路径还有待完善。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javaweb网站用户注册登录实现小记 的相关文章

随机推荐

  • 【实验九】【使用触发器实现数据完整性】

    文章目录 触发器 一 实现域完整性 二 实现参照完整性 三 比较约束与触发器的执行顺序 Reference 触发器 触发器 trigger 是用户定义在关系表上的一类由事件驱动的特殊过程 触发器又叫做事件 条件 动作 event condi
  • ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版

    QQ 23426945 PHP技术群 159789818 个人技术博客 https www itqaq com TP6 0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用 经过测试 最后得出域名绑定应用是最合适的部署方式 如果有更
  • React源码分析3-render阶段(穿插scheduler和reconciler)

    本章将讲解 react 的核心阶段之一 render阶段 我们将探究以下部分内容的源码 更新任务的触发 更新任务的创建 reconciler 过程同步和异步遍历及执行任务 scheduler 是如何实现帧空闲时间调度任务以及中断任务的 触发
  • SpringBoot 如何实现多数据源

    SpringBoot 如何实现多数据源 第一步 配置yml spring datasource type com alibaba druid pool DruidDataSource datasource1 url jdbc mysql 1
  • vue毕业设计分享 100例 (五)

    文章目录 前言 题目1 基于SSM的婚纱摄影业务系统 br 题目2 基于SSM的家教网课学习平台 br 题目3 基于SSM的家庭美食食谱管理系统 br 题目4 基于SSM的驾校预约培训管理系统 br 题目5 基于SSM的教师评价考核管理系统
  • 远程登陆之SSH的简单用法及命令

    SSH简单使用 SSH的安装 启动服务器的SSH服务 SSH远程登陆 口令登陆 公钥登陆 配置别名 传输文件 SSH只是一种协议 存在多种实现 既有商业实现 也有开源实现 OpenSSH是一种免费开源实现 OpenSSH是用于使用SSH协议
  • zabbix监控硬件

    一 通过snmp监控 1 idrac上开启snmp服务 2 然后到zabbix server服务器上测试一下是否能get到数据 snmpget v 2c c 1 3 6 1 4 1 674 10892 2 1 1 2 0 3 添加主机 二
  • rabbitmq的发布确认和事务

    2019独角兽企业重金招聘Python工程师标准 gt gt gt confirm的工作机制 Confirms是增加的一个确认机制的类 继承自标准的AMQP 这个类只包含了两个方法 confirm select和confirm select
  • 读取dgn文件思路

    1 opendgn 2 sourceforge里面有dgn读取内容 3 dgndirect 4 DGNLib 5 Teigha 6 lt
  • ERROR: cannot launch node of type [turtlebot_teleop/turtlebot_teleop_key] 问题解决

    当遇到问题 采取方式为 也就是说先用 rospack find 命令找是否存在 不存在就安装 sudo apt get install ros kinetic XXX 从网上查需要安装哪些内容 转载于 https www cnblogs c
  • 使用U盘为虚拟机安装系统

    转载自点击打开链接http www cnblogs com happy xiaoxiao p 8010547 html 前提 使用虚拟机安装WIN8系统时 由于WIN8镜像文件大于4G无法使用虚拟安装 所以使用U盘安装 1 装有U盘启动的W
  • 点云高度归一化处理(附 matlab 代码)

    由于不同地物之间存在着高程的差异 为了去除地形起伏对点云数据高程值的影响 所以需要根据提取出的地面点进行点云归一化处理 这一步是很多算法的基础 可以提高后续点云分类或分割的准确度等 如下图所示 归一化的过程其实相对简单 遍历每一个非地面点
  • Simon‘s writting 全网最全笔记

    石墨文档写完上传的 格式有点乱 凑合着看 排班不重要 内容最重要 一键三连的朋友可以私信我要word pdf 图片 markdown 那个看得舒服看哪个 An IELTS training course Understand the tas
  • Visual Studio下安装C/C++图形库(easyx)2022版

    一 Easyx下载链接 EasyX Graphics Library for C 二 Visual Studio上安装Easyx 1 右击EasyX 20220901 exe 选择管理员身份运行 2 点击下一步 3 它会自动检测 根据自己需
  • python3 新式邮件写法 附件乱码 解决

    import sys import re import mimetypes import base64 import traceback from pathlib import PurePath from datetime import d
  • 经过几年和前端调接口,我把抓包调试摸透了,浏览器岂非我对手

    场景 我们在和前端对接接口的时候 前端都是根据后端提供的接口api swagger地址或者yapi 其他接口管理平台进行接口联调 mock一些测试数据调试 调好了然后在本地和后端联调接口 没有问题后再发测试环境 测试环境再发预发布 预发布通
  • 打工族必看!省钱订餐攻略,经本人亲测多日!

    这不是广告哦 不像其他平台一样需要扫码关注等等 我的常用平台是不需要关注的 只要领取即可使用 我已经在这个平台点外卖很久了 几个月了 平常我会在这个平台领取优惠券 和同事一起拼单下单 每个人能省下三四块钱 有时候多的话可以省下七八块钱 这个
  • DevEco studio 一直加载gradle

    在使用DevEco studio 时一直处于提示gradle的问题 该现象和之前的Androoid Studio类似一直去网络中请求下载指定的gradle的版本 此时类比Android Studio先将gradle版本下载下来 然后放置在指
  • snort 源码分析之模式匹配引擎

    snort是一款著名的开源IPS 其主页地址 snort 官网 更详细的介绍网上很多 可自行搜索了解 本博客主要介绍snort 2 9 5版本的模式匹配引擎的加载和匹配 模式匹配引擎主要使用多模式匹配算法和单模式匹配算法 先由多模式匹配算法
  • Javaweb网站用户注册登录实现小记

    用户注册登录过程主要分为几个步骤 1 前端页面设计 2 数据访问模型包 3 Servlet容器数据接收处理 4 跳转至页面 下面分步骤小记一下 供以后参考 整个实现环境 Eclipse Version 2018 09 4 9 0 Eclip