博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
登录页面验证码的简单实现,以及getOutputStream() has already been called for this response异常的解决方法
阅读量:2174 次
发布时间:2019-05-01

本文共 2873 字,大约阅读时间需要 9 分钟。

最近自己在倒腾一个网上订餐系统,在做登录验证时,需用JSP向网页中输出一张验证码图片,现将本人的验证码简单实现方法拿出来与大家分享,如有不足,还请指正。

 

效果图:

 

1.先写一个产生随机字符串的工具类,方法有很多种,下面给出本人实现代码,仅供参考:

RandomCode.java:

 

2.然后写一个jsp代码,用于向页面中输出验证码图片,下面给出具体代码:

SecurityCode.jsp:

 

 注:此jsp代码开头需import在第1步中写好的工具类“RandomCode.java”,本人代码位于“com.sun.food.utils”中,大家在使用时需替换成自己的工具类包名。

 

3.在其他jsp页面中调用第2步所生成的bmp图像

在其他页面中加入以下代码即可:

<img src="SecurityCode.jsp">

其中src值为第2步jsp所在路径

 

4.如何校验验证码是否正确?

在servlet中,你可以先获得表单中用户输入的验证码字符串

然后,再获得第2步放入session中的“securityCode”对象,然后比较2者是否相同

提醒一下,若想使校验更人性化点,需用equalsIgnoreCase()方法取代你的equals()方法。

此步不再给出具体代码,大家可以自由发挥。

 

至此,一个简单的验证码的功能基本上就实现了,大家有兴趣的话,还可以将第2步的jsp输出的图片弄的更复杂点。

 

可能大家按照上面的步骤做下来,在服务器端会抛getOutputStream() has already been called for this response异常,下面给出异常原因及解决方法:

jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后有一段这样的代码:

finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!所以会出现以上这个异常。

 

解决的方法有2种:

1.在使用完输出流以后调用以下两行代码即可:(即第2步代码末尾处)

out.clear();
out = pageContext.pushBody();

 

2.JSP默认的输出流为PrintWriter ,即<% %>以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误.对于这样的情况应该这样来解决,删除%><%之间的所有内容包括空格和换行符,最后也要消除空格和换行符,最好再加上一句response.reset()。

 

最后大家有更好的验证码实现方式可以留言给我,大家一起交流下!

 

 

你可能感兴趣的文章
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>
Idea Maven项目使用jar包,添加到本地库使用
查看>>
FastDFS集群架构配置搭建(转载)
查看>>