跟着书上做的案例,主要流程是这样的:
案例代码如下:
/*
* 用户的用户名和密码
*
* */
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
登录界面
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/*
* 该文件是本网站的首页,如果没有登录,那提示需要登陆
* 登录后则显示登录信息,用户名及退出按钮-LogoutServlet
* 通过获取保存用户信息的Session对象
*
* */
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.getWriter().print("这里是首页,");
//创建或获取保存用户信息的Session对象
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
if(user!=null){
response.getWriter().print("您已经登录,欢迎你!"+user.getUsername()+"!");
response.getWriter().print("退出");
//创建Cookie存放Session的标识号
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*30);
cookie.setPath("/LoginDemo");
response.addCookie(cookie);
}else{
response.getWriter().print("您还没有登录,请登录");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 该文件判断用户账号密码正确性
* 当账号密码正确时,跳转到首页IndexServlet
* 当账号密码错误时,通过设置refresh,3秒后跳转到登录界面Login.html
*
* */
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String username=request.getParameter("username");
String password=request.getParameter("password");
String checkCode=request.getParameter("check_code");
String savedCode=(String)request.getSession().getAttribute("check_code");
PrintWriter out = response.getWriter();
//假设正确用户为admin 密码admin。
if(("admin").equals(username)&&("admin").equals(password)&&checkCode.equals(savedCode)){
User user=new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user", user);
response.sendRedirect("/LoginDemo/IndexServlet");
}else if(checkCode.equals(savedCode)){
out.write("用户名或密码错误,登陆失败!");
//跳转到Login.html
out.write("3秒后跳转到登录界面");
response.setHeader("refresh", "3;url='/LoginDemo/Login.html'");
}else{
out.write("验证码错误,登陆失败!");
//跳转到Login.html
out.write("3秒后跳转到登录界面");
response.setHeader("refresh", "3;url='/LoginDemo/Login.html'");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/*
* 产生验证图片
* */
public class CheckServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static int WIDTH=60;//验证码图片宽度
private static int HEIGHT=20;//验证码图片高度
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
HttpSession session = request.getSession();
ServletOutputStream sos = response.getOutputStream();
//设置浏览器不要缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//创建内存图像并获得图像上下文
BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//产生随机的认证码
char[] rands = generateCheckCode();
//产生图像
drawBackground(g);
drawRands(g,rands);
//结束图像的绘制过程,完成图像
g.dispose();
//将图像输出到客户端
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(image, "JPEG", bos);
byte[] buf=bos.toByteArray();
response.setContentLength(buf.length);
//下面的语句也可写成:bos.writeTo(sos);
sos.write(buf);
bos.close();
sos.close();
//将当前验证码存入到Session中
session.setAttribute("check_code", new String(rands));
//直接使用下面的代码出现问题,Session对象必须在提交响应前获得
//request.getSession().setAttribute("check_code",new String(rands));
}
//生成一个4个字符的验证码
private char[] generateCheckCode(){
//定义验证码的字符表
String chars = "0123456789abcdefghigklmnopqrstuvwxyz";
char[] rands = new char[4];
for(int i =0;i<4;i++){
int rand = (int)(Math.random()*36);
rands[i] = chars.charAt(rand);
}
return rands;
}
private void drawRands(Graphics g,char[] rands){
g.setColor(Color.BLACK);
g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));
//在不同的高度上输出验证码的买个字符
g.drawString(""+rands[0], 1, 17);
g.drawString(""+rands[1], 16, 15);
g.drawString(""+rands[2], 31, 18);
g.drawString(""+rands[3], 46, 16);
System.out.println(rands);
}
private void drawBackground(Graphics g){
//画背景
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机产生120个干扰点
for(int i =0;i<120;i++){
int x=(int)(Math.random()*WIDTH);
int y=(int)(Math.random()*HEIGHT);
int red=(int)(Math.random()*255);
int green=(int)(Math.random()*255);
int blue=(int)(Math.random()*255);
g.setColor(new Color(red,green,blue));
g.drawOval(x, y, 1, 0);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 该文件注销用户功能
* 注销后跳转到首页
*
* */
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//将Session对象中的User对象移除
request.getSession().removeAttribute("user");
response.sendRedirect("/LoginDemo/IndexServlet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
感觉我的基础不好啊,╮(╯﹏╰)╭