重定向&转发&验证码

存储注册信息

创建实体类(entity)

package com.qf.entity;

import java.util.Arrays;

//实体类
public class Student {
    private String username;
    private String password;
    private String sex;
    private String[] hobby;
    private String addrs;

    public Student() {
    }

    public Student(String username, String password, String sex, String[] hobby, String addrs) {
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.hobby = hobby;
        this.addrs = addrs;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public String getAddrs() {
        return addrs;
    }

    public void setAddrs(String addrs) {
        this.addrs = addrs;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", hobby=" + Arrays.toString(hobby) +
                ", addrs='" + addrs + '\'' +
                '}';
    }
}

创建模拟数据库(DB)–DBCenter–list

package com.qf.DB;

import com.qf.entity.Student;

import java.util.ArrayList;
import java.util.List;
//模拟数据库
public class DBCenter {
    //模拟数据表
    public static List<Student> list = new ArrayList<>();

    //验证码
    //public static String code;

    static {
        list.add(new Student("zs","123","man",new String[]{"sleep"},"guandong"));
        list.add(new Student("ls","123","man",new String[]{"sleep"},"jiangxi"));
    }

}

业务:判断用户名是否存在,存在则不允许注册

package com.qf.servlet;

import com.qf.DB.DBCenter;
import com.qf.entity.Student;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //1.处理乱码问题
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2.获取表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String sex = request.getParameter("sex");
        String[] hobby = request.getParameterValues("hobby");
        String addrs = request.getParameter("addrs");
        //3.进行数据判断,判断用户名是否存在
        List<Student> list = DBCenter.list;
        for (Student stu: list) {
            if(stu.getUsername().equals(username)){
                response.getWriter().write("用户名已存在,3秒后回到注册页面,或点击<a href='register.html'>注册页面<a/>");
                //设置响应头,使页面3秒后跳转到指定路径,第一个参数refresh是刷新
                response.setHeader("refresh","3;url=register.html");
               return;
            }
        }
        //4.创建实体对象,并且存进数据库
        Student student = new Student(username, password, sex, hobby, addrs);
        list.add(student);
        response.getWriter().write("注册成功,3秒后跳转到登录页面,或点击<a href='login.jsp'>登录页面</a>");
        response.setHeader("refresh","3;url=login.jsp");

    }
}

登录功能

业务:判断用户名和密码是否一致

package com.qf.servlet;

import com.qf.DB.DBCenter;
import com.qf.entity.Student;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

/*
*   jsp:html+java
* */
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.乱码处理
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2.获取表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //验证码判断
        //前端输入的验证码
        String code = request.getParameter("code");
        /*存放在数据库中--不可行,因为多用户的话刷新会将前一个的值覆盖
        if(!DBCenter.code.equals(code)){
            request.setAttribute("msg","验证码错误");
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }*/

        //存放在ServletContext中--不可行,服务器级别,
        /*String code1 = (String)getServletContext().getAttribute("code");
        if(!code1.equals(code)){
            request.setAttribute("msg","验证码错误");
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }*/

        //存放在session中--可行
        String code1 = (String)request.getSession().getAttribute("code");
        if(!code1.equals(code)){
            request.setAttribute("msg","验证码错误");
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }

        //存放在request中--不可行
        /*String code1 = (String) request.getAttribute("code");
        if(!code1.equals(code)){
            request.setAttribute("msg","验证码错误");
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }*/

        //3.判断用户名和密码是否正确
        List<Student> list = DBCenter.list;
        for (Student stu:list){
            if(stu.getUsername().equals(username) && stu.getPassword().equals(password)){
                //登录成功
                response.getWriter().write("登录成功,3秒后跳转到首页;或者点击<a href='index.html'>首页</a>");
                response.setHeader("refresh","3;url=index.html");
                return;
            }
        }
        /*//登录失败
        response.getWriter().write("登录失败,3秒后跳转到登录页面;或者点击<a href='login.html'>登录页面</a>");
        response.setHeader("refresh","3;url=login.html");*/

        //登录失败,提示客户端用户名或者密码错误
        //跳转:转发,重定向

        //http://localhost:8080/Day37_req_resp/LoginServlet
        //重定向--二次请求,url地址改变
        //response.sendRedirect("register.html");

        //转发--请求不改变,url地址不改变
        //request.getRequestDispatcher("login.jsp").forward(request,response);

        //服务器中存储数据的作用域:request(请求级别),session(会话级别)

        //1.request(把数据存放在请求中)+转发--可行
        request.setAttribute("msg","用户名或密码错误");
        request.getRequestDispatcher("login.jsp").forward(request,response);

        //2.request+重定向--不可行,因为请求变了,第二次请求的request中没有msg
        //request.setAttribute("msg","用户名或密码错误");
        //response.sendRedirect("login.jsp");

        //3.session+转发--可行
        //HttpSession session = request.getSession();//获取session对象
        //session.setAttribute("msg","用户名或密码错误");//在session中存储数据

        //request.getSession().setAttribute("msg","用户名或密码错误");
        //request.getRequestDispatcher("login.jsp").forward(request,response);

        //4.session+重定向--可行
        //request.getSession().setAttribute("msg","用户名或密码错误");
        //response.sendRedirect("login.jsp");


    }
}

  • 重定向和转发:
    • 重定向二次请求,url地址改变
    • 转发一次请求,url地址不变
  • request和session:
    • request是请求级别的作用域,生命周期为一次请求
    • session是会话级别的作用域,生命周期为整个会话,每个用户独有
    • ServletContext是服务器级别的作用域,生命周期为服务器

JSP:本质是Servlet文件,等于html+java
<% %>:在jsp中执行java代码
<%= %>:在jsp中显示java数据

	<%
        //从请求中获取数据
        String msg = (String)request.getAttribute("msg");

        //从session中获取数据
        //String msg = (String)request.getSession().getAttribute("msg");
    %>

创建验证码

package com.qf.servlet;

import com.qf.DB.DBCenter;

import javax.imageio.ImageIO;
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.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class CheckServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.实例化带缓冲区的图像数据对象
        int width = 110;
        int height = 50;
        //第一个参数为图像的宽,第二个为高,第三个为图像颜色的类型(三原色)
        BufferedImage bImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        //2.通过对象获取画笔
        Graphics graphics = bImage.getGraphics();
        //3.设置画笔颜色--背景色
        graphics.setColor(Color.GREEN);
        //4.填充背景颜色
        graphics.fillRect(0,0,width,height);//x轴开始,y轴开始,x轴结束,y轴结束
        //5.改变画笔颜色
        graphics.setColor(Color.RED);
        //6.设置字体
        graphics.setFont(new Font("宋体",Font.BOLD,20));
        //7.绘制验证码
        int code = 0;
        Random ran = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0;i <4;i++){
            code = ran.nextInt(10);
            //给图像绘制验证码--内容,x轴,y轴
            graphics.drawString(code+"",20+20*i,30);
            sb.append(code+"");
        }
        //8.添加干扰线
        graphics.setColor(Color.YELLOW);
        for (int i = 0;i < 10;i++){
            graphics.drawLine(ran.nextInt(width),ran.nextInt(height),ran.nextInt(width),ran.nextInt(height));
        }

        //存储验证码
        //1.存储在数据库--不可行
        //DBCenter.code = sb.toString();

        //2.ServletContext--作用域为服务器级别--不可行
        //getServletContext().setAttribute("code",sb.toString());

        //3.session--作用域为会话级别--可行
        request.getSession().setAttribute("code",sb.toString());

        //4.request--作用域请求级别
        //request.setAttribute("code",sb.toString());

        //9.把绘制好的图像发送到前端页面
        //第一个参数为图像对象,第二个参数为图像的格式,第三个参数为响应输出流
        ImageIO.write(bImage,"jpg",response.getOutputStream());
    }
}

ServletContext

服务器级别,存放访问量等公用的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值