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),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些 ...
随机推荐
- hibernate-cache
hibernate缓存分:一级缓存.二级缓存.三级缓存 一级缓存:Session内的缓存 实例: /*一级缓存: * session内的缓存 * */ @Test public void test1( ...
- Python Day10
进程 在python中multiprocess模块提供了Process类,实现进程相关的功能.但是,由于它是基于fork机制的,因此不被windows平台支持.想要在windows中运行,必须使用if ...
- win8.1系统的安装方法详细图解教程
win8.1系统的安装方法详细图解教程 关于win8.1系统的安装其实很简单 但是有的童鞋还不回 所以今天就抽空做了个详细的图解教程, 安装win8.1系统最好用U盘安装,这样最方便简单 而且系统安装 ...
- <head>中<meta name="viewport" content="width=device-width,initical-scale=1"的作用>
<meta name="viewport" content="width=device-width,initical-scale=1"的作用> co ...
- ActiveMQ支持的传输协议
------------------------------------------------------ ActiveMQ支持的client-broker通讯协议有:TCP.NIO.UDP.SSL ...
- MapReduce的ReduceTask任务的运行源码级分析
MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...
- codevs1540 银河英雄传说
描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集 ...
- [Machine Learning] 机器学习常见算法分类汇总
声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...
- 【相当实用】如何让TortoiseSVN导出新增或修改过的文件
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器.但一个稍微上规模的网站 ...
- centos7.0安装后ifconfig无法使用
由于使用的最小化安装,需要安装net-tools 输入如下命令: #yum install -y net-tools 即可