小白学Java Web 12 Http协议2(http响应)

        本来想将这些内容放到一篇博客中,但看起来貌似有点长。这篇分享继续上一篇的内容,这里宝宝先说一点哈,这里的内容和编程代码都是我整理或者敲过的,因为是自学嘛,曾经学习参考了不少书和资料,还有程序,所以宝宝分享的这些内容有一部分可能有的看官会似曾相识,还请不要见怪,这些只供分享和参考。

   一.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的那些东东,内容貌似是比较重要滴。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值