zoukankan      html  css  js  c++  java
  • Jsp学习总结(二)


    Jsp脚本中的9大内置对象(都是_jspService()方法中的形参,或者是局部变量):
        application:对应javax.servlet.ServletContext实例,代表jsp所属的web应用本身,用于jsp页面或者Servlet之间交换信息
        
        config:对应javax.servlet.ServletConfig实例,代表Jsp的配置信息,(这玩意基本用不到)
        
        exception:对应java.lang.Throwable实例,代表其他页面的错误信息和异常,只有page编译指令中的isErrorPage为true时
                   该对象才能用
        
        out:对应javax.servlet.jsp.JspWriter实例,代表jsp页面的输出流,用于输出页面内容,形成HTML页面
        
        page:代表该页面本身,没有什么鸡用(主要就是Servlet中的this)
        
        pageContext:对应javax.servlet.jsp.PageContext实例,代表jsp页面上下文,可以访问页面中的共享内容
        
        request:对应javax.servlet.http.HttpServletRequest实例,该对象封装了一次请求,客户端的请求参数都被封装到这里
                 这玩意太重要了,一般获取客户端的请求参数都必须使用该对象
        
        response:对应javax.servlet.http.HttpServletResponse实例,代表服务器对客户端的响应,一般很少使用这个来输出响应
                  内容,输出内容还是out比较好,这个对象一般都用在重定向

        session:对应javax.servlet.http.HttpSession实例,代表一次对话。当客户端浏览器与服务器连接时,会话开始
                 当客户端关闭浏览器的时候,会话结束。


    application对象(代表Web应用本身):
        在整个Web应用的多个jsp,Servlet之间共享数据
        访问Web应用的配置参数
            在web.xml使用context-param配置参数(他有两个子元素)
                param-name:配置Web参数名
                param-value:配置Web参数值

    config对象:
        代表当前jsp配置信息
            主要方法:getServletName() 返回的都是jsp

    exception对象:
        代表jsp标本中产生的错误和异常,是jsp页面异常的一部分。
        当然page编译指令中isErrorPage要为true

    pageContext对象:
        代表页面的上下文,主要访问的jsp之间的共享数据。就是可以访问那四个范围内的变量

        getAttribute(String name):获取page范围内的name属性
        getAttribute(String name,int scope):获取指定范围内的name属性值
            PageContext.PAGE_SCOPE:对应page范围
            PageContext.REQUEST_SCOPE:对应request范围
            PageContext.SESSION_SCOPE:对应session范围
            PageContext.APPLICATION_SCOPE:对应application范围

        当然这些范围对setAttribute()方法同样适用。

        4个生存范围对应的整型变量:
            1:对应page生存范围
            2:对应request生存范围
            3:对应session生存范围
            4:对应application生存范围


    request对象(重点):
        获取请求参数的重要途径。可代表本次请求范围,还可用于操作request范围的属性

        客户端发送请求参数的两种情况:
            GET方式的请求:也是默认form请求,一般来说创书的数据量较小,而且对于一些重要信息来说,安全性不是很高
            POST方式的请求:大多说用于提交表单,数据传送量比较大,安全性比较高,信息都被封装起来了。

        获取请求头信息:
            Enumeration<String> headerNames = request.getHeaderNames();
            
            while(headerNames.hasMoreElements()) {
                String headerName = headerNames.nextElement();
                //获取每个请求的值
                out.println(headerName + "-->" + request.getHeader(headerName) + "<br/>");
            }

        操作request范围的属性:
            setAttribute(String attName,Object attValue):attValue设置为request的范围
            Object getAttribute(String attName):获取request范围的属性

        执行forward和include:
            request.getRequestDispatcher(String path),path就是希望forward和include的目标路径
                该对象提供两种方法:
                    forward(request,response);执行forward
                    include(request,response);执行include
                如:
                    request.getRequestDispatcher("/a.jsp").include(request,response);
                    request.getRequestDispatcher("/a.jsp").forward(request,response);
                注意:
                    使用request的getRequestDispatcher(String path)方法时,该path字符串必须以斜线开头


    response对象:
        代表客户端的响应,一般都是输出一些比较猥琐的内容,比如位图,PDF文档等,还可以使用response来重定向,以及向客户端增加Cookie

        作用:
            1、response响应生成非字符响应(getOutputStream()该方法返回响应输出字节流)
            2、重定向
                与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次的请求不在同一个request范围内,左移发送一次的请求参数和request范围内的属性全部丢失。
                重定向会丢失所有的请求参数,使用重定向动作时,地址栏URL会变成重定向目标的URL

                语法:response.senRedirect("path");

            注意:
                重定向会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址在按回车的效果是一样的,即发送了第二次请求。


    forwrad(转发)和redirect(重定向)对比:
        1、前者执行之后还是上一次请求,后者生成了第二次请求。
        2、前者的目标页面可以访问原请求的请求参数,因为依然是一次请求,请求参数和request的范围内的属性全部都在。后者不能访问原来的请求参    
          数,因为这是第二次请求,原请求的请求参数和request范围内的属性全部丢失
        3、前者请求的URL不会改变,后者变为重定向的目标URL,就是URl会改变。


    Cookie和Session强行分析:
            Cookie用于网站记录客户的某些信息,下一次登录就可以获取客户的相关信息
            
            Cookie和session的不同在于:
                    前者会跟随浏览器的关闭而失效,后者会一直存放在客户端机器上,除非超过了Cookie生命期限,或者你手动的清除Cookie记录

            增加Cookie也是使用response内置对象完成(void addCookie(Cookie cookie)来增加Cookie)
            步骤如下:
                创建Cookie实例对象,Cookie的构造器Cookie(String name,String value)
                设置Cookie的生命期限,就是该Cookie在多长时间内有效
                向客户端写Cookie

            注意:
                使用Cookie对象必须设置他的生命期限,否则Cookie将会跟随浏览器的关闭而自动关闭。
                如果需要Cookie为中文,就要借助java.net.URLEncoder先对中文字符串进项编码。

    Session对象:
            代表一次用户会话(从浏览器连接服务器开始,到浏览器和服务器断开为之,这是一次会话)
            通常用于跟踪用户的会话信息,如判断用户是否登录,购物车跟踪用户购买商品等
        
        session对象是HttpSession的实例,下面是两个常用的方法:
            setAttribute(string)

        注意:
            session机制通常用于保存客户端的状态信息,这些信息需要保存在web服务器的硬盘上,所以要求session里的属性值
            是可序列化的,否则将会引起不可序列化的异常。而且通常只把用户会话相关的信息放在session范围内,不要仅仅为了连个页面交换信息
            随意的把信息放在信息内。这样不好,这样有瑕疵,这样很铁头娃。


    没错,我就是铁头娃。



  • 相关阅读:
    求连续子数组的最大和
    【LeetCode练习题】Gas Station
    再来看看快速排序
    【LeetCode练习题】First Missing Positive
    【LeetCode练习题】Merge Sorted Array
    Hdu 2089-不要62 数位dp
    Tsinsen A1517. 动态树 树链剖分,线段树,子树操作
    Bzoj 3505: [Cqoi2014]数三角形 数论
    Poj 3695-Rectangles 矩形切割
    Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
  • 原文地址:https://www.cnblogs.com/zpoor/p/7806924.html
Copyright © 2011-2022 走看看