Servlet_输出流jsp注意事项

简介: 订阅专栏Servlet输出流两种方法以及注意事项HTTP 响应码 以及 各自对应解释 关于 Web API 技术标准的开发文档网站(https://developer.mozilla.org)

Servlet输出流两种方法以及注意事项


HTTP 响应码 以及 各自对应解释 关于 Web API 技术标准的开发文档网站(https://developer.mozilla.org)

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
• 1

两种方法

  • HttpServletResponse:

注明:

  1. HttpServletResponse实例对象获得输出流有
    两种方式:①PrintWriter out=response.getWriter();
  2. out对象用于输出字符流数据

    ②ServletOutputStream os= response.getOutputStream();

    os用于输出字符流数据或者二进制的字节流数据都可以

    首先我们来看一下浏览器和服务器端是如何来关闭我们的response获得的输出流的

注意事项

java中用response.getOutputStream()实现文件下载,但报错(抛出异常)


getOutputStream() has already been called for this response


在查找解决方案的时候发现一个值得参考的答案:


在你下载的jsp末尾写


response.reset();

out.clear();

out=pageContext.pushBody();


若这时又包错


java.lang.IllegalStateException

at org.apache.catalina.connector.ResponseFacade.reset(ResponseFacade.java:310)

at org.apache.jsp.jsp.util.temp_jsp._jspService(temp_jsp.java:95)………


则只加后两句即可:


out.clear();

out=pageContext.pushBody();

注意事项讲解二

out.clear();
 out = pageContext.pushBody();
  • out = pageContext.pushBody(); 是什么意思?为什么不加入了就报异常: java.lang.IllegalStateException: getOutputStream() has already been called for this response
  • 首先你要知道pushBody()的作用是保存当前的out对象,并更新PageContext中Page范围内Out对象。
  • 至于为什么要加上这句话,是因为JSP容器在处理完成请求后会调用releasePageConter方法释放所有的PageContestObject
  • 并且同时调用getWriter方法。
  • 由于getWriter方法与在JSP页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,
  • 解决方法就是,只需要在JSP页面的最后加上这两条语句。
  • out.clear();
  • out = pageContext.pushBody();

注意事项讲解三

  • 由于jsp container在处理完成请求后会调用releasePageContet方法
  • 会释放所用的PageContext object
  • 并且同时调用getWriter方法
  • 由于getWriter方法与在jsp页面中使用流相关的getOutputStream方法冲突
  • 所以会造成这种异常,解决办法是
  • 只需要在jsp页面的最后加上两条语句:
  1. out.clear();
  2. out=pageContext.pushBody();
  3. 即可(其中out,pageContext均为jsp内置对象!)


目录
相关文章
|
1月前
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
65 0
|
3月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
32 1
|
3月前
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
45 0
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
28 0
|
5月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
107 10
|
5月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
【6月更文挑战第23天】Java Web开发中,Servlet和JSP是构建动态Web应用的基础。Servlet处理逻辑,JSP专注展示。示例展示了Servlet如何通过`request.setAttribute`传递数据给JSP渲染。JSP自定义标签提升页面功能,如创建`WelcomeTag`显示欢迎消息。Servlet过滤器,如`CacheControlFilter`,用于预处理数据或调整响应头。这些集成和扩展技术增强了应用效率、安全性和可维护性,是Java服务器端开发的关键。
65 7
|
5月前
|
存储 设计模式 搜索推荐
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
34 1