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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 学习让我快乐啊 于 2018-5-21 18:16 编辑

Cookie

什么是会话   :用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
  常见的会话技术:
* Cookie    :将数据保存到客户端浏览器.
* Session   :将数据保存到服务器端.
  为什么使用会话技术?
* 私有的数据,购物信息数据保存在会话技术中.
  • 获得Cookie:Cookie[] cookies = request.getCookies();
  • 向客户端写Cookie:response.addCookie(Coookie cookie)
  • 创建Cookie:Cookie cookie = new Cookie(String name,String value);

    • 获得名字:cookie.getName();`
    • 获得值:cookie.getValue();
    • 设置路径:cookie.setPath(String path);
    • 设置有效期:cookie.setMaxAge(int age) 单位是:秒

  • 作用范围:默认是一次会话,关闭浏览器就销毁,可以设置Cookie的有效期

关于cookie存储中文的问题:
向客户端写Cookie:
String value = URLEncoder.encode("中文", "UTF-8");
Cookie cookie = new Cookie("name",value);
response.addCookie(cookie);
获得Cookie:
Cookie [] cookies = request.getCookies();
Cookie aa= CookieUtils.findCookie(cookies, "name");
if(name!=null){
    String value = aa.getValue();
    String a = URLDecoder.decode(value, "utf-8");
}Session(HttpSession)
  • Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端.
  • Session是域对象

    • session.setAttribute(String name,Object value);
    • Object vlaue = session.getAttribute(String name);
    • removeAttribute(String name);

  • Session生命周期,作用范围:

    • 创建:服务器端第一次调用getSession()创建session.
    • 销毁:三种情况销毁session:

      • session过期. 默认过期时间为30分钟.可以在web.xml中设置<session-config>中的 <session-timeout>,单位是分钟
      • 非正常关闭服务器.如果正常关闭session序列化到硬盘.
      • 手动调用session.invalidate();

    • 作用范围:多次请求(就是一次会话,根本原因:保存SessionID的cookie是一次会话级别的,会话结束后,该cookie会销毁,保存的Session信息也就找不到了)


JSP

JSP的脚本
  • <%!   %> :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议使用.
  • <%    %>:翻译成Servlet中service方法内部的内容. 定义类,变量
  • <%=   %>:翻译成Servlet中service方法中out.print();
  • 注:里面的代码不用写分号

JSP的注释
  • HTML的注释:<!-- 注释 -->
  • Java代码的注释:// 单行注释 /*多行注释*/ /** 文档注释 */
  • JSP的注释:<%-- JSP的注释 --%>

JSP的指令JSP指令的语法
  • <%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>

JSP的三个指令page指令
  • language:JSP脚本中使用的语言,现在只能写java
  • contentType:设置浏览器打开这个JSP的时候采用的默认的字符集的编码
  • pageEncoding:设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码
  • import:在JSP中引入类对象,可以出现多次
  • extends:设置JSP翻译成Servlet后继承的类,默认值:org.apache.jasper.runtime.HttpJspBase,这个值要想修改,这个类必须是HttpServlet的子类
  • autoFlush:设置JSP的缓存自动刷出.true:自动刷出.
  • buffer:设置JSP的缓冲区的大小,默认8kb.
  • session:设置在JSP中是否可以直接使用session对象.默认值是true.
  • isELIgnored:设置在JSP中是否忽略EL表达式.默认值是false不忽略.
  • errorPage:设置错误友好页面的提示.
  • isErrorPage:通过这个设置显示JSP的错误信息.

    • 全局错误页面:设置web.xml中<error-page>的<error-code>和<location>


include指令
指示JSP包含(静态包含)其他的页面,注被包含的页面不需要写结构体
<%@ include file="相对路径" %>taglib指令
指示JSP引入标签库

<%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>JSP的9大内置对象[
对象名
对应的Servlet对象
request
HttpServletRequest
responsse
HttpServletRequest
session
HttpSession
application
ServletContext
page
Object
pageContext
PageContext
config
ServletConfig
out
JspWriter
exceeption
Throwable
  • out和response.getWriter是不是同一个对象?区别是什么?

    不是;out是JspWriter,response.getWriter()获得的是PrintWriter
    所有向页面的输出都是通过response.getWriter()获得的对象输出的
  • pageContext内置对象的作用:

    • 获取其他的8个内置对象,可以用来编写通用性代码或者框架
    • 向其他的四个域中存取数据:

域范围名称
作用范围
对应的内置对象
对应的Servlet对象
PageScope
当前页面
pageContext
PageContext
RequestScope
一次请求范围
request
HttpServletRequst
SessionScope
一次会话范围
session
HttpSession
ApplicationScoope
应用范围
application
ServletContext
JSP的动作标签
什么是JSP  :JavaServer Pages(Java服务器端页面).JSP = Java代码 + HTML的元素 + JSP内置东西
  • 作用:简化代码
  • <jsp:forward page="路径"></jsp:forward>:用于页面转发
  • <jsp:include page="路径"></jsp:include>:用于页面的包含(动态包含)
  • 动态包含和静态包含的区别?(<%@ include page="路径" %>和<jsp:include file="相对路径" page>的区别)

    • 静态包含相当于代码的copy,指挥翻译成一个java类,只有一个执行结果
    • 动态包含的各个jsp各自翻译,执行,最终包含的是执行的结果


EL表达式

  • 语法:

    • ${ EL表达式 }

  • 功能:

    • 获取数据(JSP的四个域中的数据)
    • 执行运算
    • 操作web开发的常用的对象
    • 调用Java中的方法----很少用


EL获取数据
  • 如果是数组或List数组等有索引的变量:
    ${ arrs[索引] }
  • 如果是Map或带有属性的对象:
    ${ map.xxx }
    如果属性名中有特殊字符:${ map["xx.xx"] }
  • .和[]的区别.  

    • []用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)


  • 如果属性名中包含有特殊的字符.必须使用[]

EL执行运算算术运算
${ n1 + n2 + n3 }
逻辑运算
${ n1 < n2 } - ${ n1 lt n2 } <!-- less than -->
${ n1 > n2 } - ${ n1 gt n2 } <!-- great than -->
${ n1 <= n2 } - ${ n1 le n2 } <!-- less equal -->
${ n1 >= n2 } - ${ n1 ge n2 } <!-- great equal -->
${ n1 == n2 } - ${ n1 eq n2 } <!-- equal -->关系运算
${ n1<n2 && n3 < n4 } - ${ n1<n2 and n3 < n4 }
${ n1<n2 || n3 < n4 } - ${ n1<n2 or n3 < n4 }
${ !(n1 < n2) } - ${ not(n1<n2) }
EL操作常用的web对象
  • ${cookie.名字.value}
  • ${pageContext.request.contextPath}

JSTL
  • JSTL的标签库:包含了五类标签.
    core(核心标签),fmt(国际化标签),xml(XML标签),sql(SQL标签),fn(JSTL提供EL的函数库)

JSTL判断
<c:if test="${}">
        test:如果test返回true,标签内的内容就会被输出
</c:if>
if标签没有else,如果想表达else的情况,从条件着手JSTL遍历
<c:forEach var="" items="" varStatus="status">
    status.index
    status.count
</c:forEach>
<c:forEach var="" begin="" end="" step="" varStatus="status">
</c:forEach>







1 个回复

正序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马