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 ...
随机推荐
- mysql导出函数或者存储过程 设置显示方式
mysql导出函数或者存储过程 mysqldump -hhostname -uusername -ppassword -ntd -R databasename > /app/backupflie ...
- Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法
性能优化方法论 动手优化性能之前,需要明确以下三个问题: (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标. 量化指标的选择.至少要从应用程序 ...
- 树——binary-tree-postorder-traversal(树的后序遍历)
问题: Given a binary tree, return the postorder traversal of its nodes' values. For example: Given bin ...
- Docker 基础学习(一)
Docker官网:https://docker.com/ 中文翻译非常好的学习地址:http://dockerpool.com/static/books/docker_practice/index.h ...
- Cobaltstrike系列教程(一)-简介与安装
0x001-Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS.这款神器许多大佬们都已经玩的很6,我一个菜鸡玩的略有心得,因此写一 ...
- Listary安装+破解
Listary 是 windows 下一个可以快速搜索所有程序,文件,并且可以快速启动程序和打开相应文件的这么一个工具,但这只是它的一个主要功能,还有其功能也是很屌的. 详细的介绍参考:[Listar ...
- 如何从word文档复制内容到富文本编辑器
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- JS大文件上传解决方案
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- Android逆向之旅---基于对so中的section加密技术实现so加固
一.前言 好长时间没有更新文章了,主要还是工作上的事,连续加班一个月,没有时间研究了,只有周末有时间,来看一下,不过我还是延续之前的文章,继续我们的逆向之旅,今天我们要来看一下如何通过对so加密,在介 ...
- 动态规划 List
例题 #A 传纸条(Accepted) #B 乘积最大 (Unaccepted) #C 石子合并 (Accepted) #D 加分二叉树 (Unaccepted) #E 没有上 ...