本实例实现用userreg.jsp页面中的表单提交注册请求,把注册信息提交给regservlet写入数据库并且查询新用户显示出来。

一、准备工作。

1.jdbc数据驱动开发包mysql-connector-java-5.1.26-bin.jar,拷贝并放置在WEB-INF下的lib中。

2.创建数据库user.

3.创建Web Project工程。

二、新建页面userreg.jsp.

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>我的userreg.jsp页面</title>
</head> <body>
<!-- 此处才是重要代码 -->
<form name="userregfrm" action="regservlet" method="post">
<table>
<tr><td align="right">用户名:</td><td><input type="text" name="name" id="name"value="zhangsanfeng"></td></tr>
<tr><td align="right">密码:</td><td><input type="text" name="password" id="password" value="mm123456"></td></tr>
<tr><td align="right">验证密码:</td><td><input type="text" name="confirm" id="confirm" value="mm123456"></td></tr>
<tr><td align="right">邮箱:</td><td><input type="text" name="email" id="email" value="zhangsanfeng@kaly.com"></td></tr>
<tr><td align="center" colspan="2"><input type="button" value="注册" onclick="check()">&nbsp;&nbsp;&nbsp;&nbsp;<input name="clear" type="button" value="清空"></td></tr>
</table>
</form>
<!-- 此处才是重要代码 -->
</body>
<!-- 此处才是重要代码 -->
<script type="text/javascript">
var password=document.getElementById("password");
var confirm=document.getElementById("confirm");
/* 验证两次输入的密码是否一致 */
function check(){
if(password.value!=confirm.value){
alert("两次输入密码不一致,请检查后重新输入");
password.value="";
confirm.value="";
password.focus();
}else{
document.forms[0].submit();
}
}
</script>
<!-- 此处才是重要代码 -->
</html>

javascript中的代码函数用于在点击"注册"后验证两次的密码输入是否一致。至于"清空"按钮事件响应可以参考以上代码添加。
三、创建注册用户数据封装类regedUser.

 package com.kaly.data;

 public class regedUser {
private int ID;// 用户ID
private String name;// 用户名
private String nickName;// 用户昵称
private String email;// 电子邮箱 public regedUser() { } public regedUser(int iD, String name, String nickName, String email) {
super();
ID = iD;
this.name = name;
this.nickName = nickName;
this.email = email;
} public void setUserData(int iD, String name, String nickName, String email) {
ID = iD;
this.name = name;
this.nickName = nickName;
this.email = email;
} public int getID() {
return ID;
} public void setID(int iD) {
ID = iD;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getNickName() {
return nickName;
} public void setNickName(String nickName) {
this.nickName = nickName;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "regedUser [ID=" + ID + ", name=" + name + ", nickName="
+ nickName + ", email=" + email + "]";
} }

四、创建数据库连接工具类GetData.

 package com.kaly.data;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class GetData {
//jdbc驱动类名
String driverStr="com.mysql.jdbc.Driver";
//数据库url
String dataStr="jdbc:mysql://192.168.2.100:3306/userinfo";
//访问数据库的用户名
String username="root";
//访问数据库的密码
String password="admin";
//数据库连接对象
private Connection conn;
//构造方法
public GetData(){
try {
//加载驱动类
Class.forName(driverStr);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获得数据库连接对象的方法
public Connection getConnection(){ try {
conn = (Connection) DriverManager.getConnection(dataStr,username,password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭数据库连接
public void close(){
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

五、创建Servlet处理类regservlet.使用模版创建。

 package com.kaly.servlet;

 import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.kaly.data.GetData;
import com.kaly.data.regedUser; public class regservlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html);charset=utf-8");
//上面这一句解决在使用PrintWriter输出信息时的中文乱码问题
//获取表单请求的注册信息
String regName=request.getParameter("name");
String regPwd=request.getParameter("password");
String regEmail=request.getParameter("email"); GetData data=new GetData();//实例化GetData对象
Connection connection=data.getConnection();//从data获得数据库连接对象
regedUser user=new regedUser();//创建用户数据封装对象
ResultSet rs;
//下面用来把注册信息添加到数据表
try {
PreparedStatement pStatement=connection.prepareStatement("insert into user(username,password,nickname,info) values(?,?,?,?)");
pStatement.setString(1, regName);
pStatement.setString(2, regPwd);
pStatement.setString(3, "新用户"+regName);//随机生成一个昵称,可以用专用的程序进行修改
pStatement.setString(4, regEmail);//没有更改数据库,所以把email写入到info字段
pStatement.executeUpdate();//这里和查询时不一样
pStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
//下面用来将刚注册的用户数据封装起来用于显示
try {
PreparedStatement pStatement=connection.prepareStatement("select * from user where username=?");
pStatement.setString(1, regName);
rs=pStatement.executeQuery();
while(rs.next()){
user.setUserData(rs.getInt(1), rs.getString(2), rs.getString(4), rs.getString(5));
}
} catch (SQLException e) {
e.printStackTrace();
}
data.close();
//用PrintWriter显示注册信息
PrintWriter pw=response.getWriter();
pw.print("注册用户ID为:"+user.getID()+"<br>");
pw.print("注册用户名为:"+user.getName()+"<br>");
pw.print("用户昵称是:"+user.getNickName()+"<br>");
pw.print("用户邮箱地址:"+user.getEmail()+"<br>");
pw.flush();
pw.close();
} }

六、修改web.xml.

多次证明,模版自动生成的web.xml配置文件中,关于servlet的<url-pattern>节点不正确,应该按照代码中修改一下。

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>loginserv</servlet-name>
<servlet-class>com.kaly.servlet.loginserv</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>regservlet</servlet-name>
<servlet-class>com.kaly.servlet.regservlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>loginserv</servlet-name>
<url-pattern>/loginserv</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>regservlet</servlet-name>
<url-pattern>/regservlet</url-pattern>
</servlet-mapping> </web-app>

七、一切就绪,重启服务,加载页面。

在这里为了测试方便,没有使用密码框,可以改过来。

现在输入新的信息,把两次的密码填写不一致。

点击"注册"后会弹出提示。

点击确定后两个密码输入框会被清空,光标置于密码框内,要求重新输入。我们重新输入两个一样的密码之后,再点击"注册"。会跳转到信息显示页面。

实际上这个页面现实的内容是添加完注册信息之后又从数据库中查询得到的。便于我们实现在用户注册之后立即自动登录。

八、查看此时的数据库user。

最后一条就是我们刚刚注册添加的用户数据。

九、整个项目的结构是这样的。

Servlet页面注册用户的小程序(一)的更多相关文章

  1. Servlet页面登录的数据库验证程序(二)

    这个程序在原来的程序基础上加入了密码验证. 一.增加一个error.jsp页面,用于跳转出现用户名和密码错误显示信息. <%@ page language="java" im ...

  2. Servlet页面登录的数据库验证程序(一)

    一.基本思想是MVC模式,一个登录页面login.jsp,一个服务器处理程序Servlet.java,一个MySql数据库userinfo. 另外还有相关的数据封装类User和数据库连接类GetDat ...

  3. 小程序内嵌H5页面判断微信及小程序环境

    判断微信及小程序环境 1.H5页面引入jweixin-1.3.2.js 2. var ua = window.navigator.userAgent.toLowerCase(); if(ua.matc ...

  4. H5页面跳转到小程序代码

    1.H5页面加代码直接打开小程序 <script type="text/javascript src="https://res.wx.qq.com/open/js/jweix ...

  5. 判断页面环境是否在小程序的webview中

    最近公司需要做小程序项目,但是又希望能够快速开发,就想着把web端的响应式页面放到webview里快速开发.但在判断页面环境的时候出现一些问题. 环境问题 用小程序提供的wx.miniProgram. ...

  6. 第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号

    文章目录 1.注册微信小程序账号 1.1 小程序的注册流程 1.2 登录小程序账号 2.下载微信小程序开发者平台 3.新建一个小程序 3.1 点击加号 3.2 填写项目目录和小程序ID 3.3 点击确 ...

  7. 判断H5页面环境是否在小程序的webview中

    用小程序提供的wx.miniProgram.getEnv可以获取环境参数,但是它有个问题就是无法在非微信环境下判断.所以在使用wx.miniProgram.getEnv前得先判断是否在微信环境中. 解 ...

  8. Page页面生命周期——微信小程序

    onLoad:function (options) {     //页面初始化     console.log('index Load') }, onShow:function () {     // ...

  9. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

随机推荐

  1. 第十章 嵌入式Linux的调试技术

    对调试工具进行简介.Linux中提供了一类工具,通过这些工具可以逐行跟踪程序的代码,用于测试用户空间程序的gdb.gdbserver和调试内核空间程序的kgdb. 用gdb调试用户空间程序:gdb可跟 ...

  2. SPRING 标签库

    打造专属自己的淘宝旺铺装修店铺优化商品推广网站客服工作物流发货 如果这个User的宿舍在Gryffindor(Gryffindor是哈利·波特在Hogwarts的宿舍——译者注), 那么“House” ...

  3. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  4. C语言状态机模板

    转载声明:如果转载本博客内容,请联系869119842@qq.com,获得作者书面授权. 前言 上一篇我的博客中探讨了一种非swtich-case结构的状态机写法,但是个人感觉写起来比较麻烦,如果增加 ...

  5. Python中文问题(转)

    在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854: 2. UTF-8,E59388: 3. GBK,B9FE. 一.python ...

  6. 第10章 嵌入式Linux的调试技术

    printk函数运行在内核空间,printf函数运行在用户空间.也就是说像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息.printk函数在控制台(也称终端)显示消息是通过 ...

  7. php大力力 [051节] 支付宝支付.申请支付资质,等待审核中

    https://beecloud.cn/doc/payapply/?index=6 支付宝支付申请支付资质 一.注册支付宝用户 在支付宝官网注册成为用户 二.签约对应支付产品 应用集成支付宝支付,需要 ...

  8. 【LeetCode】Roman to Integer & Integer to Roman

    Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...

  9. c++ float能到小数点后多少位

    float xiaoshu=0.0000000000000000000000000000000000000000000001; cout<<"xiaoshu"<& ...

  10. Android Handler 最佳的理解资料