基于Servlet、JSP、JDBC、MySQL的一个简单的用户注册模块(附完整源码)

最近看老罗视频,做了一个简单的用户注册系统。用户通过网页(JSP)输入用户名、真名和密码,Servlet接收后通过JDBC将信息保存到MySQL中。虽然是个简单的不能再简单的东西,但麻雀虽小,五脏俱全,在此做一归纳和整理。下面先上源码:

一、index.jsp

<%@ 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>
    <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="styles.css">
	-->
  </head>

  <body>
    <h1 align=center>欢迎您的注册
    </h1>
    <br>
    <font size="6"><a href="<%=path%>/pass.jsp"><font color="#0000ff">点击注册 </font>
    </a></font>
  </body>
</html>

它的运行结果如下:

二、点击上面的“点击注册”就跳转到了pass.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>后台管理系统</title>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<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">
<style type="text/css">
.neon {
	FILTER: glow(color = #002E60, strength	= 3)
}

DIV {
	WIDTH: 70px
}

BODY {
	MARGIN: 0px
}

BODY {
	MARGIN-TOP: 0px;
	SCROLLBAR-FACE-COLOR: #005fc5;
	FONT-SIZE: 12px;
	BACKGROUND: #ffffff;
	SCROLLBAR-HIGHLIGHT-COLOR: #799ae1;
	SCROLLBAR-SHADOW-COLOR: #799ae1;
	SCROLLBAR-3DLIGHT-COLOR: #005fc5;
	SCROLLBAR-ARROW-COLOR: #ffffff;
	SCROLLBAR-TRACK-COLOR: #aabfec;
	SCROLLBAR-DARKSHADOW-COLOR: #799ae1
}
</STYLE>
<LINK href="<%=path%>/images/duan_1.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<style type="text/css">
.style6 {
	COLOR: #0000ff
}

.STYLE7 {
	COLOR: #003366;
	font-size: 12px;
}
</style>
<script type="text/javascript">
	function dosubmit() {
		var th = document.form1;
		if (th.username.value == "") {
			alert("用户名不能为空");
			th.username.focus();
			return;
		}

		if (th.realname.value == "") {
			alert("姓名 不能为空");
			th.realname.focus();
			return;
		}

		if (th.pswd.value == "") {
			alert("密码不能为空");
			th.pswd.focus();
			return;
		}
		th.action="<%=path%>/servlet/RegisterAction"
		th.submit();

	}
</script>
</head>

<body bgColor=#ffffff
	onload="MM_preloadImages(‘<%=path%>/images/ok_2.jpg‘, ‘<%=path%>/images/fh_2.jpg‘)">
	<form action="" name="form1" method="post">
		<table height=470 cellSpacing=0 cellPadding=0 width=580 aligen=center
			border=0>
			<tbody>
				<tr>
					<td colSpan=3 height=9 />
				</tr>
				<tr>
					<td vAlign=top width=8 background="<%=path%>/images/dhpddw.gif"
						rowSpan=2>
						<!-- DWLayoutEmptyCell -->  </td>
					<td background="<%=path%>/images/h-1.gif" height=9></td>
					<td width=9 height=9><IMG height=9
						src="<%=path%>/images/jiao.gif" width=9>
					</td>
				</tr>
				<tr>
					<td vAlign=top align=right width=743 height=452>
						<table cellSpacing=0 cellPadding=0 width=556 border=0>
							<!-- DWLayoutTable -->
							<tbody>
								<tr>
									<td vAligh=bottom width=548 height=27><IMG height=10
										src="<%=path%>/images/jt2.gif" width=10> <span
										class="1bt">用户注册</span>
									</td>
									<td width=8 rowSpan=3> </td>
								</tr>
								<tr>
									<td bgColor="#ffffff" height=22></td>
								</tr>
								<tr>
									<td class=unnamed1 vAligh=top height=9>
										<table width="99%" border=0 cellPadding=4 cellSpacing=1
											bgColor="#0867b3">
											<tbody>
												<TR bgColor=#ffffff height=20>
													<TD width=14% noWrap class="STYLE7">用户名</TD>
													<TD width=24% valign="top" noWrap><INPUT class=text2
														maxLength=20 size=18 name="username" minLength="1">
													</TD>
													<TD width=62% noWrap><span class="STYLE7">必须填写!</span>
													</TD>
												</TR>
												<TR bgColor=#ffffff height=20>
													<TD height="4" noWrap><span class="STYLE7">姓  名</span>
													</TD>
													<TD height="4" valign="top" noWrap><INPUT class=text2
														maxLength=20 size=18 name="realname" minLength="1">
													</TD>
													<TD height="4" noWrap><span class="STYLE7">必须填写!</span>
													</TD>
												</TR>
												<TR bgColor=#ffffff height=20>
													<TD height="2" noWrap><span class="STYLE7">密码 </span>
													</TD>
													<TD height="2" valign="top" noWrap><INPUT
														type="password" class=text2 maxLength=20 size=18
														name="pswd" minLength="1">
													</TD>
													<TD height="2" noWrap><span class="STYLE7">必填项</span>
													</TD>
												</TR>
											</tbody>
										</table> <br>
									</td>
								</tr>
								<TR>
									<TD height=20 align="center"><a
										href="javascript:dosubmit();"><img
											src="<%=path%>/images/ok_1.jpg" name="Image8" width="60"
											height="22" border="0"> </a>  <a
										href="<%=path%>/index.jsp"><img
											src="<%=path%>/images/fh_1.jpg" name="Image9" width="60"
											height="22" border="0"> </a>
									</TD>
									<TD></TD>
								</TR>
							</tbody>
						</table>
					</td>
					<TD width=9 background="<%=path%>/images/s-1.gif"></TD>
				</tr>
			</tbody>
		</table>
	</form>
</body>
</html>

运行效果如下:

三、除上面两个jsp代码外,剩下的就是java代码了。先来看java代码的结构:

不得不说JavaWeb是一个绝好的理解MVC架构思想的载体,上述有四个包,每个包下面一个文件。在功能的划分上有条不紊。

1、com.product.jdbc.dbutil 这个包里是基于jdbc驱动的一个工具类JdbcUtils.java,代码已经贴出来了,参见前文

2、com.product.register.action所谓的action扮演了MVC里的C的角色,即Control层,里面放的是各种Servlet。接收来自V(View)---客户端页面jsp回传的数据,然后调M层,把数据存进去。RegisterAction.java的代码:

package com.product.register.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

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

import org.hibernate.validator.util.GetConstructor;

import com.product.register.dao.RegisterDao;
import com.product.register.service.RegisterService;

public class RegisterAction extends HttpServlet {

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
	private RegisterService service;

	/**
	 * Constructor of the object.
	 */
	public RegisterAction() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 *
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 *
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
String path = request.getContextPath();
	request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String username = request.getParameter("username");
		String realname = request.getParameter("realname");
		String pswd = request.getParameter("pswd");
		System.out.println("username = " + username + "  realname = " + realname
				+" pswd = " + pswd);
		List<Object> params = new ArrayList<Object>();
		params.add(username);
		params.add(pswd);
		params.add(realname);
		boolean flag = service.registerUser(params);
		if(flag){
			out.println("注册成功");
			response.sendRedirect(path + "/index.jsp");
		}else{
			out.println("注册失败");
		}
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
		service = new RegisterDao();
	}

}

3.com.product.register.service 这里的service其实是一个接口,RegisterService.java代码:

package com.product.register.service;

import java.util.List;

public interface RegisterService {
	public boolean registerUser(List<Object> params);
}

4.既然有接口就一定有接口的实现者,实现者就是com.product.register.dao下的RegisterDao.java, 负责操纵数据库,将信息存到表里。

package com.product.register.dao;

import java.util.List;

import com.product.jdbc.dbutil.JdbcUtils;
import com.product.register.service.RegisterService;

public class RegisterDao implements RegisterService {
	private JdbcUtils jdbcUtils = null;
	public RegisterDao() {
		// TODO Auto-generated constructor stub
		jdbcUtils = new JdbcUtils();
	}

	/* 完成用户对注册的Dao的编写
	 * @see com.product.register.service.RegisterService#registerUser(java.util.List)
	 */
	@Override
	public boolean registerUser(List<Object> params) {
		// TODO Auto-generated method stub
		boolean flag = false;
		jdbcUtils.getConnection();
		String sql = "insert into userinfo(username, pswd, realname) values (?, ?, ?)";
		try{
			flag = jdbcUtils.updateByPreparedStatement(sql, params);
		}catch(Exception e){
			e.printStackTrace();
		}
		finally{
			jdbcUtils.releaseConn();
		}

		return flag;
	}

}

下图是输入一个用户的信息:

用Navicat打开数据库可以看到:

代码就完毕了,下面是开发要点:

1、关于中文乱码的问题,按老罗的视频一开始我的也乱码,经研究需要三个地方同时设置utf-8编码,第一是数据库里表的编码,第二是jsp的编码:pageEncoding="utf-8" 第三是在Servlet里同时设置response和request的编码,代码如下:

request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8"); 记住是缺一不可哦!!!

2、关于JSP往JSP页面的跳转很简单:

<a href="<%=path%>/pass.jsp">点击注册</a> 超链接里直接放要跳转jsp的相对路径即可。

3、JSP往Servlet跳转:

<a  href="javascript:dosubmit();">

<img src="<%=path%>/images/ok_1.jpg" name="Image8" width="60" height="22" border="0"> </a>

也是用的href超链接,在地址里写"javascript:dosubmit();". 这就需要定义dosubmit()函数:

<script type="text/javascript">
	function dosubmit() {
		var th = document.form1;
		if (th.username.value == "") {
			alert("用户名不能为空");
			th.username.focus();
			return;
		}

		if (th.realname.value == "") {
			alert("姓名 不能为空");
			th.realname.focus();
			return;
		}

		if (th.pswd.value == "") {
			alert("密码不能为空");
			th.pswd.focus();
			return;
		}
		th.action="<%=path%>/servlet/RegisterAction"
		th.submit();

	}
</script>

获得一个表单,然后根据input时的名字获取对应value,

<INPUT class=text2 maxLength=20 size=18 name="username" minLength="1">

4、上面可以看到jsp往servlet跳转过程中先经过javascript,接下来说白了是javascript往servlet跳转:

th.action="<%=path%>/servlet/RegisterAction"
th.submit();

5、Servlet往jsp跳转:

response.sendRedirect(path + "/index.jsp");这种方法浏览器地址发生变化,传参数可以再URL地址里或用session,不能使用request.setAttribute来传参数。另一种使用forward来传,详细参见这里: 链接1   链接2

6、纵观整个架构,RegisterAction是控制中枢,数据经jsp----javascript传到RegisterAction。在RegisterAction里创建了接口Service的实例RegisterDao,用Dao来存数据。

关于javaEE的各层分工,详见这里

7.因为要访问数据库,记得将mysql-connector-java-5.1.26-bin.jar拷贝到WebRoot文件夹下的WEB-INF/lib文件夹下。

另外在web.xml里要配对,jsp里用到了css。其他的细节看源码吧。

下载链接:http://download.csdn.net/detail/yanzi1225627/7442677

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注册模块(附完整源码)

时间: 2024-10-03 03:35:09

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注册模块(附完整源码)的相关文章

实现一个简单的语音聊天室(源码)

语音聊天室,或多人语音聊天,是即时通信应用中常见的功能之一,比如,QQ的语音讨论组就是我们用得比较多的. 这篇文章将实现一个简单的语音聊天室,让多个人可以进入同一个房间进行语音沟通.先看运行效果截图:         从左到右的三张图分别是:登录界面.语音聊天室的主界面.标注了各个控件的主界面. (如果觉得界面太丑,没关系,后面下载源码后,你可以自己美化~~) 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 该项目的底层是基于OMCS构建的.这

实现一个简单的视频聊天室(源码)

在 <实现一个简单的语音聊天室>一文发布后,很多朋友建议我也实现一个视频聊天室给他们参考一下,其实,视频聊天室与语音聊天室的原理是差不多的,由于加入了摄像头.视频的处理,逻辑会繁杂一些,本文就实现一个简单的多人视频聊天系统,让多个人可以进入同一个房间进行语音视频沟通.先看看3个人进行视频聊天的运行效果截图:       上面两张截图分别是:登录界面.标注了各个控件的视频聊天室的主界面. 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 同语音聊

简单算法和简单逻辑的小软件,是如何获得技术专利的?附完整源码

源码在最后面有下载,是入行一年时的项目.虽然简陋,却是我人生中的重要里程碑.一直想把背后的故事讲出来,但代码长得丑陋不好意思拿出来. 眼见年终了,丑代码放出来图大家一乐,如果有人学到东西或被后面的故事激起斗志,更是功德一件. 功能介绍:一个大片(图中m1-m4四个红色标记点组成),指定旋转角度,最多能切割成多少黑灰色的小片. 输入:见图,小片宽高,大片宽高,角度. 输出:最大切片数. 技术涉及屏幕坐标系,数学和几何计算,画图,多线程. 完整的项目有串口控制通信和一些实际工程的代码,和硬件绑定在一

一个简单漂亮的网址导航HTML5源码

纯HTML代码,然后一个CSS一个JS文件,根据设备自适应,更多信息自行研究,修改index.html内容. 下载地址:https://www.lanzous.com/i3wn9kh 原文地址:https://blog.51cto.com/14296754/2385384

对基于Servlet+JSP+JavaBean开发模式的用户登录注册的升级

还记得我前面所写的博文基于Servlet+JSP+JavaBean开发模式的用户登录注册吗?我们以前是创建代表数据库的xml文件来保存用户信息的,现在我们已经学习了数据库相关的知识,所以应把xml换成数据库,升级成数据库应用. 我们在把以前的工程复制并拷贝时,假设以前的工程名是day09_user,现复制一份并拷贝,重新修改工程名为day14_user,此刻将其直接部署在tomcat服务器上,那么day14_user这个JavaWeb应用映射的虚拟目录仍然是"/day09_user",

基于Servlet+JSP+JavaBean开发模式的用户登录注册

基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模

基于Servlet+jsp的web计算器

基于Servlet+jsp的web计算器 这次老大为了让我们自己复习web中页面的跳转给不值得任务 天下代码一大抄,关键看你怎么抄 首先我想到的计算算法不是什么堆栈,是简单的(其实很复杂,但是我就只需要知道有这个东西,东西别人做好了...传说中的CV大法好?Emmm,当你知道有这么个算法但是不会自己写可是自己会用的时候,也就相当于...自己会了.....) 废话不多说一下是收集的正则工具类,支持括号运算 package pers.cal.util; import java.util.regex.

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

用Verilog语言实现一个简单的MII模块

项目中要求简单地测试一下基于FPGA的模拟平台的RJ45网口,也就是需要实现一个MII或者RMII模块.看了一下官方网口PHY芯片的官方文档,还是感觉上手有点障碍,想在网络上找些参考代码看看,最后只在opencores找到了一些MAC层控制模块,代码庞大且复杂,对于初学者来说阅读起来很困难. 于是在此以一个初学者的角度记录一下我实现一个简单的MII模块的过程,并且指出一些实现过程中要注意的问题.希望可以帮助有需要的朋友. 为了便于测试,我选择了和我们平台使用相同物理芯片的FPGA开发板NEXYS