A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 小石姐姐 于 2018-6-7 10:27 编辑

就业班_JavaEE_day16_17_JSP_会话跟踪
一 概述
    jsp就是servlet,有html和java代码组成。
    默认第一次请求访问jsp时 服务器将jsp转换为类servlet的java文件,然后编译成class文件,并创建该类对象,调用service方法对外提供服务。
    第二次请求访问jsp则直接调用service方法。
   
二 jsp中嵌套java代码的三种写法
    1  <%  int i=0; %>  这种形式的代码相当于写在service方法内  ;可以定义局部变量、局部代码块、局部内部类
    2   <%=xx %>      这种形式的代码相当于 out.println(xx),会向页面输出,xx后面不带分号 ;
    3 <%! int j=0; %>    这种形式的代码相当于类的成员申明 ,比如成员变量或者成员方法或者成员内部类 ,一般比较少用到。
   
    tomcat中 jsp被转化的java文件和class文件放在work目录中。
   
三 jsp和servlet的分工
    jsp负责两头,即请求页面,和 显示响应结果
    servlet负责中间处理。  在servlet中获取请求参数,然后访问后台数据库中结果拿到后,放在request域中,然后转发给jsp进行展示。
   
四 jsp九大对象
    request response  session  application   page(相当于this)   out(和response.getWriter()的区别)  config  
    exception(表示异常的隐藏对象,只能在设置为 isErrorPage="true" 的错误页面才可以使用)
    pageContext (域对象,该域对象只能在jsp中使用,不能在servlet中使用) 在实际开发中不会用到,在对jsp的扩展中会使用它。
        *域对象   四个域对象中范围最小,只存在于当前页面。
        *代理其它域对象功能  
            pageContext.setAttribute("x", "X");[向pageContext中存储数据]
            pageContext.setAttribute("x", "XX", PageContext.REQUEST_SCOPE);[向request中存储数据]
            pageContext.setAttribute("x", "XXX", PageContext.SESSION_SCOPE);[向session中存储数据]
            pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE);[向application中存储数据]
            Object findAttribute(String name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。
        *获取其他内置对象  1个顶9个
        补充: out 和response.getWriter()的区别:
         out 的缓冲区是jspWriter    response.getWriter 缓冲区是printWriter  。
         输出到浏览器的顺序是  printWriter缓冲区+jspWriter缓冲区  。 jspWriter缓冲区会先刷新到printWriter缓冲区
         
五 jsp三大指令
    <%@ page attr1=”” attr2=”” %>  
        * page中常用属性名:  import 导包 可以出现多次   language="java"   表示jsp可以写的语言
        pageEncoding="utf-8"   这个编码表示jsp和转换后的servletjava文件保存在硬盘上的格式
        contentType=”text/html;charset=utf-8”  这个编码表示浏览器打开jsp使用的编码
        (其中pageEncoding和contentType二个属性只需要设置其中一个就行,另外一个会自动赋一样的值)
        errorPage 可以用来设置出现错误统一转发的页面  isErrorPage 表示本jsp是专门处理错误的页面,可以获得exception隐藏对象
        
        在实际工作中,通过在web.xml中设置全局的错误页面 error-page,来进行页面错误的提示。
        
    <%@ taglib %>   可以用来导入第三方标签库
        *<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ include %>  静态包含  二个jsp先合并 然后在转化为java文件
        * 属性: file  <%@include file=”b.jsp”%>  
        应用场景 : 页头和页脚页面,可以通过静态包含引入,不用在每个jsp中都编写。
        
六 jsp七大动作
    <jsp:include page="xxx.jsp"> 动态包含   
    动态包含与静态包含的区别
    A 动态包含会生成多个servletjava文件。静态包含只会生成一个servletjava文件
    B 动态包含是在最后将每个jsp的显示结果进行合并, 静态包含是在页面没转换之前就对页面进行了合并。
    <jsp:forward page="xxx.jsp">  请求转发  与request.getRequestDispatcher.forward() 类似
   
    <jsp:param value="zhangSan" name="username">  用在<jsp:include> <jsp:forward>中间来传递参数
    <jsp:useBean>
        *<jsp:useBean id="user1" class="cn.itcast.domain.User" scope="page"/>
        首先在指定的scope中根据ID值查找是否有对象,如果有则返回,如果没有则创建该对象,并将对象放在scope中。scope可以是jsp中的4个域
    <jsp:setProperty>     设置属性值
    <jsp:getProperty> 获取属性值
    <jsp:plugin>
   
七 jsp的注释
    <%--  --%> 针对<%%> 进行注释
    <!--  -->      针对html进行注释
    java中的三种注释  在<% %> 中针对java代码进行注释
    快捷键 CTRL+SHIRT+/
   
会话跟踪机制之cookie
一 概述
      cookie是服务器发送给浏览器的东西,浏览器每次请求会带上cookie给服务器端。 cookie是一对键值对的形式。是由http协议制定 ,不能跨浏览器。
      实现原理:
      服务器端通过addheader(Set-Cookie) 来添加cookie的相应头
      客户端每次请求 通过请求头cookie带上cookie的信息
      
二 API
    Cookie  cookie  = new Cookie(String name, String value);
    cookie.getName() cookie.getValue()
    cookie.setMaxAge(int maxAge)   
    cookie.setPath(String path)   
    cookie.setDomain(String domain)   
            应用于二级域名之间共享cookie例如:www.baidu.com  www.zhidao.baidu.com  www.map.baidu.com
            cookie.setDomain(".baidu.com");
            cookie.setPath("/");  path必须设置成/
    void response.addCookie(cookie);
    Cookie[] cookies = request.getCookies(); 通常提供cookie的工具类来根据name查找cookie
    Cookie中存储中文,通过URLEncoder 先对中文进行编码 然后获取时通过URLDecoder进行解码 。
   
三 cookie的生命周期
     根据cookie的maxage不同有如下区别。 默认不设置maxage ,是存在浏览器内存中,浏览器关闭则消失 叫会话cookie
     maxage> 0  表示存在与客户端硬盘中多长时间 。 参数以秒单位  叫持久化cookie
     maxage<0   表示cookie存在与客户端浏览器内存中,浏览器关闭则消失
     maxage = 0  表示清除浏览器中该cookie
     
四 cookie的路径  
     服务器端发送给客户端的cookie不设置path 会有一个默认路径值。 默认情况举例如下:
     http://localhost:8080/helloworld/Aservlet    则路径值是 /helloworld/Aservlet
     http://localhost:8080/helloworld/demo/a.jsp   则路径值是 /helloworld/demo
     如果不设置path,则cookie的路径是添加cookie的servlet或者jsp的当前路径。
     
     浏览器每次请求服务器会带上cookie。带那些cookie 是根据请求路径是否包含cookie的路径值。举例如下
     本地cookie的路径值 是 /helloworld/Aservlet  则 请求 /helloworld/Aservlet/Bservlet  则会带上该cookie
     
     如何删除cookie
     Cookie cookie = new Cookie("要删除的cookie的名字",null);
     cookie.setPath()   设置相同的path
     cookie.setMaxAge(0);
     response.addCookie(cookie);
     通常我们设置path为项目名称。
     
     Jseesionid该cookie的路径是 /项目名称  并且该cookie的生命周期默认存在于浏览器内存中。
     
五 cookie应用场景
    登录记住用户名
    记录浏览过的商品信息
   
会话跟踪机制之session
一 概述
    服务器端会话;
    存在范围:针对一次会话,多次请求;
    第一次调用request.getSession()创建;
    是javaweb提供 ;
    依赖于cookie,后者url重写。

二  sessionAPI
      session域对象的getAttribute  setAttrbute  removeAttribute
      getID   获取sesison的ID     sesison的ID是32为UUID
      invalidate()  使session失效
      isNew()      判断session是不是新的  第一次请求时 返回true
      
三  session原理
     request.getSession() 方法执行顺序:
     1 先判断cookie中是否有jsessionid , 如果没有,则创建session 并将jsessionid写回浏览器
     2 如果cookie中有jessionid,则在服务器端查找该jessionid对应的session,如果没查到,则创建session并将新生成的jessionid写回浏览器
     3 如果cookie中有jessionid,并在在服务器端能找到该jessionid对应的session,则不再创建session。
     request.getSession()和 request.getSesion(true) 用法一样。
     request.getSession(false) 表示如果服务器没有sesion则返回null 只有当cookie中有jessionID并且能查到对应的session时,才返回session
     注意:如果浏览器禁用了cookie,则request.getSession() 方法在cookkie中没找到,会继续在连接或者表单的请求参数中去查找jsessionid。
     这种情况下就要用到URL重写技术。通过response.encodeURL() 对所有连接进行编码,该方法会自动识别cookie中是否有jsessionid,如果有则不
     添加;jsessionid参数, 如果没有,则添加;jsessionid参数。
   
三 销毁session的三种方式
    1 sesison.invalidate()
    2 服务器非正常关闭  如果服务器正常关闭,会将sesison序列化到硬盘,等服务器重启时,会将session反序列化到内存中。
    3 session超时
       sesison的最大不活动时间配置,单位是分钟。
       在web.xml中通过如下配置实现,默认tomcat的web.xml中配置的是30分钟,可以通过在我们的项目web.xml中进行覆盖。
      <session-config>
        <session-timeout>15</session-timeout>
        </session-config>
   
四 session应用场景
     用户登录保存登录信息
     购物车
     验证码

     

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马