JavaWeb 之 10.JSP简介及Cookie Session

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013987258/article/details/82871010


## JSP的简介 EL的表达式 ##


**JSP的简介**
    
    1.先学习Servlet技术,为什么还要学习JSP的技术呢?
        * 缺点:让你使用Servlet的技术动态生成的网页?response.getWriter("<form action='' >")
            * 开发人员忙死了
            * 美工不好给你加样式
    2.HTML的技术
        * 做网页非常的强大。静态的资源。
    3.推出JSP的语言(ASP  PHP)
        * 在JSP语言编写HTML的代码。
        
    4.JSP的简介
        * JSP(java server pages)    和Servlet一样,运行在服务器端。
        
    5.JSP的组成
        * HTML的代码 + java代码 + JSP自己的东西

**JSP的脚本元素**

    1.<%! java代码  %>    (不常用)作为类的成员变量。
    2.<%= java代码  %>     输出的语句
    3.<%  java代码  %>     编写变量和语句(局部的变量和语句出现)

**JSP的原理(理解)**

    1.创建一个JSP的文件,在文件编写一个代码(HTML+JAVA代码)
    2.JSP的原理:JSP -- 翻译成.java文件(Servlet程序) -- 编译.class文件 -- 执行。
        * JSP翻译成.java的文件 -- tomcat/work目录下

    3.在JSP编写的内容,后台帮咱们翻译成一个.java的文件,使用out对象把所有的东西输出客户端上。

    
**JSP开发中占用的角色**
    
  


## cookie和session 会话技术(重要) ##    

保存会话数据的两种技术:

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。


    1.会话:概念:先打开一个浏览器,浏览器的网页(资源,包含多次请求和响应),关闭整个浏览器,这个过程称为一次会话。
    2.作用:通过cookie和session技术来保存用户相关的一些数据。
    
    
**cookie的技术**

**理解cookie原理(理解)**
    
    1.cookie的原理:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
    
    
    注意:不能用request和ServletContext域对象

request:

ServletContext:
    
**cookie对象的api**
    
    1.Cookie(String name, String value)         cookie的构造方法:    
    2.String getName()                             获取cookie的名称
    3.String getValue()                         获取cookie的值
    4.void setValue(String newValue)              设置cookie的值
     
    5.void addCookie(Cookie cookie)              在服务器端把cookie保存到客户端(HttpServletResponse的方法)
    6.Cookie[] getCookies()                     从客户端获取cookie的数组(HttpServletRequest的方法)
    
**显示用户上次访问的时间(和Cookie的原理)**
    /**
     * 1.先判断是否是第一次访问?因为:第一次访问和第n次处理的业务是不同的。
     * 2.如果是第一次访问:先输出一句欢迎,记录当前的时间,保存到cookie中,回写到浏览器端。
     * 3.如果不是第一次访问,获取cookie中的值(就是你上次的访问的时间),把时间输出到页面上。记录当前的时间,保存到cookie中。回写到浏览器端。
     */

**cookie的api(另外)**

    * 演示的效果:直接关闭浏览器,cookie没有了,再访问是最新的。
    * 默认的cookie:默认保存浏览器端。
    * 持久的cookie:通过setMaxAge()方法,把cookie保存到本地的磁盘上。
    
    * 注意:需求:假如编写保存用户名的代码,默认保存7天。到第5天,不想保存了,清除cookie。
   * 删除保存本地磁盘上的cookie.setMaxAge(0); 但是前提条件:如果在之前的代码中设置有效路径的话,你在设置setMaxAge(0)之前必须先设置有效路径一次。
    
     1.void setMaxAge(int expiry)                 设置cookie的有效时间(单位是秒)
     2.void setPath(String uri)                  设置cookie的有效路径
        * 有效路径:访问WEB其他资源的时候是否携带cookie内容。
        * 不设置有效路径:说明我程序默认的有效路径。    /day11     
        * 由谁决定:LastTimeServlet访问路径是http://localhost/day11/lasttime
        * 访问WEB资源下的jsp/demo1.jsp的时候:http://localhost/day11/jsp/demo1.jsp。携带了cookie的内容。
        * 总结:只要是访问/day11下面的其他资源,默认携带cookie的内容。
        
        * 把LastTimeServlet的访问路径修改了 <url-pattern>/servlet/lasttime</url-pattern>
        * 默认的有效路径已经改变了 /day11/servlet
        * 访问WEB资源下的jsp/demo1.jsp的时候:http://localhost/day11/jsp/demo1.jsp。不携带了cookie的内容。
        
        * 不想让它有默认的有效路径,通过setPath来进行设置
        
    3.void setDomain(String pattern)              设置cookie的有效域名
        * 设置域名    cookie.setDomain(".sina.com.cn");
        * 访问域名其他的内容是否携带cookie
            * www.sina.com.cn
            * sports.sina.com.cn
            * xxxx.sina.com.cn
    
**商品的浏览记录**
    
    /**
     * 0.获取传过来id值
     * 1.判断是否是第一次访问?(获取指定名称的cookie如果为null,说明是第一次访问)
     *         * 如果是第一次访问,把商品的id保存到cookie中,回写cookie。
     *         * 如果不是第一次访问
     *             * 先获取cookie中的内容,进行判断(判断cookie中是否包含当前点击的商品)
     *                 * 如果cookie中已经包含了该商品,那么就不用处理了
     *                 * 如果不包含,在cookie中追加该商品    product=1    product=1,2
     * 2.重定向商品的列表页面
     * 3.需要在商品的列表页面中获取cookie的中内容,把内容显示到页面上。
     */

**session的原理**

  

**session对象的api**

    * 获取session对象    HttpSession request.getSession() 第一次执行,在服务器的内部创建一个独享的session。如果是第二次执行,要是有钥匙的情况,不会创建新的session。  
    
    * ServletContext:代表整个WEB应用。
    * session又是一个域对象。一次会话的范围。(在一次会话的过程中,可以有多次请求和响应,只要是浏览器不关闭,一直有效)
    * request域对象,一次请求。
    
    * Object getAttribute(String name)                     获取域对象的属性值
     * void setAttribute(String name, Object value)      设置域对象中的属性值
     * void removeAttribute(String name)                  删除域对象中的属性值
    
    * String getId()                                     获取session   id的值
    * void invalidate()                                 手动的销毁(用户退出)
     
    
**简单的购物车**
    
    * 购物车(商品的名称和数量) 对象  就使用Map<String,Integer> cart 当前购物车了。有多次请求和响应,cart一直有,把cart存入到session中。


    

**session的追踪(了解)**

    * session的追踪的技术。禁用了浏览器的cookie中。通过session回写的cookie的钥匙没有了。
    * 服务器内部的session还是有的。如果你要是给我一把钥匙。
    
    * 可以使用一些方法,在请求的后面拼接jsessionid 证明:session在服务器磁盘上,没有被销毁。
    

**session域对象**
    
    * 域对象:用来传递数据。
    
    * ServletContext:代表整个WEB应用。
    * session又是一个域对象。一次会话的范围。(在一次会话的过程中,可以有多次请求和响应,只要是浏览器不关闭,一直有效)
    * request域对象,一次请求。

1.

ServletContext存放的数据,共享于整个web应用中。

只要服务器不重启,存放在ServletContext中的数据就一直有效,并且所有用户都可以访问ServletContext中存放的数据。

因为同一web应用仅有一个ServletContext,当多用户访问时,会有线程问题,ServletContext不是线程安全的,当然我们也可以使用synchronized关键字来同步doGet( )doPost( )方法,解决线程安全问题。

例如:数据库的连接、当前在线用户数、系统管理员联系方式。

2.

Session是同一用户在一次会话期间内,在web应用的各个资源之间都可以共享的数据范围。使用Session就不需要像Request那样通过转发请求来传递数据,当使用链接或者新提交Form表单时,原来Session中的数据,对于当前用户仍然可用。

注意:Session中的数据仅对当前用户可见。

3.

存放在Request之中的数据存活范围

1.使用HttpServletRequest对象的getRequestDispatcher( )方法得到RequestDispatcher对象,并调用该对象的forward( )方法和include( )方法时。当前页面的HttpServletRequest对象中数据可以在目标页面使用。

2.当使用链接,或者重新提交一个Form时,当前的页面的Request对象就会被销毁,其中的数据全部丢失,并生成新的请求。

    
**session的创建和销毁**
    
    * session什么时候创建呢?第一次访问的时候,调用request.getSession(),因为没有session的id。
    
    * session的销毁
        * 非正常原因关闭服务器
        * session默认销毁时间 30分钟    在tomcat/conf/web.xml 有一段配置
            <session-config>
                <session-timeout>30</session-timeout>
               </session-config>
        * void invalidate()     手动的销毁session(用户退出)

猜你喜欢

转载自blog.csdn.net/u013987258/article/details/82871010