Servlet页面注册用户的小程序(一)
本实例实现用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()"> <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页面注册用户的小程序(一)的更多相关文章
- Servlet页面登录的数据库验证程序(二)
这个程序在原来的程序基础上加入了密码验证. 一.增加一个error.jsp页面,用于跳转出现用户名和密码错误显示信息. <%@ page language="java" im ...
- Servlet页面登录的数据库验证程序(一)
一.基本思想是MVC模式,一个登录页面login.jsp,一个服务器处理程序Servlet.java,一个MySql数据库userinfo. 另外还有相关的数据封装类User和数据库连接类GetDat ...
- 小程序内嵌H5页面判断微信及小程序环境
判断微信及小程序环境 1.H5页面引入jweixin-1.3.2.js 2. var ua = window.navigator.userAgent.toLowerCase(); if(ua.matc ...
- H5页面跳转到小程序代码
1.H5页面加代码直接打开小程序 <script type="text/javascript src="https://res.wx.qq.com/open/js/jweix ...
- 判断页面环境是否在小程序的webview中
最近公司需要做小程序项目,但是又希望能够快速开发,就想着把web端的响应式页面放到webview里快速开发.但在判断页面环境的时候出现一些问题. 环境问题 用小程序提供的wx.miniProgram. ...
- 第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
文章目录 1.注册微信小程序账号 1.1 小程序的注册流程 1.2 登录小程序账号 2.下载微信小程序开发者平台 3.新建一个小程序 3.1 点击加号 3.2 填写项目目录和小程序ID 3.3 点击确 ...
- 判断H5页面环境是否在小程序的webview中
用小程序提供的wx.miniProgram.getEnv可以获取环境参数,但是它有个问题就是无法在非微信环境下判断.所以在使用wx.miniProgram.getEnv前得先判断是否在微信环境中. 解 ...
- Page页面生命周期——微信小程序
onLoad:function (options) { //页面初始化 console.log('index Load') }, onShow:function () { // ...
- 原创:从零开始,微信小程序新手入门宝典《一》
为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...
随机推荐
- C# SQLite编程总结
1.如果自己手动创建了数据库和字段,则不需要再创建table,基本流程: 1)SQLiteConnectionStringBuilder sb = new SQLiteConnectionString ...
- iOS 页面显示在键盘之上
美丽又可爱的UED妹子文晓的给我提了一个问题,就是在键盘升起的时候,添加的加载页面(loading)被键盘挡住了. 看到问题之后我就想到了问题的所在,因为以前我可敬可爱的领导给我们科普过,说UIAla ...
- .net core 学习笔记(1)-分页控件的使用
最近有个小项目,用.net core开发练练手,碰到的第一个问题就是分页控件的问题,自己写太费时间,上网查了下,发现有人已经封装好了的,就拿过来用了,分页控件github:https://github ...
- Hadoop入门系列一
作者:Aitian Ma链接:https://www.zhihu.com/question/24965053/answer/102858134来源:知乎著作权归作者所有,转载请联系作者获得授权. Ha ...
- 对于undefined和null,还有处理这一类的数组
var total=0; var data=new Array(5);//定义了data数组,length为5,但是都是元素都是undefined. for(i=0;i<data.length; ...
- TcpListener的异步调用内存泄漏---最近测试结果,没有泄露
我后来加大了client的连接/断开的次数(500,1000),Server端的连接被释放了. 这说明: 1. 此代码是 可以正常工作的. 2.TcpListener/TcpListener的asyn ...
- Xcode 7.0升级后的bitcode
iOS 9.0中加入了一个新的功能,bitcode, 使用bitcode优化的app,体积可以变得更小. Apple可以在提交app后,向9.0及以上版本用户提供优化的小体积版本,向其他用户提供常规版 ...
- C#方法参数传递机制
1:value(值传递).ref(引用传递).out(输出传递) ref和out使用效果上面是等效的,它们的区别在于:参数标记为ref,那么必须在调用函数之前初始化参数的值:参数标记为out,调用函数 ...
- SQL Server 简介
什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.是以一定方式储存在一起.能为多个用户共享.具有尽可能小的冗余度的特点.是与应用程序彼此独立的数据集合. SQL S ...
- 移动安全初探:窃取微信聊天记录、Hacking Android with Metasploit
在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对 ...