传进来什么
根据第一篇
中js的逻辑判断(逻辑问题先不看), 基本的学号、账号和密码长度之类不符的都已经筛完了, 能够通过表单提交的参数值只有是否重复需要判断
如果未重复, 插入用户数据
同时要记录注册结果, 以页面的形式反馈给用户
如何判断
1. 根据上一篇创建的user表信息可知, user表以User字段为主码, 所以要判断的就是传进来的user是否已经在user表的User字段值集合中
2. 所以, 需要对数据库进行查询, 获取User字段值集合
3. 如何未出现重复, 还要把新的用户信息插入user表中
4. 把能够体现判断结果状态的对象设置为请求对象的属性
5. 把请求分派给一个jsp
新建一个名为registerServlet的servlet, 用来处理该请求
在web.xml中配置registerServlet
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>adrui.registerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register.do</url-pattern>
<!-- 这里这个映射的url要和login.html中action的属性值一致()表示同意虚拟目录 -->
</servlet-mapping>
registerServlet.java
package adrui;
import java.io.IOException;
import javax.servlet.*;
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 java.sql.*;
/**
* Servlet implementation class registerServlet
*/
@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Statement state = null;
private static String sql = null;
private static ResultSet rs = null;
/**
* @see HttpServlet#HttpServlet()
*/
public registerServlet() {
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)
*/
/**表单里是method="POST"*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
String sno = request.getParameter("Sno");
String user = request.getParameter("LoginUser");
String pass = request.getParameter("LoginPass");
//获取register.html中输入的参数值(参数名和name属性值对应)
Connection conn = (Connection)(getServletContext().getAttribute("conn"));
//根据上下文获取数据库连接对象
try{
state = conn.createStatement();//根据连接创建陈述式对象
sql = "select User from user";
rs = state.executeQuery(sql);//执行查询语句
boolean f = true;
while(rs.next()){//遍历
if(rs.getString(1).equals(user)){
f = false;
break;
}
}
String res = "false";//res作为标识结果的对象
if(f){//未重复
res = "true";
//System.out.println("f = true");
sql = "insert into user values('" + sno + "', '" + user + "', '" + pass + "')";
state.executeUpdate(sql);//插入数据
}
request.setAttribute("res", res);//设置请求属性
RequestDispatcher view = request.getRequestDispatcher("register.jsp");
view.forward(request, response);//分派
}
catch(Exception e){
e.printStackTrace();
}
}
}
register.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="10;url=login.html">
<title>Register Result</title>
</head>
<body>
<!-- 获取标识结果对象 -->
<% String f = (String)request.getAttribute("res");
if(f.equals("true")){
%>
<p>恭喜您注册成功, <span style='font-family:"consolas";' id="cnt"></span>秒后将自动跳转登录页面</p>
<a href="login.html">点击跳转</a>
<script type="text/javascript">
var sec = 10;
function cnt()
{
document.getElementById("cnt").innerHTML = sec--;
setTimeout("cnt()", 1000);
}
window.onload = cnt();<!-- 计数器 -->
</script>
<%
}else{
%>
<p>抱歉, 该用户名已被注册</p>
<p><a href="register.html">点击返回注册页面</a></p>
<p><a href="login.html">去往登录页面</a></p>
<% } %>
</body>
</html>
测试:
1.
2.
以上