09 Request/Response
|
HttpServletResponse
* 响应行
* 状态码
* void setStatus(int sc)
* 响应头
* 一般情况下,一个key对应一个value,特殊一个key对应多个value
* void setHeader(String name, String value) (经常使用的)
* void setIntHeader(String name, int value)
* void setDateHeader(String name, long date) // 毫秒数
setHeader("aa","bb");
setHeader("aa","cc");
结果:aa:cc
* void addHeader(String name, String value)
* void addIntHeader(String name, int value)
* void addDateHeader(String name, long date)
addHeader("aa","bb");
addHeader("aa","cc");
结果:aa:bb,cc
* 响应体
* ServletOutputStream getOutputStream() 字节
* PrintWriter getWriter() 字符
* 状态码:302
* 作用?
* 编写html,完成登陆的操作。(用户名和密码)
* 提交到后台Servlet,获取用户输入的数据。
* 判断用户名和密码都是admin,登陆成功,如果有一个不是,重定向登陆页面。
response.setStatus(302);
response.setHeader("location", "/day09/response/demo1/login.html");
*** void sendRedirect(String location) :等于前面两句话,一样可以完成重定向的操作。
* 读秒操作
* response.setHeader("refresh","5;url=/...");
// 向页面输出内容
response.getWriter().write("<h1>页面将在5秒后跳转</h1>");
// 设置头信息
response.setHeader("refresh", "5;url=/day09/response/demo1/login.html");
var x = 5;
function run(){
var span = document.getElementById("spanId");
span.innerHTML = x;
x--;
setTimeout("run()", 1000);
}
* 页面数据是一直变化,网银。
* 三个响应头
* Cache-Control no-cache
* Expires 时间
* Pragma no-cache
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
* 向页面输出中文
* 字节:getOutputStream();
使用字节流输出中文
* * 把中文输出到页面上,是否乱码呢?
* * 后台子节点的编码和浏览器默认打开文件的编码不一致。
* * 解决
* * 设置浏览器默认打开文件时的编码
* * response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 获取字节数组是编码和打开文件时一致
* os.write("中文".getBytes("UTF-8"));
* 字符:getWriter();
字符输出中文
* * 使用字符,一定乱码。
* * 缓冲区,自己的编码,ISO-8859-1
* * 设置缓冲区的编码
* * response.setCharacterEncoding("UTF-8");
* * 设置浏览器默认打开文件的编码
* * response.setHeader("Content-Type","text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 等于上面两句
response.setContentType("text/html;charset=UTF-8");
* 总结:
* 始终保持编码一致就ok了。
* 字节:
* 设置浏览器默认打开文件的编码。
* response.setHeader("Content-Type","text/html;charset=UTF-8");
* 获取字节数组设置编码
* os.write("中文".getBytes("UTF-8"));
* 字符:
* 设置浏览器默认打开文件的编码。
* response.setHeader("Content-Type","text/html;charset=UTF-8");
* 设置字符缓冲区的编码
* response.setCharacterEncoding("UTF-8");
错误的:
response.getWriter().write("abc");
response.getOutputStream().write("css".getBytes());
* 超链接
* 自己文件下载的代码
* 设置头信息
* response.setHeader("Content-Disposition","attachment;filename=文件的名称.扩展名");
* 准备一个文件
// 获取图片的绝对磁盘路径
String path = getServletContext().getRealPath("/img/外国美女.jpg");
// C:\apache-tomcat-6.0.14\webapps\day09\img\girl.jpg
//System.out.println(path);
String filename = "";
int index = path.lastIndexOf("\\");
if(index != -1){
filename = path.substring(index+1);
}
// Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MAAU; .NET4.0C)
String agent = request.getHeader("User-Agent");
//System.out.println(agent);
if(agent.contains("MSIE")){
filename = URLEncoder.encode(filename, "UTF-8");
}
// 设置头信息
// 以附件打开
response.setHeader("Content-Disposition", "attachment;filename="+filename);
// 输入流
InputStream in = new FileInputStream(path);
// 输出流
OutputStream os = response.getOutputStream();
// 流的拷贝
byte [] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
os.write(b, 0, len);
}
in.close();
请求
ServletRequest
|
HttpServletRequest
* 获取客户机信息
* getRemoteAddr方法返回发出请求的客户机的IP地址
* getContextPath 获取项目名称(获取虚拟路径名称)
* 获取请求头的信息
* String agent = request.getHeader("User-Agent");
* String referer = request.getHeader("referer"); 记录当前网页的来源。
****** 获取请求参数
***** String getParameter(String name) 一个key对应一个value(文本框、密码框)
***** String[] getParameterValues(String name) 一个key对应多个value(复选框)
*** Map getParameterMap()
* Enumeration getParameterNames()
POST请求乱码 :request.setCharacterEncoding("utf-8");
GET请求乱码
解决方案一:修改server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
* 必须有修改tomcat服务器配置文件权限
解决方案二:逆向编解码
username = URLEncoder.encode(username, "ISO-8859-1");
username = URLDecoder.decode(username, "utf-8");
解决方案三 简单方式(推荐使用)
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* request对象获取请求参数乱码
* post
* 设置缓冲区的编码
* request.setCharacterEncoding("utf-8");
* get
* username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* 转发(和重定向可以比较):
* setAttribute("","");
* getAttribute("");
* removeAttribute("");
利用referer防盗链
09 Request/Response的更多相关文章
- request response
request 和 response 这两个对象是出现在service方法中.service方法是用来接收请求处理请求,完成响应的. 接受请求指的就是request对象 完成响应指的就 ...
- request \response 总结
request&response request 1.获得信息的方法 1> 获得请求首行信息的方法 *getMethod *getContextP ...
- track message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html The TRACE method is used to invoke a remote, ...
- Ng Http Request/response格式转换
angular作为Single Page Application推荐的交互方式当然是基于json的ajax调用.但今天要说的是当你不幸工作在一个遗留或者不可控制的服务上,而这服务是基于非json提交方 ...
- 过滤器中的chain.doFilter(request,response)
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...
- 对chain.doFilter(request,response)的理解
他的作用是将请求转发给过滤器链上下一个对象.这里的“下”指的是哪里 ? 指的是下一个filter,如果没有filter那就是你请求的资源. 一般filter都是一个链,web.xml 里面配置了几个就 ...
- chain.doFilter(request,response)含义
过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...
- controlling the variance of request response times and not just worrying about maximizing queries per second
http://highscalability.com/blog/2010/11/4/facebook-at-13-million-queries-per-second-recommends-minim ...
- ZeroMQ之Request/Response (Java)
自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些 ...
随机推荐
- Python中的file和open简述
help(file) help(open) 老规矩先看一下内置的帮助文档怎么描述file和open,毕竟官方文档是最直接最准确的描述. Help on class file in module __b ...
- <<< java如何调用系统程序
通过 java.lang.Runtime 类用操作系统命令 然后调用run.exec()进程来执行命令程序 cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完di ...
- js整数补零
/* * * 整数前面补零 * * 质朴长存法 * num 要补灵的整数 * n个数,比整数位数多前面自动补零 * **/ function pad(num, n) { var len = num.t ...
- windows bat 设置代理上网脚本bat
取消IE代理服务器 ****************************************************************************************** ...
- 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别
C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...
- SDL 显示解码后的yuv12数据
在上篇h264解码为yuv12后http://jhlong12345.blog.163.com/blog/static/1230631292015725115058709/ ,需要显示出来,使用sdl ...
- Emgu.CV 播放视频
using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...
- [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
目录 写在前面 文档与系列文章 表及其约束 存储过程 视图 总结 写在前面 由于一直在山西出差,有几天没更新博客了.昨晚回到家,将博客园最近三天更新的文章搜集了一下,花费了半天的时间,看了看,有些文章 ...
- 大熊君{{bb}}移动开发之旅(第一季)
一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...
- AOP基本名词解释