总结1 有关servlet验证码作业

习气不正,治学不端,不可达也,知行合一,不骄不躁。自主学习,及时学习,及时反思。
jsp内置对象request
request.getParamter(String s)该页面获取它的上一个jsp提交的数据。
jsp页面是通过form表单的action来跳转页面,form里可以插入点击事件
登陆
完了之后它里面的按按钮又可以插入响应事件或者按钮。
request和session都是jsp内置对象
session.setAttribute将数据保存在session,在用的时候通过getAttribute获取,session是tomcat响应浏览器http请求而为每一个浏览器分配session对象,保存它所申请的数据信息,它是服务器创建返回给浏览器的,浏览器只进行了保存。
注意:你所编写的代码都是要经过tomcat服务器再反映到浏览器的,session作用对象是服务器,而浏览器只是显示而已
在这里插入图片描述
Login.jsp

<% String path = request.getContextPath();%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录系统</title>
</head>
<body>
<form method="get" id="form" action="http://localhost:8080/example8_1_war_exploded/LoginServlet1?user=admin&password=666">
    <!--嵌入外部代码-->

        <tr>
        <td>用户名</td>
    <td><input type="text" id="username" name="username" value="${username}" placeholder="请输入用户名"/></td>
        </tr>
        <tr>
    <br><br><td>密码</td>
            <td><input type="password" id="password" name="password" placeholder="请输入密码"/></td>
        </tr>


    <br><td>验证码</td>
        <td><input type="text" name="yzm" id="yz">
            <img alt="验证码看不清,换一张" src="YZMServlet" id="yzm" onclick="changeImg()">
            <a href="#" onclick="changeImg()">看不清,换一张</a></td>

    <br><button type="button" name="button" value="提交"  onclick="loginVerify()">登陆</button>
        ${error}

</form>
</body>

</html>
<script>
    <!--嵌入外部代码-->
    function loginVerify(){
        var username=document.getElementById("username").value;
        var password=document.getElementById("password").value;
        var yam=document.getElementById("yz").value;
        if(username ==''){
            alert('用户名不能为空,请您输入');
            return;

        }
        if(password ==''){
            alert('密码不能为空,请您输入');
            return;

        }
        if(yam ==''){
            alert('验证码不能为空,请您输入');
            return;

        }



        <!-- -->
        document.getElementById("form").submit();
    }
    function changeImg()
    {

        document.getElementById("yzm").src="YZMServlet?i="+Math.random();
    }

</script>
</script>

中间无界面servlet

package org.example;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

//@WebServlet(name = "LoginServlet1", value = "/LoginServlet1")
public class LoginServlet1 extends HttpServlet {
    @Override
    protected 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");
        String password = request.getParameter("password");
        String yzm = request.getParameter("yzm");
        //HttpSession session = request.getSession();
        //获取session标记的值,即服务端生成的验证码的值
        //String yzm2 = (String) session.getAttribute("str");
        response.setContentType("text/html;charset=utf-8");
        //客户端那边输入的验证码
        String cCode = request.getParameter("yzm");
        //生成验证码页面放入域中的验证码
        String sCode = (String) request.getSession().getAttribute("code");
        if (cCode.equals(sCode)) {
            if ("admin".equals(username) && "666".equals(password)) {
                //密码正确,跳转
                request.setAttribute("username", username);
                request.getRequestDispatcher("/index.jsp").forward(request, response);
            } else {
                request.setAttribute("username", username);
                request.setAttribute("error", "用户名或密码错误,请重新输入!");
                request.getRequestDispatcher("/Login.jsp").forward(request, response);//其中/为系统设置的最初的页面
            }
        }
        else{
            response.getWriter().print("验证码错误!!1!");
        }

    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


验证码
package org.example;

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

//@WebServlet(name = “YZMServlet”, value = “/YZMServlet”)
public class YZMServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 120;//生成图片的宽度
public static final int HEIGHT = 30;//生成图片的高度
public static final int WORDS_NUMBER = 4;//验证码中字符的个数

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub

    String createTypeFlag = req.getParameter("createTypeFlag");//接收客户端传递的createTypeFlag标识
    //在内存中创建一张图片
    BufferedImage bi = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_3BYTE_BGR);
    //得到图片
    Graphics g = bi.getGraphics();
    //设置图片的背景色
    setBackGround(g);
    //设置图片的边框
    setBorder(g);
    //在图片上画干扰线
    drawRandomLine(g);
    //在图片上放上随机字符
    String randomString = this.drawRandomNum((Graphics2D)g, createTypeFlag);

    //将随机数存在session中
    req.getSession().setAttribute("code", randomString);
    System.out.println(randomString);
    //设置响应头通知浏览器以图片的形式打开
    resp.setContentType("image/jpeg");

    //设置响应头控制浏览器不要缓存
    resp.setDateHeader("express", -1);
    resp.setHeader("Cache-Control", "no-cache");
    resp.setHeader("Pragma", "no-cache");

    //将图片传给浏览器
    ImageIO.write(bi, "jpg", resp.getOutputStream());
}

//设置图片背景色
//@param g
private void setBackGround(Graphics g) {
    //设置颜色
    g.setColor(Color.WHITE);
    //填充区域
    g.fillRect(0, 0, WIDTH, HEIGHT);
}

/*
 * 设置图片的边框
 * @param g
 * */

private void setBorder(Graphics g) {
    //设置边框颜色
    g.setColor(Color.BLUE);
    //边框区域
    g.drawRect(1, 1, WIDTH - 2, HEIGHT -2);
}

/*
 * 在图片上画随机线条
 * @param g
 * */
private void drawRandomLine(Graphics g) {
    //设置颜色
    g.setColor(Color.GREEN);
    //设置线条个数并画线
    for ( int i = 0 ; i < 3 ; i++ ) {
        int x1 = new Random().nextInt(WIDTH);
        int y1 = new Random().nextInt(HEIGHT);
        int x2 = new Random().nextInt(WIDTH);
        int y2 = new Random().nextInt(HEIGHT);
        g.drawLine(x1, y1, x2, y2);
    }
}

/*
 * 在图片上画随机字符
 * @param g
 * @param createTypeFlag
 * @return String
 * */
private String drawRandomNum(Graphics g,String createTypeFlag) {
    //设置颜色
    g.setColor(Color.RED);
    g.setFont(new Font("宋体",Font.BOLD,20));

    //数字字母的组合
    String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
    String baseNum = "0123456789";
    String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
    if ( createTypeFlag != null  && createTypeFlag.length() > 0 ) {
        if( createTypeFlag.equals("nl") ) {
            //截取数字和字母的组合
            return createRandomChar((Graphics2D) g,baseNumLetter);
        } else if ( createTypeFlag.equals("n") ) {
            //截取数字的组合
            return createRandomChar((Graphics2D) g,baseNum);
        } else if ( createTypeFlag.equals("l") ) {
            //截取字母的组合
            return createRandomChar((Graphics2D) g,baseLetter);
        }
    } else {
        //截取数字和字母的组合
        return createRandomChar((Graphics2D) g,baseNumLetter);
    }
    return "";
}

/*
 * 创建随机字符
 * @param g
 * @param baseChar
 * @return String
 * */
private String createRandomChar(Graphics2D g , String baseChar) {
    StringBuffer b = new StringBuffer();
    int x = 5;
    String ch = "";
    for ( int i = 0 ; i < WORDS_NUMBER ; i++ ) {
        //设置字体的旋转角度
        int degree = new Random().nextInt() % 30;
        ch = baseChar.charAt(new Random().nextInt(baseChar.length())) + "";
        b.append(ch);

        //正向角度
        g.rotate(degree  * Math.PI / 180 , x,20);
        g.drawString(ch, x, 20);
        //反向角度
        g.rotate(-degree  * Math.PI / 180 , x,20);
        x+=30;
    }
    return b.toString();
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    this.doPost(req, resp);
}

}

web.xml
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值