本来想将这些内容放到一篇博客中,但看起来貌似有点长。这篇分享继续上一篇的内容,这里宝宝先说一点哈,这里的内容和编程代码都是我整理或者敲过的,因为是自学嘛,曾经学习参考了不少书和资料,还有程序,所以宝宝分享的这些内容有一部分可能有的看官会似曾相识,还请不要见怪,这些只供分享和参考。
一.Http响应
HTTP/1.1 200 OK --响应行
Server: Apache-Coyote/1.1 --响应头
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 622
Date: Mon, 13 Mar 2017 00:59:14 GMT
1.响应行
HTTP/1.1 指的还是协议版本,上一篇提到过
200 这是状态码,指的是服务器处理请求的结果或状态
OK 这个是对状态的描述
这里就有必要说一下常见的状态码了
200 表示请求处理完成并且完美的返回
302 表示请求需要进一步处理
404 表示客户端访问资源找不到
500 表示服务器端资源异常
我们常见的状态码是404或者500,尤其是404,比如我们在浏览器网址栏中输入错了我们要访问的文件或servlet,就会是酱个样子,所以要认真些:
2.响应头
Server: Apache-Coyote/1.1 --服务器类型
Content-Length: 0 --服务器发送给浏览器的数据长度
Date: Mon, 13 Mar 2017 07:06:43 GMT
3.HttpServletResponse
HttpServletResponse 对象用于修改设置响应信息
响应行
response.setStatus(); 设置状态码
响应头
response.setHeader("响应头的key", "具体内容");
实体内容
response.getWriter().write(""); 字符
response.getOutputStream().write(byte[]); 字节
内容并不多,至少比上一篇的请求少多了,下面来看一看这些小东东的用法:
/** * 设置响应信息 */ public class ResponseDemo1 extends HttpServlet { /** * 1)tomcat服务器将请求信息封装到HttpServletRequest对象,并且将响应信息封装到HttpServletResponse对象 * 2)taomcat采用get请求调用doGet()方法时 传入request和response对象 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 3)设置response响应信息 */ /** * 3.1设置响应头 */ response.setStatus(404);//设置状态码 /** * 3.2设置响应行 */ response.setHeader("Server", "Jboss"); /** * 3.3设置实体内容(浏览器能够直接看到的内容就是响应的实体内容) */ response.getWriter().write("Hello");//以字符 // response.getOutputStream().write("".getBytes());//字节 } /** * 4)tomcat服务器会将response响应对象内容转换成具体的响应格式的字符串 发送给浏览器进行解析 */ }我们可能会发现这些代码这么一看并没有什么卵用,上面除了一个在网页中显示的hello之外,还有看到的属性有点变化外,几乎没有什么特别的地方。
这只是对上面这些东东的用法,看一看明白就可以啦,哈哈。下面我们来看一些小案例:
4.案例-重定向
这个其实是一个重点哦,之后我们用到重定向的地方还是不少滴。
啥叫重定向呢,其实就是相当于超链接跳转页面,我们来看程序:
/** * 案例-请求重定向 */ public class ResponseDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 需求:跳转到adv.html * 使用请求重定向:发送302状态码+location响应头 */ response.setStatus(302); response.setHeader("location", "/Day04/adv.html"); } }这个程序用到了上面的方法,将页面跳转于 "/Day04/adv.html",我们访问这个servlet就会直接跳转到写在那里的那个网页
当然这也没什么用,主要是引出重定向的概念,而且重要的是:
上面的两行代码可以用response.sendRedirect("/Day04/adv.html");来替代
这句代码才是这个案例的主角,我们以后要知道这句代码就是重定向,重定向就是这条代码即可。
5.案例-定时刷新(refresh)
这个就更简单了,直接上代码:
/** * 案例-定时刷新 */ public class ResponseDemo3 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 定时刷新 * 原理:浏览器认识refresh头 得到refresh头就会重新请求资源 */ //response.setHeader("refresh", "1");//每隔一秒钟刷新一次页面 //隔了N秒后挑战到某个资源 response.setHeader("refresh", "5;url=/Day04/adv.html");//隔5秒后跳转到adv.html } }这里的主角就是refresh,response.setHeader("refresh", "秒数;url="跳转地址");中添加的数字是几就代表几秒。
6.案例-content-type作用
这个案例就更没有什么高大上之处了,下面这段程序展示如何指定数据类型和编码。
/** * 案例-Content-type类型 */ public class ResponseDemo4 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应内容的编码方式 //response.setCharacterEncoding("utf-8"); //表示服务器发送给浏览器的数据类型和内容编码 // response.setHeader("content-type", "text/xml"); // response.setHeader("content-type", "text/html"); response.setContentType("text/html;charset=utf-8");//指定数据类型和编码 response.getWriter().write("<html><head><title>01</title></head><body>中国</body></html>"); } }上面注释掉的的两句话其实没啥用,主要是response.setContentType("text/html;charset=utf-8");这句,这句话同上一篇request.setCharacterEncoding("utf-8");这句,都能用来解决乱码问题,所以在写servlet等文件时,把这两句话添上就能大致的收拾掉显示乱码的现象。
上面的程序,如果没有第三句,"中国"就不能正常显示,,如左图添上后乱码问题就解决了。
好了,关于http响应的内容就这么多,但是这篇分享感觉内容有点少啊,那么接下来就把这两篇的内容再总结一下,注明一下哪些算是重点。
二.总结
首先,http协议是:浏览器客户端与服务器端传输数据的格式规范。这里分为了两个部分:
请求: 格式:请求行,请求头, 实体内容(post提交方式的参数)
这里的重点是:使用HttpServletRequest对象,获取请求数据,表单提交数据的获取
HttpServletRequest 请求对象 获取解析请求的信息
请求行:
request.getMethod()
request.getRequestUrl()
request.getRequestUri()
request.getProtocol()
请求头:
reqeust.getHeader("键")
request.getHeaderNames()
实体内容:
request.getInputStream()
响应: 格式:响应行,响应头,实体内容(服务器向浏览器中写入的内容)
这里的重点是:使用HttpServletResponse 设置响应数据,重定向
HttpServletResponse 响应对象 设置响应信息
响应头: response.setStaus(404);
响应行: response.setHeader("name","value")
实体内容: response.getWriter().write("")
response.getOutputStream().write(byte[])
下一篇分享关于servlet的那些东东,内容貌似是比较重要滴。