通过验证码的设计来深入理解web项目中jsp与servlet的不同

JSP实现验证码功能完整实战项目 graph TDA[用户访问 login.jsp] --> B[浏览器请求主页面]B --> C[JSP渲染 HTML + img[src=ValidateCodeServlet]]C --> D[浏览器并发请求验证码图像]D --> E[Servlet生成图像并输出 PNG 流]E --> F[图像成功显示]F --> G{用户操作?G --> H[点击图像] --> I[JS修改 src 添加时间戳] --> DG --> J[输入验证码] --> K[提交表单] 阅读详情

我们都知道,在访问网站登陆的时候,会有输入验证码的情况,而且每次登陆所输入的验证码都不同,那么这是用什么实现的?

猜想1:直接写在jsp中,然后由servlet转发并呈现给用户

答:jsp一般是用来帮助我们编辑网页与java的,其本质上还是java,因为服务器在执行jsp的时候会将它翻译成一个与servlet几乎一样但是只是名字不同的一个接口实现类。那么jsp中是可以写java的,但是由于我们开发的web项目采用的是mvc模式,对数据进行运算放在数据库的相关工具类或者工厂类中,那么呈现出网页视图即向浏览器发送html则是jsp的任务,而servlet在这两者中间起到连接和传递的功能。我们知道验证码的生成其实是一个动态过程,每次请求访问都会返回一个不同的验证码,那么这种行为是不仅仅是显示图片那么简单,背后有着生成随机动态验证码的过程。那么如果我们把生成验证码的功能放在jsp中,就和mvc模式相违背。项目代码必定耦合度高,维护和复用性也会有所影响。虽然jsp脚本可以熟悉java,但是我们依然不能这么做。

猜想2 : 写在servlet中,由sevlet进行动态生成

答:这也是不对的,servlet作为处理http协议的组件,那么他的功能最好单一一些比较好,就是处理浏览器的请求并进行转发或者重定向。那么假设处理登陆功能的logservlet有输入验证码的功能,如果支付功能payservlet也要有输入验证码的功能,那么这段代码的复用性就成为了问题,耦合度也提高了。所以我们应当写在工具类中或者工厂类中,不过可以让servlet通过文件读写的字节流发送给浏览器。


上述是从mvc开发模式角度来分析这个问题,jsp一般用来呈现静态资源而servlet则是处理动态请求。那么验证码是动态的,所以从mvc开发模式角度分析,可以得出这个答案


那我们从浏览器运行html脚本的工作原理上来重新看待这个问题,是否能得出相同的结论呢?

我们附上浏览器加载网页的简易原理


假设我们的验证码就是图片img,当我们通过浏览器访问服务器,服务器通过jsp给我们返回的是一个html网页文件,浏览器开始加载网页并执行html语句给我们呈现出网页视图。这个过程是从上到下执行的,假设我们的验证码是img,处在用户和密码之后的位置,那么他会先加载用户和密码输入框,再加载验证码。那么当运行到img时,浏览器再向服务器发送请求,要求获取图片,但是这个图片是静态的而不是动态,所以不能用html的img标签来实现动态图片的展示。

所以我们要是想要向浏览器展示动态图片,只能用servlet来实现。当浏览器加载到验证码图片位置时,浏览器向服务器发送请求,这时候我们用一个imgservlet来处理浏览器需求验证码的请求,这个imgservlet则调用工厂类中的imgCreate方法构造一个动态图片,然后将这个动态图片通过字节流传输给浏览器。

从浏览器运行原理角度也能得出相应的结论,同时也是符合mvc模式设计原理。

构建当当书城的JSP与Servlet电子商务平台 本文还有配套的精品资源,点击获取 简介:该项目是一个基于Java Web技术的电子商务平台实现,使用JSP和Servlet技术来构建前端界面和后端逻辑,模拟在线图书销售功能。采用传统的三层架构设计,整合了JSP页面展示、Servlet处理业务逻辑、MySQL数据库存储数据,以及QueryRunner简化数据库操作。项目还可能包括邮件发送验证码的安全特性,以及完整的数据库脚本... 阅读详情

相关推荐

Java Web学生信息管理系统开发实践

Java Web是基于Java技术开发动态网站、网络应用程序和服务器端系统的标准,它包含了Servlet、JSP、Java EE等技术。本章我们将介绍这些技术的基础知识,并概述如何将这些技术整合应用于构建一个学生信息管理系统。自定义标签是扩展JSP功能的强大工具,它们允许开发者以标签的形式封装重复出现的页面逻辑。开发自定义标签需要实现一个Tag或SimpleTag接口,并创建一个标签描述文件(TLD)来描述标签的属性和行为。

weixin_42589700的博客 814

JSP页面实现验证码校验

验证码的生成实际就是输出一个图像,所以在这里使用ImageIO来生成图片,然后结合使用随机数(Random)来实现随机生成验证上的内容,最后进而展示出来,然后利用Session对象存储验证码的内容。在用户输入验证码的时候可以用request来获取用户输入的内容,让其余Session对象中保存的验证码内容进行比较,若一致则验证成功,不一致就验证失败。在网页页面的使用中为防止“非人类”的大量操作和防止一些的信息冗余,增加验证码校验是许多网站常用的方式。组合的验证码是最经典也是最常用的方式。

lkl2017的博客 5594

Java Web环境下获取访问者IP地址实战项目

htmltable {th, td {th {pre {简介:在IT领域,获取访问者IP地址是重要的功能需求,尤其在服务器端编程、网站分析和安全监控中。本项目演示了如何在Java Web环境中实现IP地址的获取。使用Eclipse IDE和Tomcat服务器,通过简单的步骤,你可以学习和实践如何在Java Servlet和JSP中利用HTTP请求对象来捕获用户的IP地址。

weixin_35950531的博客 810

jsp中文验证码简单步骤与思路

以上是创建一个包含JSP、Session和Cookie的中文验证码的基本步骤。请注意,示例中的方法和代码是简化的,你可以根据自己的需求进行相应的修改和扩展。中,获取用户输入的验证码,并与保存在Session中的验证码进行比较。如果验证码匹配,则可以执行相应的操作。中,使用Java代码生成验证码图片,并将验证码图片通过响应流返回给客户端。中使用Java代码生成中文验证码,并将验证码保存到Session中。,用于生成验证码图片和展示验证码输入表单。创建一个新的JSP页面,命名为。,用于验证用户输入的验证码。

谁偷了我的小熊饼干 680

基于JavaWeb的在线购物系统开发实战项目

回顾一下,我们走过了哪些路?前端构建:HTML5语义化 + CSS3响应式 + JS动态交互后端处理:Servlet控制流程 + JSP渲染视图 + MVC分层数据持久化:MySQL建模 + JDBC连接池 + DAO封装安全认证:密码加密 + 验证码 + Session管理整套体系虽不如Spring全家桶高级,但胜在逻辑清晰、易于理解、适合教学与快速原型开发。下一步你可以:- 把JSP换成Thymeleaf或Freemarker。

weixin_29781865的博客 992

全方位JavaWeb网上书城建设教程及源码

<head><title>简单的JSP页面</title></head><body></h2>%></body>

weixin_34725745的博客 1351

jsp验证码

  在程序登录或注册时,为了防止某些别有用心的用户利用机器人(恶意程序)自动注册,登录、恶意灌水、恶意增加数据库访问,以及使用程序暴力破解程序代码,就需要使用验证码技术。验证码是一种区分用户是计算机还是人的自动程序,虽然需要人来解答,但是也必须只能有人才能解答。由于计算机无法解答CAPTEHA(验证码)的问题,所以回答问题的用户就可以认为是人。 目前常见的验证码有以下几种。 (1)纯...

weixin_30363817的博客 225

BBS论坛系统:JSP与SQL技术实现详解

本文还有配套的精品资源,点击获取 简介:BBS论坛系统(jsp+sql)是一个利用Java技术和SQL数据库构建的在线讨论平台,支持用户注册、登录、发布主题、回复帖子等操作。系统采用MVC设计模式,结合Servlet和JSP技术进行后端处理和前端展示,同时使用SQL进行数据管理。本系统涵盖用户管理、内容发布、搜索功能、分类浏览以及管理员权限等核心功能,通过优化的数据结构和索...

weixin_33506815的博客 987

jsp生成验证码的代码

【代码】jsp生成验证码的代码。

laocooon的博客 978

jsp页面验证码(完整实例MyEclipse)

MyEclipse实现页面验证码,是最简单的入门级页面验证码

java实现动态验证码的效果

用java实现动态验证码的效果,源代码可以直接拷贝到项目中用

jsp实现验证码

1、验证码主要是为了防止前段恶心提交数据使用的。 利用servlet输出一张图片: package com.xingxue.filter; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IO...

sky274548769的博客 9673

基于JSP+Servlet的提升项目

自己看视频做的基于MVC的项目,适合初学者,毕业设计,里面带了视频带的开发文档;平台Intellij IDEA;项目中包含文件上传,DBUtils数据处理,在线支付,验证码,邮件激活等

书城管理系统(Java web 案例)

书城管理系统(Java web 案例)

weixin_47358951的博客 1309

图形验证码(jsp实现)

图形验证码(jsp实现)

JSP实现登录功能之添加验证码

jsp登陆验证,网页登陆验证带验证码校验,登录功能之添加验证码,非常不错,具有参考借鉴价值,需要的朋友参考下吧

JavaWeb实现图书管理系统增删改查与分页

本文介绍了一个基于JavaWeb的图书管理系统,实现了图书信息的增删改查、分页查询、条件检索及用户登录验证功能。系统采用Servlet+JSP+JavaBean架构,结合c3p0连接池、DBUtils工具和MySQL数据库,完成前后端交互与数据持久化。

weixin_28746457的博客 783

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本)

老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。

zouxu634866的博客 2570

JavaWeb实现图书管理系统的增删改查与分页

本文介绍了一个基于JavaWeb的图书管理系统,涵盖增删改查、数据分页、用户登录验证等功能。通过Servlet、JSP和数据库交互,实现了图书信息的完整管理流程,并结合DAO模式与过滤器完成权限控制。

weixin_31185473的博客 942

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2803

《斯图尔特微积分》实战指南:从理论到解题技巧的跨越

本文深入解析《斯图尔特微积分》教材的独特价值与实用学习策略,重点介绍其理论深度与实际应用的完美平衡。通过概念理解、符号语言转换、解题思维框架等五个关键跨越,帮助读者高效掌握微积分核心技巧。文章还提供分层练习、可视化工具等教学实践方法,是提升微积分学习效率的实战指南。

weixin_28432777的博客 395
上一篇: 关于servlet的单例和线程安全问题的思考
下一篇: 阅读1.3.1.7算术表达式求值感受
whathellll
博客等级 码龄11年 23粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值