为保持主要知识点脉络清晰,本模块没有使用Ajax技术,所以没有实现注册时光标下移即可验证用户名是否被占用功能。同时省略了客户端的JS验证用户名和密码是否符合规定的功能。注册字段只有两个,昵称和密码,昵称要求唯一,主键自增长,数据库使用MySQL。
先看看模块的文件目录结构:
下面贴上三个Servlet的源代码:
public class CheckCodeServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
BufferedImage image=new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//System.out.println(g.getClass());
Random r=new Random();
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.fillRect(0,0,60,20);
g.setColor(new Color(0,0,0));
String number=String.valueOf(r.nextInt(99999));
HttpSession session=request.getSession();
session.setAttribute("number",number);
g.drawString(number,5,15);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(r.nextInt(10),r.nextInt(10),40+r.nextInt(20),r.nextInt(20));
OutputStream out=response.getOutputStream();
//压缩图片
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
//System.out.println(encoder.getClass());
encoder.encode(image);
}
}
public class RegisterServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String nickname=request.getParameter("nickname");
String password=request.getParameter("password");
String checkcode=request.getParameter("checkcode");
HttpSession session=request.getSession();
String number=(String) session.getAttribute("number");
if(!number.equals(checkcode)){
request.setAttribute("checkcode_err","验证码填写错误");
request.getRequestDispatcher("register.jsp").forward(request, response);
return;
}
UserDAO dao=new UserDAO();
try {
User user=dao.findByNickname(nickname);
if(user!=null){
request.setAttribute("register_err","用户名已经被占用");
request.getRequestDispatcher("register.jsp").forward(request, response);
}else{
User user2=new User(nickname,password);
dao.save(user2);
response.sendRedirect("login.jsp");
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
}
public class LoginServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String nickname=request.getParameter("nickname");
String password=request.getParameter("password");
UserDAO dao=new UserDAO();
try {
User user=dao.findByNickname(nickname);
if(user!=null&& user.getPassword().equals(password)){
HttpSession session=request.getSession();
session.setAttribute("user",user);
response.sendRedirect("welcome.jsp");
}else{
request.setAttribute("login_err","用户名或者密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
}
顺便附上四个JSP文件的源代码:
register.jsp:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String info=(String)request.getAttribute("register_err");
String info2=(String)request.getAttribute("checkcode_err");
%>
<h3>用户注册页面</h3>
<form action="register" method="post">
昵称:<input type="text" name="nickname">
<span style="color:red"><%=(info==null? "":info)%></span><br>
密码:<input type="password" name="password"><br>
验证码:<input type="text" name="checkcode" size="8"><img src="checkcode" id="img1">
<a href="javascript:;"
οnclick="document.getElementById('img1').src='checkcode?'+Math.random()">换一个</a>
<span style="color:red"><%=(info2==null? "":info2)%></span><br>
<input type="submit" value="注册">
</form>
</body>
</html>
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String info=(String)request.getAttribute("login_err");
%>
<h3>登录页面</h3>
<form action="login" method="post">
昵称:<input type="text" name="nickname"><br>
密码:<input type="password" name="password">
<span style="color:red"><%=(info==null? "":info)%></span>
<br>
<input type="submit" value="登录">
</form>
</body>
</html>
welcome.jsp:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="sessionValidate.jsp" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
welcome to my website...
</body>
</html>
sessionValidate.jsp:
<%
Object obj=session.getAttribute("user");
if(obj==null){
response.sendRedirect("login.jsp");
}
%>
整个模块的打包文件已经上传至我的资源,可以免费下载。sql脚本过于简单,没有给出。IDE为myeclipse。虽然简单,但是菜鸟可以学习学习。