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. wepy_two

    2.代码高亮WebStorm/PhpStorm(其他工具参见:wepy官网代码高亮) (1)打开Settings,搜索Plugins,搜索Vue.js插件并安装. (2) 打开Settings,搜索F ...

  2. ulimit 管理系统资源

    具体的 options 含义以及简单示例可以参考以下表格. 选项 含义 例子 -H 设置硬资源限制,一旦设置不能增加. ulimit – Hs 64:限制硬资源,线程栈大小为 64K. -S 设置软资 ...

  3. mysql查询每个部门/班级前几名

    Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id . +----+-------+--------+--------------+ | I ...

  4. Car的旅行路线(Floyd+模拟)

    题目地址 贼鸡儿猥琐的一道题 好在数据不毒瘤,而且Floyd就OK了. 这道题的难点在于 建图,也很考验模拟能力,需要十分的有耐心. 建图 题目中告诉了我们一个矩形的三个点 我们在平面直角坐标系中随便 ...

  5. vue @import css

    @import '~@/assets/scss/helpers/_mixin'; 原理:CSS loader 会把把非根路径的url解释为相对路径, 加~前缀才会解释成模块路径.

  6. 【java】Split函数踩坑记

    先看一段代码: String line = "openssh|7.1"; String[] pkg = line.split("|"); System.out. ...

  7. 对Proxy的研究

    概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前架设一 ...

  8. Linux学习-基于CentOS7的MySQL5.7的GTID复制

    一.GTID复制简介 GTID (global transaction id)全局事务标识符,MySQL5.6版本开始支持,GTID复制不像传统的复制方式(导步复制.半同步复制)需要找到binlog和 ...

  9. 查看window系统有哪些服务

    右键点击开始菜单按钮,选择“运行”(也可以快捷键 WIN+R 打开) 在运行框中输入命令services.msc打开服务窗口 在服务窗口列出了系统的所有服务,有运行的,也有停止的,可以点击“状态”列对 ...

  10. Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》

    当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用户访问时是通过如http://www.XX.com的方式访问,在请求时,浏览器首先会查询DNS服务 ...