码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb系列之七(response域与request)

时间:2015-06-06 09:13:57      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:



1.http协议的简介
    协议:双方达成一个共同的目标
    http协议:请求和响应的过程中,要遵循一定的数据格式
    请求:在浏览器的地址栏输入一个地址,点击回车,这个地址到访问的付服务器,这个过程称为请求
    响应:服务器接收请求,根据请求返回数据到浏览器里面进行显示,这个过程响应
    特点:请求和响应式同时存在的,先有请求后有响应,http响应式基于tcp协议,默认端口是80
    使用命令:telnet模拟http协议
    首先连接到tomcat
    HTTP/1.0和HTTP1.1区别
        使用HTTP1.0如果做出相应离开就断开连接
        使用HTTP1.1做出响应不会马上断开

3.http协议的响应有三部分
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Accept-Ranges: bytes
    ETag: W/"578-1432798092723"
    Last-Modified: Thu, 28 May 2015 07:28:12 GMT
    Content-Type: text/html
    Content-Length: 578
    Date: Thu, 28 May 2015 07:49:29 GMT
   
    第一部分:响应行
        结构:http版本 状态码 状态码描述
        状态码:当前的响应的状态
        常见的状态码
        200:成功 ok
        302:重定向 经常和转发比较,
             重定向:在一个请求里面又做了一个请求,请求两次,响应两次
             转发:把请求转发,请求一次,响应一次 转发在服务器内部执行
        304:查找本地缓存
        404:资源找不到
        500:服务器内部错误(代码写错)
        503:服务器挂了
    第二部分:响应头:
        三个重要的响应头信息:
            Location:经常和302使用一起来实现重定向
                代码
                  //重定向使用状态码 302
                    response.setStatus(302);
                 //设置头信息 Location 完成重定向的操作
                    response.setHeader("Location", "/day07/my/my.html");
            Refresh:在页面的定时跳转
                response.getWriter().write("页面将在3秒之后跳转..");
                //使用Refresh头信息实现定时跳转
                response.setHeader("Refresh", "3;url=/day07/other/other.html");
            Last-Modified:经常请求里面If-Modified-Since一起使用查找本地缓存
           
            Content-Disposition:做文件下载时候
    第三部分:响应体:响应在页面上的内容
        重定向和转发区别
            在一个请求里面,又做了一次请求
        重定向:比如找小文借钱10万,小文没有钱,告诉我小温有钱,我再去找小温,把钱拿到
            请求两次,响应两次
        转发:比如找张三借钱,但是张三没有钱,张三去帮我找李四借钱,最终把钱给我
            请求一次,响应一次

3、If-Modified-Since和Last-Modified查找本地缓存
    画图分析执行的过程
   
    比如访问图片,第一次访问时候,在服务器端产生访问时间 使用头信息存储 Last-Modified
    给一个响应:首先把图片显示到页面上,携带第一次产生的时间,把时间存到浏览器中 使用 If-Modified-Since
    第二次访问图片,请求时候携带第一次这个时间发送请求,到了服务器,拿着请求的时间和服务器上面的时间进行比较,
    如果有相同的时间,返回状态码 304,让找本地缓存;如果没有相同的时间,重新请求新的数据
4、web开发中缓存处理
    使用快捷键 ctrl f5:表示无缓存刷新
    移除项目重新部署,或者找到tomcat的work目录,把work里面内容都删除
    直接使用浏览器清除缓存
    请求的地址后面加一个随机数 http://127.0.0./day11/1.html?id=随机数

http操作,服务器会每次请求创建一个对象request,同时创建相应的对象response
请求:在浏览器地址输入一个地址,点击回车,访问到服务器,这个过程叫请求
响应:
1.response响应对象
    HttpServletResponse对象,达标一个响应
    响应行:状态码    setStatus(int sc)
    响应头:结构:key value
setHeader(java.lang.String name, java.lang.String value):一个key对应一个value,第一个参数头名称,第二个值key对应的value
setDateHeader(java.lang.String name, long date):毫秒数
setIntHeader(java.lang.String name, int value):int类型
  一个key对应多个value
addHeader(java.lang.String name, java.lang.String value):一个key对应多个value。第一个参数头名称,第二个值key对应的多个value addHeader("aa","AA") addHeader("aa","BB") aa:AA,BB
addDateHeader(java.lang.String name, long date)
addHeader(java.lang.String name, java.lang.String value)
 
响应体:显示在浏览器的里面的内容
getOutputStream() 字节流
getWriter() 字符流
把服务器上的内容显示到浏览器,用response

2.案例一:response的重定向
3.案例二:使用response实现页面的定时跳转
    可以在页面标签里面直接做
<meta http-equiv="Refresh" content="3;url=/day09/response/login.html">
4、案例三:使用Response实现禁用浏览器缓存
     * 使用到头信息
     Cache-Control : no-cache
     Pragma : no-cache
     Expires: -1 :使用什么方法,setDateHeader("",毫秒数):毫秒数,1970-1-1至今的毫秒数
    这些头信息禁用浏览器缓存的效果,在一些版本低的浏览器里面,ie6
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", -1);
5、response向页面输出中文问题解决
    向页面输出内容 : 有两种方式,使用字节流和字符流输出
    使用字节流向页面输出中文
    会出现中文乱码?
        不一定,和浏览器的默认编码有关
    解决乱码问题
    首先设置浏览器的编码
    设置字节数组的编码
    response.setHeader("Content-Type", "text/html;charset=utf-8"); 
    response.getOutputStream().write("字节流中文".getBytes("utf-8"));
        浏览器的编码和字节数组的编码一致 
    使用字符流向页面输出中文
    使用字符流输出中文会有乱码?
    一定会有乱码
        字符流会产生一个缓冲区,首先会输出的内容先放到缓冲区里面,通过缓冲区进行输出
        response缓冲区会有一个默认的编码 iso8859-1,但是这个编码不支持中文
    解决方法
    首先设置response缓冲区的编码
    response.setCharacterEncoding("utf-8");
    设置浏览器的编码
    response.setHeader("Content-Type", "text/html;charset=utf-8");
    让response缓冲区的编码和浏览器编码一致
6.使用间写的方式
    第一个细节问题: 使用字符流向页面输出中文解决,有一种简写方式
    //使用一种简写方式
    response.setContentType("text/html;charset=utf-8");
    第二个细节问题:
    字节流和字符流是互斥的,两个流不能在一起使用
    第三个细节问题:
    "text/html;charset=utf-8",使用分号进行隔开,而不能使用其他的符号
    第四个细节问题:
    不能使用字符流直接向页面输出数字
    使用字符流向页面直接输出一个数字,
    到utf-8码表查找数字对应的值,把数字对应的字符输出,而不会直接输出数字
    第五个细节问题:
    重定向操作时候,简写方式
2.http协议的请求
    分别是get和post提交表单,查看请求的数据格式
    get提交:在地址栏会携带请求的数据
    post提交:在地址栏不会携带数据
    http的请求:
   
    http协议的请求三部分组成:
    第一部分:请求行
        请求行里面包含:请求方式、请求地址、http版本
    第二部分:请求头
        类似key-value形式,一个key可以对应一个value,也可以对应多个value
    三个重要的请求头
        Referer:防盗链,得到当前请求的地址
          
            创建两个文件夹 my  和 other
            分别创建两个页面 my.html  other.html
            只能是my文件夹里面的文件才可以访问
            只有my文件夹里面的文件才可以访问servlet
        User-Agent:获取当前请求的浏览器的信息
        If-Modified-Since:经常和响应里面Last-Modified一起使用,用于查询本地缓存
    第三部分:请求体
        通过post提交的数据 user=lisi
        表单提交的方式有很多种,常用的两种 get和post
       

9、request对象
    HttpServletRequest,代表请求对象,父接口是 ServletRequest
10、获取到客户机的信息
    获取表单提交方式
    getMethod()
    获取到请求地址
    getRequestURL()
    获取到请求的项目名称
    getContextPath()
    获取请求的客户端的ip地址
    getRemoteAddr()

11、获取到请求的头信息
    使用方法getHeader("头信息名称");
    重要的头信息
    Referer  User-Agent If-Modified-Since
    request.getHeader("Referer");
    request.getHeader("User-Agent");

12、获取通过表单提交的数据
    方法
    getParameter(java.lang.String name)
  - 获取表单提交的数据方法,参数输入项name的值
  - String username = request.getParameter("username");

    getParameterValues(java.lang.String name),返回String[]
  - 针对复选框 ,获取多个提交的数据,参数输入项name的值
  - //得到复选框里面的所有值
    String[] loves = request.getParameterValues("love");
    //Arrays
    System.out.println(Arrays.toString(loves));

    getParameterMap() :返回 Map<java.lang.String,java.lang.String[]>
  - 获取表单输入项的name的值,和输入的值
  - //得到输入项name的值,和输入的值
    Map<String,String[]> map = request.getParameterMap();
    //遍历map 有两种
    //得到所有的key
    Set<String> keys = map.keySet();
    //遍历set,得到value ,set遍历有两种方式
    for (String key : keys) {
    //根据key得到value
    String[] values = map.get(key);
    System.out.println(key+" :: "+Arrays.toString(values));
    }
    getParameterNames() : Enumeration<java.lang.String>
  - 获取所有表单输入项的name的值

    在表单输入项里面,输入中文,出现中文乱码

13、获取表单提交中文数据乱码问题解决
    表单提交方式,常用get 和 post
    使用post提交中文数据时候乱码问题解决 (设置request缓冲区的编码)
    使用post提交数据,放到请求体里面
    //post提交中文数据有乱码问题
    //request获取通过post提交的数据,也会把数据放到request缓冲区里面
    //response缓冲区默认编码是 iso8859-1,而request缓冲区里面默认编码也是iso8859-1,不支持中文
    /解决方式:设置request缓冲区的编码
    request.setCharacterEncoding("utf-8");
    //获取提交的数据有中文
    String username = request.getParameter("username");
    System.out.println("username:: "+username);

    使用get提交中文数据时候乱码问题的解决
    get提交数据放到浏览器地址栏里面,对中文数据进行url编码。
    三种解决方式:
    在tomcat里面配置
    找到tomcat目录conf下面server.xml,在配置端口地方,最后加 URIEncoding="utf-8"
    首先先对中编码,到servlet里面解码
    使用string构造方法编码转换(重点掌握)
    username = new String(username.getBytes("ISO8859-1"),"utf-8");
    代码:String username = request.getParameter("username");
    username = new String(username.getBytes("iso8859-1"),"utf-8");
14、request域
    域:在一定的范围内,存值和取值
    servletContext域:整个web项目
    存值:setAttribute
    取值:getAttribute
    request也是一个域对象
    范围: 一次请求
    存值:setAttribute
    取值:getAttribute
    request域对象经常和转发在一起使用
    request.getRequestDispatcher("转发的路径 不带项目名称").forward();
    创建一个Demo1,在这个servlet里面向request域设置一个值 msg itcast,转发到Demo2
    在Demo2,获取通过demo1向request域里面设置的值
15、转发和重定向区别
    重定向:
    请求两次,重定向的地址带项目名称
    转发:
    请求一次,转发地址不需要带项目名称
    重定向:从一个网站到另外一个网站
    转发:请求里面需要带数据







JavaWeb系列之七(response域与request)

标签:

原文地址:http://blog.csdn.net/lois_yue/article/details/46382465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!