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范围内,不要仅仅为了连个页面交换信息
        随意的把信息放在信息内。这样不好,这样有瑕疵,这样很铁头娃。


没错,我就是铁头娃。



posted @ 2017-11-08 23:28  薛定谔的猫。  阅读(380)  评论(0编辑  收藏  举报