一、代码部分
这里只列出主要代码。
(1)register.jsp
<script type="text/javascript">
//验证表单
function check(input) {
var content=input.value;//获取输入值
var id="msg_"+input.id;
var msg=document.getElementById(id);
var regexp=null;
if(content=="") {
msg.innerHTML="<img src='image/false.gif'/>不能为空";
return false;
}
else{
if(input.id=="userName") {
if(content.match("\\w{6,16}")!=content) {
msg.innerHTML="<img src='image/false.gif'/>用户名由数字字母组成,长度在6-16范围内";
return false;
} else{
msg.innerHTML="<img src='image/right.gif'/>";
}
} else if(input.id=="password") {
regexp=/[a-z][A-Z][0-9]/;
var result=content.match(regexp);
if(content.match(".{6,16}")!=content) {
msg.innerHTML="<img src='image/false.gif'/>密码必须是6到16位";
return false;
}else{
msg.innerHTML="<img src='image/right.gif'/>";
}
} else if(input.id=="repassword") {
var password=document.getElementById("password");
if(input.value!=password.value) {
msg.innerHTML="<img src='image/false.gif'/>密码确认和密码不一致";
return false;
} else{
msg.innerHTML="<img src='image/right.gif'/>";
}
}else if(input.id=="tel") {
if(content.match("\\d{11}")!=content) {
msg.innerHTML="<img src='image/false.gif'/>手机号码格式不正确";
return false;
} else{
msg.innerHTML="<img src='image/right.gif'/>";
}
}else{
msg.innerHTML="<img src='image/right.gif'/>";
}
}
}
</script>
<body>
<form action="RegisterServlet" method="post">
用户名:<input type="text" id="userName" name="userName" οnblur="check(this)"/>
<span style="color:red;" id="msg_userName"><img src="image/require.gif"/>用户名6-16位</span><br/>
密 码:<input type="password" id="password" name="password" οnblur="check(this)"/>
<span style="color:red;" id="msg_password"><img src="image/require.gif"/>密码6-16位,必须包含字母数字</span><br/>
密码确认:<input type="password" id="repassword" name="repassword" οnblur="check(this)"/>
<span style="color:red;" id="msg_repassword"><img src="image/require.gif"/></span><br/>
邮 件:<input type="email" id="email" name="email" οnblur="check(this)"/>
<span style="color:red;" id="msg_email"><img src="image/require.gif"/></span><br/>
个人简介:<textarea rows="3" cols="30" id="introduce" name="introduce" οnblur="check(this)"></textarea>
<span style="color:red;" id="msg_introduce"><img src="image/require.gif"/></span><br/>
上传头像<input type="text" id="photo" name="photo" οnblur="check(this)"/>
<span style="color:red;" id="msg_photo"><img src="image/require.gif"/></span><br/>
手机号码:<input type="tel" id="tel"name="tel" οnblur="check(this)"/>
<span style="color:red;" id="msg_tel"><img src="image/require.gif"/></span><br/>
<input type="hint" name="user" value="Customer" style="display:none"/>
<input type="submit" name="submit" value="注册" οnsubmit="return check()"/>
</form>
</body>
(2)RegisterServlet.java
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取从客户端发送的数据
String userName=request.getParameter("userName");
System.out.println("从客户端获取的数据是"+userName);
String password=request.getParameter("password");
String photo=request.getParameter("photo");
String tel=request.getParameter("tel");
String email=request.getParameter("email");
String introduce=request.getParameter("introduce");
User user=new User(userName,password,email,introduce,photo,tel);
UserDao dao=new UserDao();
System.out.println("dao已经执行");
int result=dao.add(user);
PrintWriter out=response.getWriter();
if(result>0) {
request.setAttribute("msg","注册成功,请登录");
request.getRequestDispatcher("index.jsp").include(request, response);
} else{
request.setAttribute("msg","注册失败,请稍后重试");
request.getRequestDispatcher("index.jsp").include(request, response);
}
}
二、小结
在做这个模块的过程中遇到许多问题,现在都已经解决。
1、在Oracle中使用PreparedStatement对象时应该注意,setXXX( )方法的index是从1开始的。
2、JSP变量的可见性,即<%! int i=0;%>和<%int i=0;%>的区别
<%! %>内的变量是一个成员变量,而声明在<% %>内的变量是个局部变量。
3、HTML5中的textarea标签没有正常显示,并且将写在textarea后的元素覆盖,原因是textarea标签没有正确闭合,
正确的写法是<textarea></textarea>而不是<textarea/>
4、使用PreparedStatement的execute( )方法进行插入数据的操作时,执行成功,却返回false,原因如下:
boolean execute( )返回的是一个布尔值,以指示第一个结果的形式,如果结果是ResultSet对象,则返回true,否则返回false.
而boolean executeUpdate( ) 返回的是SQL 数据操作语言 (DML) 语句的行数, 对于无返回内容的 SQL 语句,返回 0。
5、点击button按钮,跳转到另一个页面的方法
<input type="button" value="注册" οnclick="window.location=‘register.jsp’"/>