HttpServletResponse对象

向客户端发送数据的方法:

  • 通过getOutputStream()方法得到OutputStream对象,再通过write发送
  • 通过getWriter()方法得到PrintWriter对象,再通过write发送

发送响应头的方法:

  • addDateHeader(java.lang.String name, long data)
  • addHeader(java.lang.String name,String value)
  • addIntHeader(java.lang.String name,int value)
  • setDateHeader(java.lang.String name, long data)
  • setHeader(java.lang.String name,String value)
  • setIntHeader(java.lang.String name,int value)
  • setStatus(int sc)

使用OutputStream流

String data = "lzj";
OutputStream outputStream = response.getOutputStream();
response.setHeader("content-type","texy/html;charset = UTF-8");
byte[] dataByteArr = data.getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换;
outputStream.write(dataByteArr);

使用PrintWriter流

String data = "lzj";
response.setHeaderEncoding("content-type","hext/html;charset = UTF-8");//控制响应头以UTF-8的编码显示数据。
PrintWriter out = response.getWriter();
out.write(data);

比较这两种像客户端输出的方式不难发现平时使用PrintWriter向浏览器输出字符数据会比较方便,省去了转换字节的步骤;

且需要注意的是这两种方法是相互排斥的,即调用其中一个后,就不能调用另一个了;

在输出数据是数字时也要以字符串的方式输出:

OutputStream.write();
PrintWriter.write();//这两种方式都不会输出数字1到浏览器 OutputStream.write(+"");
PrintWriter.write(+"");//其中1加上一个空字符串后,数字 1就变成字符串1,可以成功输出到浏览器中;

使用Response实现文件下载

在编写文件下载功能时,最好使用OutputStream流,因为OutputStream流是转化为字节流,可以处理任何类型的数据,而PrintWriter流是字符流,只能处理字符类型数据,如处理字节类型数据容易导致数据丢失;

实现文件下载的步骤:

  • 获取下载文件的绝对路径
  • 获取下载的文件名
  • 设置content-disposition响应头控制浏览器以下载的方式打开文件
  • 获取要下载文件的输出流
  • 创建缓冲区
  • 创建OutputStream流
  • 将输入流写入缓冲区
  • 使用缓冲区的数据通过OutputStream输出到浏览器中
String realPath = this.getServletContext.getRealPath("/xxxx/1.jsp");//获取下载文件的绝对路径
String fileName = realPath.substring(realPath.lastIndexOf("\\")+);//获取下载文件名
response.setHeader("content-disposition","attachment;filename =" +URLEncoder.encode(fileName,"UTF-8") );//设置content-disposition响应头控制浏览器以下载形式打开文件,并且让文件名以UTF-8形式显示
InputStream in = new FileInputStream(realPath);//获取文件的输入流
byte[] buffer = new byte[];//创建缓冲区
OutputStream out = response.getOutputStream();//创建OutputStream流
//将输入流写入缓冲区
int len = ;
while ((len = in.read(buffer))>){
out.write(buffer,,len);
}//使用缓冲区的数据通过OutputStream输出到浏览器中
in.close();

response常用的响应头设置

response.setDateHeader("expries",-);//禁止浏览器缓存当前的文档内容
response.setHeader("refresh","x");//设置refresh控制浏览器每隔x秒刷新一次
response.setStatus("xxx");//设置状态码
response.sendRedirect(String location);//调用response对象中的sendRedirect()方法实现重定向;

web工程“/”代表的位置

若是给服务器使用,代表当前的web工程;如:

  • ServletContext.getRealPath(String path);路径的第一个“/”代表的是web工程
  • this.getServletContext().getRequestDispatcher("/xxxx").forward(request,response);实现转发,forward是给服务器用的,所以“/”表示web工程
  • 使用include指令或<jsp.include>标签引入页面时
    <%@include file = "/xxx/xxx/xxx.jsp" %>
    <jsp:include page = "xxx/xxx/xxx.jsp" />

若是给浏览器使用,则代表webapps目录;如:

  • response.sendRedirect("/xxx/xxx/xxx");重定向是给浏览器使用的,所以其中第一个“/”是表示webapps目录;
  • 使用超链接
    <a href = "/xxx/xxx/xxx.jsp">xxx<a>
  • Form表单提交
    <form action = "/xxx/xxx/xxx" method = "post">
  • js脚本和css样式的引用

通常我们使用request.getContextPath()来替代web项目名,即request.getContextPath()等价于“/项目名”,这样即使我们修改项目名,开发的代码也不需要改动,比较灵活;

java_第一年_JavaWeb(4)的更多相关文章

  1. java_第一年_JavaWeb(14)

    EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...

  2. java_第一年_JavaWeb(13)

    JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...

  3. java_第一年_JavaWeb(11)

    自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...

  4. java_第一年_JavaWeb(15)

    Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...

  5. java_第一年_JavaWeb(12)

    SimpleTag标签 定义了五个方法:setJspContext.setJspBody.setParent和getParent以及最重要的doTag方法(完成了所有的业务逻辑): setJspCon ...

  6. java_第一年_JavaWeb(10)

    JavaWeb的两种开发模式 JSP+JavaBean框架:JavaBean负责封装数据.提供方法,JSP负责处理用户请求和显示数据:只能开发较为简单的业务: JSP+JavaBean+Servlet ...

  7. java_第一年_JavaWeb(9)

    JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...

  8. java_第一年_JavaWeb(8)

    前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...

  9. java_第一年_JavaWeb(7)

    JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...

  10. java_第一年_JavaWeb(6)

    会话 会话:浏览器从打开一个进程访问服务器到该浏览器关闭,我们称之为一个会话: 在浏览器和服务器交互期间,会不可避免地产生一些数据,而为了为每个用户保存其对应的数据,可使用两种技术:Cookie和Se ...

随机推荐

  1. 前端开发HTML&css入门——常用的标签以及一个小练习

    meta标签 <!doctype html> <html> <head> <meta charset="utf-8" /> < ...

  2. Java JNA (五)—— 释放Memory对象分配的内存

    Java进程的内存包括Java NonHeap空间.Java Heap空间和Native Heap空间. JNA中的Memory对象是从Native Heap中分配空间.但java的GC是针对Java ...

  3. 2019-8-31-dotnet-core-集成到-Mattermost-聊天工具

    title author date CreateTime categories dotnet core 集成到 Mattermost 聊天工具 lindexi 2019-08-31 16:55:58 ...

  4. nodejs 模板引擎

    自制替换模板 template.js var fs = require('fs') var http = require('http') var server = http.createServer( ...

  5. leetcode x进制数 python3

    不少题目都是实现吧10进制数转换成x进制数,实际上都是一个套路,下面是7进制的,想换成什么进制,把7替换成相应数字即可,输出的是字符串 16,32进制这种有特殊要求的转不了,其他的应该通用 class ...

  6. ffmpeg windows下编译安装

    安装msys2 更新源使下载速度更快 进入msys64/etc/pacman.d/目录中,分别在三个文件中增加mirrorlist.mingw32Server = http://mirrors.ust ...

  7. AOP 和 IOC

    IOC :  控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...

  8. 类数组对象与 arguments

    类数组对象:拥有一个 length 属性和若干索引属性的对象 var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: ' ...

  9. python 全栈开发,Day54(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    04-jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...

  10. HTML基础入门学习准备篇

    在学习前端的开始,让我们一起来了解什么是HTML5时代的大前端开发和全栈开发的定义 传统的前端:切图-标签和样式-实现效果 H5时代的前端: 一.需要各端的兼容开发 二.可以用于APP开发和移动站点的 ...