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. h5与app交互

    现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次就来捋 ...

  2. MYSQL学习笔记——数据库范式及MYSQL优化整体思路

    一.数据库范式                                                                               为了建立冗余较小.结构合理的 ...

  3. robotframework关键字

    *** Settings ***Library Selenium2Library *** Keywords ***Checkbox应该不被选择 [Arguments] ${locator} Check ...

  4. NLP第一周

    19-21周,每周学习15小时以上 基础:Python编程基础:基础的概览统计.了解线性代数:足够的时间投入. 完成9个课程项目,每个5小时-15小时 完成聊天机器人项目(40-80小时) Capst ...

  5. hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)

    题目链接 裸的结论题.百度 Ramsey定理.刚学过之后以为在哪也不会用到23333333333,没想到今天网络赛居然出了.顺利在题面更改前A掉~~~(我觉得要不是我开机慢+编译慢+中间暂时死机,我还 ...

  6. JavaScript用在哪里

    <script> 标签 在HTML,JavaScript代码必须插入<script> 和 </script>之间的. document.getElementById ...

  7. 【HDOJ6628】permutation 1(dfs)

    题意:求1到n的排列中使得其差分序列的字典序为第k大的原排列 n<=20,k<=1e4 思路:爆搜差分序列,dfs时候用上界和下界剪枝 #include<bits/stdc++.h& ...

  8. 20180805-Java DataInputStream类

    DataInputStream dis = DataInputStream(InputStream in); 下面的例子演示了DataInputStream和DataOutputStream的使用,该 ...

  9. JAVA中short和short相加自动转化为int

    精度小于int的数值运算的时候都回被自动转换为int后进行计算 所以,下面的代码会报编译错误 short s1 = 1;short s2 = 1;s1= (s1+s2); 必须改成: short s1 ...

  10. Log4j appender、layout

    appender输出类型配置 layout日志信息格式 Threshold属性指定输出等级 Append属性指定是否追加内容 (1)appender输出类型配置 Log4j官方的appender给出了 ...