java day31 Servlet案例应用(简单登陆和注册)

1、案例知识点

  1. 注册功能
    1.1 数据库:DB类
    1.2 实体类:User类
    1.3 UserServlet

    • @WebServlet("/UserServlet"),通过注解完成配置信息
    • 根据action值调用对应的方法

    1.4 register.html

    • action=“UserServlet?action=register” method=“post”
  2. 登录功能
    2.1 login.html

    • action=“UserServlet”
    • <input type=“hidden” name=“action” value=“login”>

    2.2 UserServlet

    • 添加一个login的case
  3. 三大作用域
    request:请求级别的作用域 – 请求不改变数据不丢失
    session:会话级别的作用域 – 会话不关闭数据不丢失
    servletContext:服务器级别的作用域 --服务器不关闭数据不丢失

  4. jsp
    4.1 可以再html页面上编写java代码 – 本质是 Servlet
    4.2 <% 编写java代码 %>
    4.2 <%= 展示java数据 %>
    4.3 EL 表达式 ${key} – 直接在作用域中获取数据

  5. 跳转
    转发:请求不变

    • request.getRequestDispatcher(“转发的页面”).forward(request,response);

重定向:二次请求
- response.sendRedirect(“重定向的页面”);

DB.java

  • 模拟数据库,并存储用户数据
package db;

import entity.User;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author wzy
 * @Date 0026 2020-12-26 14:16
 * @Version 1.0
 */
public class DB {
    //用户表
    public static List<User> list = new ArrayList<>();

    static {
        list.add(new User(1,"zs","123","男",new String[]{"play","drink"},"guangxi"));
        list.add(new User(2,"ls","123","女",new String[]{"eat","drink"},"guangxi"));
        list.add(new User(3,"ww","123","男",new String[]{"play","drink","happy"},"guangdong"));
    }
}

User.java

用户实例类,用于定义用户属性和方法

package entity;

import java.util.Arrays;

/**
 * @Author wzy
 * @Date 0026 2020-12-26 14:14
 * @Version 1.0
 */
public class User {
    private int id;
    private String name;
    private String password;
    private String sex;
    private String[] hobbies;
    private String addres;

    public User(int id, String name, String password, String sex, String[] hobbies, String addres) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.sex = sex;
        this.hobbies = hobbies;
        this.addres = addres;
    }
    public User(String name, String password, String sex, String[] hobbies, String addres) {
        this.name = name;
        this.password = password;
        this.sex = sex;
        this.hobbies = hobbies;
        this.addres = addres;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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[] getHobbies() {
        return hobbies;
    }

    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }

    public String getAddres() {
        return addres;
    }

    public void setAddres(String addres) {
        this.addres = addres;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", hobbies=" + Arrays.toString(hobbies) +
                ", addres=" + addres +
                '}';
    }
}

CheckServlet.java

处理前端请求的类,拥有生成验证码的方法

package servlet;

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

/**
 * @Author wzy
 * @Date 0026 2020-12-26 16:34
 * @Version 1.0
 */
@WebServlet("/CheckServlet")
public class CheckServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width=100;
        int height=50;
        //1.创建带有缓冲区的图片对象
        BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //2.通拖图片对象获取画笔
        Graphics graphics = bimage.getGraphics();
        //3.设置画笔颜色
        graphics.setColor(Color.CYAN);
        //4.填充背景颜色
        graphics.fillRect(0,0,width,height);
        //5.再次设置画笔颜色
        graphics.setColor(Color.red);
        //6.设置字体颜色
        graphics.setFont(new Font("微软雅黑",Font.BOLD,30));
        //7.生成随意数字,用作验证码
        Random random = new Random();
        int code;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 4; i++) {
            code = random.nextInt(10);
            graphics.drawString(code+"",15+20*i,30);
            sb.append(code+"");
        }

        //存储数据到session中
        HttpSession session = req.getSession();
        session.setAttribute("code", sb.toString());

        //8.再次设置画笔颜色
        graphics.setColor(Color.orange);
        //9.绘制干扰线
        for (int i = 0; i < 20; i++) {
            //x的起点,y的起点,x的终点,y的终点
            graphics.drawLine(random.nextInt(width),random.nextInt(height),random.nextInt(width),random.nextInt(height));
        }
        ImageIO.write(bimage,"png",resp.getOutputStream());
    }
}

UserServlet.java

处理前端请求的类,包括用户登陆校验、用户注册等方法

package servlet;

import db.DB;
import entity.User;

import javax.jws.WebService;
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.io.IOException;

/**
 * @Author wzy
 * @Date 0026 2020-12-26 14:06
 * @Version 1.0
 */
@WebServlet("/UserServlet")     //有WebServlet注解,就无需配置web.xml文件
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String action = request.getParameter("action");
        switch (action){
            case "register":
                toRegister(request,response);
                break;
            case "login":
                toLogin(request,response);
                break;
            default:
                System.out.println("请求错误,请自行检查");
                break;
        }
    }

    private void toLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //1.获取前端发送的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        String code = request.getParameter("code");//获取用户在前端输入的验证码

        //获取session中的验证码
        String code1 = (String)request.getSession().getAttribute("code");
        if (!code1.equals(code)){
//            System.out.println("验证码错误,重新输入");
            request.setAttribute("msg","验证码错误,重新输入");
            //跳转页面      --转发
            request.getRequestDispatcher("login.jsp").forward(request,response);
            return;
        }

        //2.判断用户名与账号是否正确
        for (User u: DB.list) {
            if (u.getName().equals(username)&&u.getPassword().equals(password)){
                response.getWriter().write("<script>location.href='userIndex.jsp'</script>");
                return;
            }else {
//                response.getWriter().write("<h1>密码错误</h1>");
                request.setAttribute("password_msg","密码错误,重新输入");
                request.getRequestDispatcher("login.jsp").forward(request,response);
                return;
            }
        }
        response.getWriter().write("用户名或者密码错误,请重新输入!!!");
    }

    private void toRegister(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //1.获取前端发送的请求数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String sex = request.getParameter("sex");
        String[] hobbies = request.getParameterValues("hobbies");
        String addres = request.getParameter("addres");

        User user = new User(username, password, sex, hobbies, addres);

        //检验用户名是否存在
        for (User u:DB.list) {
            if (u.getName().equals(username)){
                //开启session,以key-value的形式存储信息,register_msg是key,用户名已存在,请重新注册是value
                request.setAttribute("register_msg","用户名已存在,请重新注册");
                request.getRequestDispatcher("register.jsp").forward(request,response);
//                response.getWriter().write("用户名已存在");
                return;
            }
        }

        //3.将注册成功的用户数据存储到数据表里
        user.setId(DB.list.size()+1);
        if (sex.equals("man")){
            user.setSex("男");
        }else {
            user.setSex("女");
        }
        DB.list.add(user);

        response.getWriter().write("注册成功,请点击<a href='login.jsp'>登录</a>进行登录");
    }
}

index.html

首页

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 0026 2020-12-26
  Time: 17:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="login.jsp">登录</a>
<a href="register.jsp">注册</a>

</body>
</html>

login.jsp

登陆页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/12/26 0026
  Time: 下午 4:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--
    表单提交方式为get
    action属性值携带的数据会被表单覆盖
-->
<%--<%
    //编码java代码
    String msg = (String)request.getAttribute("msg");
%>
<%=
    //展示java代码
    msg == null?"":msg
%>--%>
<%--自动从作用域中获取代码 request-> session --%>

<form action="UserServlet">
    <input type="hidden" value="login" name="action">
    账户:<input type="text" name="username"><br/>
    密码:<input type="text" name="password"> <span style="color: red">${password_msg}</span> <br/>
    <img src="CheckServlet"><br>
    <input type="text" name="code"> <span style="color: red">${msg}</span> <br/>
    <input type="submit" value="登录">
</form>
</body>
</html>

register.html

注册页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 0026 2020-12-26
  Time: 17:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--
    表单如果填写不完善,不允许提交表单信息,并提示用户对应的选项未填写
-->
<form action="UserServlet?action=register" method="post">
    账户:<input type="text" name="username"> <span style="color: red"> ${register_msg} </span> <br/>
    密码:<input type="text" name="password"><br/>
    性别:<input type="radio" name="sex" value="man"><input type="radio" name="sex" value="women"><br/>
    爱好:<input type="checkbox" name="hobbies" value="eat"><input type="checkbox" name="hobbies" value="drink"><input type="checkbox" name="hobbies" value="play"><input type="checkbox" name="hobbies" value="happy"><br/>
    地址:<select name="addres">
    <option value="guangdong">广东</option>
    <option value="guangxi">广西</option>
</select><br/>
    <input type="submit" value="注册"/>
</form>
</body>
</html>

userIndex.html

用户中心页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 0026 2020-12-26
  Time: 17:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户首页
</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值