java_第一年_JavaWeb(4)
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)的更多相关文章
- java_第一年_JavaWeb(14)
EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...
- java_第一年_JavaWeb(13)
JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...
- java_第一年_JavaWeb(11)
自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...
- java_第一年_JavaWeb(15)
Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...
- java_第一年_JavaWeb(12)
SimpleTag标签 定义了五个方法:setJspContext.setJspBody.setParent和getParent以及最重要的doTag方法(完成了所有的业务逻辑): setJspCon ...
- java_第一年_JavaWeb(10)
JavaWeb的两种开发模式 JSP+JavaBean框架:JavaBean负责封装数据.提供方法,JSP负责处理用户请求和显示数据:只能开发较为简单的业务: JSP+JavaBean+Servlet ...
- java_第一年_JavaWeb(9)
JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...
- java_第一年_JavaWeb(8)
前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...
- java_第一年_JavaWeb(7)
JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...
- java_第一年_JavaWeb(6)
会话 会话:浏览器从打开一个进程访问服务器到该浏览器关闭,我们称之为一个会话: 在浏览器和服务器交互期间,会不可避免地产生一些数据,而为了为每个用户保存其对应的数据,可使用两种技术:Cookie和Se ...
随机推荐
- struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别添加错误信息
转自:https://www.cnblogs.com/wangyp/archive/2011/07/13/2104828.html 一.addActionError("错误内容") ...
- 日志处理--高效Linux命令整理
序 在学习使用python处理日志开始阶段,对我阻力最大的莫过于对linux的不熟悉了,有种寸步难行的感觉. 在之后乱学一通之后,发现有点对我颇有益处: 学<鸟哥linux私房菜基础学习篇> ...
- 一、模型验证CoreWebApi 管道方式(非过滤器处理)
一.新建.Net Core的MVC项目添加WebApi控制器的方式 using System; using System.Collections.Generic; using System.Linq; ...
- 一、ARM
1.1 ARM 分类 1.1.1 版本号分类 以前分类的是 ARM7,ARM9... ARM11,在 ARM11 之后,就是以 Cortex 系列分类了: Cortex-R:应用在实时系统上的系列 C ...
- Flutter-TextField初始化值和選中取值
import 'package:flutter/material.dart'; class PersonalCenterInformationScreen extends StatefulWidget ...
- js如何判断用户使用的设备类型及平台
前端开发经常遇到需要判断用户的浏览设备,是pc端还是移动端,移动端使用的是什么手机系统?android.ios.ipad.windows phone等等,有时候还需要知道用户浏览页面是在微信中打开还是 ...
- 数据库智能管理助手-CloudDBA
摘要:阿里云CloudDBA主要分为离线分析和在线分析两种功能.帮助用户节省成本,定位问题,分析原因并推荐解决方法.CloudDBA可以做到实时诊断,离线诊断和SQL优化.并且通过MySQL的参数调优 ...
- Maven私服:Docker安装nexus3
查找nexus3镜像 docker search nexus 拉取nexus3镜像 docker pull docker.io/sonatype/nexus3 查看镜像 docker images ...
- GCD 和 NSOperationQueue 的差别
http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch http://www.cocoach ...
- ReactNative的学习笔记
一.安装nodejs 查看是否安装:npm -v 二.安装react-native命令工具 npm install -g react-native-cli 三.查看 react-native --he ...