习气不正,治学不端,不可达也,知行合一,不骄不躁。自主学习,及时学习,及时反思。
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 {@Overrideprotected 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!");}}@Overrideprotected 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 stubString 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 stubthis.doPost(req, resp);
}

}

web.xml

总结1 有关servlet验证码作业相关推荐

  1. Servlet验证码功能

    Servlet验证码功能 创建验证码生成Servlet package com.pc.verifycode;import java.awt.Color; import java.awt.Font; i ...

  2. java servlet验证码_Servlet 实现验证码

    分析 生成图片实现类 ① 定义BufferedImage 对象 ② 获得 Graphics 对象 ③ 通过 Random 产生随机验证码信息 ④ 使用 Graphics 绘制图片 ⑤ 记录验证码信息到 ...

  3. servlet验证码

    所谓验证码(CAPTCHA),就是将一串随机产生的数字或符号,生成一幅图片,由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能. 验证码的主要作用一般是防止批量注册的和恶 ...

  4. 实战SSM_O2O商铺_14【商铺注册】View层之验证码kaptcha组件

    文章目录 Kaptcha概述 maven依赖 web.xml配置Kaptcha对应的servlet,设置属性 页面 shopoperation.html中定义组件 common.js shopoper ...

  5. 【途牛旅游项目】02 - 登录功能实现 - 验证码功能 - ajax实现登录

    文章目录 登录功能分析图解 最终实现截图 实现登录功能 1. 创建测试类 2. 创建业务层UserService 3. 创建实体类 - User用户类和Msg错误提示类 4. 创建dao层 5. 创建 ...

  6. java ee web高级,Java EE Web高级开发案例

    核心提示:Java EE Web高级开发案例 内容简介:<Java EE Web高级开发案例>充分体现了高等职业教育的特点,突出了理论和实践的紧密结合,以充分掌握基本技术技能和必要的基本知 ...

  7. Seam - 无缝集成 JSF,第 3 部分: 用于 JSF 的 Ajax

    Seam - 无缝集成 JSF,第 3 部分: 用于 JSF 的 Ajax 用 Seam Remoting 和 Ajax4jsf 无缝熔接客户机和服务器 文档选项 未显示需要 JavaScript 的 ...

  8. 【途牛旅游项目】项目环境搭建,实现登陆功能

    项目准备 熟悉静态页面 查看真实在线的途牛旅游项目 其实也是一个商城而已,重点项目搭建,核心模块:登录 前言 (1)前言 为了巩固web基础知识,提升综合运用能力,故而讲解此案例. 要求,每位同学能够 ...

  9. java ee web pdf_Java EE Web高级开发案例 PDF扫描版[69MB]

    Java EE Web高级开发案例 内容简介: <Java EE Web高级开发案例>充分体现了高等职业教育的特点,突出了理论和实践的紧密结合,以充分掌握基本技术技能和必要的基本知识为出发 ...

最新文章

  1. Svg 嵌入可编辑的div
  2. 用python 中的链表 实现 截取其中一部分_Python数据结构——链表的实现
  3. 什么是Protocol Buffers / protobuf / protobuffer?一种服务器和客户端的消息交互方式
  4. 苹果应用审核团队:每人日审百款 App!
  5. 两数相加—C语言逐位相加版(注释详尽)
  6. JAVA集合四:比较器--类自定义排序
  7. Arcgis 如何将大量数据转换成csv导出
  8. vmcore分析和实战
  9. 台式计算机鼠标应该插哪里,鼠标插在电脑哪里 鼠标的usb接口没反应如何解决...
  10. Confluence 6 使用 Decorator 宏
  11. 计算机端口25,在Windows 下关闭21\23\25端口的方法 -电脑资料
  12. (转帖)-对乒乓球的思考
  13. Laravel学习笔记汇总——Eloquent Model模型和数据库操作
  14. html5 dom video,HTML5 / HTML5 video - 使用 DOM 进行控制 - 汇智网
  15. alios是安卓吗_全面了解AliOS、Android、QNX三大系统
  16. Mac Eclips安装Activiti Designer插件
  17. 兴趣社区圈子论坛系统搭建教程,教你上线自己的论坛圈子系统。
  18. 阿里执行副主席蔡崇信投资NBA篮网队;工信部约谈运营商,不得限制用户资费选择丨价值早报
  19. Excel2007版的常用功能(17):Excel数学函数
  20. 默然说话20160101

热门文章

  1. Oracle函数——比较函数
  2. 系统卡顿有服务器硬件的原因,服务器出现卡顿,一般是这个3个原因!
  3. 计算机无法连接网络显示错误651,电脑宽带连不上显示错误651是什么意思?
  4. 微服务架构设计实践系列之五:架构准备阶段
  5. ns2 + GT-ITM
  6. 20分 html文件是,HTML语言试卷(A)
  7. 怎样度过自己的一生?
  8. 中国宠物用品品牌“Touchdog它它”完成数千万元Pre-A 轮融资...
  9. horizon服务主要模块_Horizon组件安装详解 - 远程连接OpenStack服务
  10. 【C++】辗转相除求最大公约数算法及原理