本实例实现用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. Java泛型中的? super T语法

    ? super T 语法将泛型类限制为所有T的超类(包括T自身),但只能用于参数中,不可以在返回值用加以限定.如果不加以限定,假设某个函数头为? super Manager get()由于编译器不知道 ...

  2. fatal error: 'XCTest/XCTest.h' file not found

    这个报错在几个方面.第一,它导致XCTedt依赖您的应用程序.框架,它只是在Xcode中可用.第二,你使用绝对路径,这并不保证是相同的从Mac Mac(例如,如果你安装了多个版本的Xcode). 这里 ...

  3. Python的平凡之路(20)

    (提问复习为主) 一.Django请求的生命周期      武彦涛:           路由系统 -> 视图函数(获取模板+数据=>渲染) -> 字符串返回给用户     二.路由 ...

  4. jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常

    jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常 发生这个原因是因为我们已经在实体 ...

  5. ThinkPHP(3)SQL查询语句

    ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

  6. oracle应用-表空间.用户名.权限

    oracle 数据库应用 虽然代码少但是很实用! --01.表空间create tablespace tp_hrdatafile 'E:\tp_hr01.dbf' size 10M, 'E:\tp_t ...

  7. Android开源框架:Universal-Image-Loader解析(二)MemoryCache

  8. adb catlog>d:\log.txt日志级别

    W,警告 I,通知 D,调试 E,错误 V, 到最细的日志 功能测试可以看W和E,性能测试I比较有用

  9. 使用恶意USB设备解锁 Windows & Mac 锁屏状态

    NSA专业物理入侵设备——USB Armory,可解锁任意锁屏状态的下的Windows和Mac操作系统,含最新发布的Windows10.及较早的Mac OSX El Capitan / Maveric ...

  10. Binary Tree Preorder Traversal -- LEETCODE 144

    方法一:(迭代) class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<in ...