(二十五)基础系列 JSP/JSTL/EL

来源:互联网 发布:scanner java 编辑:程序博客网 时间:2024/05/17 03:06
cookie:浏览器端会话技术由服务器产生,生成key=value形式,通过响应头(set-cookie)返回给浏览器,保存在浏览器端下次访问的时候根据一定的规则携带cookie,通过请求头(cookie)携带给服务器.常用方法:    构造:        new Cookie(String key,String value)    写回:        response.addCookie(Cookie c)    获取:        Cookie[] request.getCookies();    cookie的api:        getName():获取cookie的名称        getValue():获取cookie的值        setMaxAge(int 秒数);持久化            若int为0;删除此cookie(前提必须路径一致)        setPath(String path):设置cookie的路径            若访问的链接的路径中包含cookie的path,则携带注意:    cookie不能跨浏览器    cookie不支持中文    ////////////////////////////session:服务器端的会话技术浏览器访问服务器的时候,服务器会获取jsessionid,    若获取不到:        服务器创建一个session,保存用户数据,将该session的jsessionid通过响应返回给浏览器    若获取到:        服务器拿着这个jessionid去session池中查找有无此session            若查找不到:                服务器创建一个session,保存用户数据,将该session的jsessionid通过响应返回给浏览器            若查找到:                拿过来直接使用,将该session的jsessionid通过响应返回给浏览器常用方法:    获取一个session        request.getSession();session域对象:    xxxAttribute()    生命周期:        创建:java程序中第一次使用request.getsession方法的时候        销毁:            服务器非正常关闭            session超时                默认时间                手动设置时间            手动删除★                session.invalidate();域对象:    ServletContext:共享的数据    HttpServletRequest:一次请求的数据    HttpSession:私有的数据/////////////////////////////////////////////jsp/el/jstl案例1-在页面中展示所有商品信息,不要使用jsp的脚本技术分析:jsp/el/jstl/////////////////////////////////////////jsp:java 服务器页面作用:    将内容的生成和信息的展示相分离运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.jsp脚本:<%..%> java代码片段<%=..%> 输出表达式 相当于out.print();<%!...%> 声明成员jsp的指令作用:声明jsp页面的一些属性和动作格式:    <%@指令名称 属性="值" 属性="值"%>jsp指令的分类:    page:主要声明jsp页面的一些属性    include:静态包含.    taglib:导入标签库注意:    一个页面中可以出现多个指令    指令可以放在任意位置,一般都放在jsp页面最上面.//////////////////////////page指令:    重要属性:3个        contentType:设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype        pageEncoding:设置页面的编码        import:导入所需要的包        contentType和pageEncoding联系:            若两者都出现的时候,各自使用各自的编码            若只出现一者,两个都使用出现的这个编码            若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1    了解属性:        language:当前jsp页面里面可以嵌套的语言        buffer:设置jsp页面的流的缓冲区的大小        autoFlush:是否自动刷新        extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类        session:设置jsp页面是否可以使用session内置对象        isELIgnored:是否忽略el表达式        errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面        isErrorPage:当前jsp页面是否是一个错误页面            若值为true,可以使用jsp页面的一个内置对象 exceptioninclude指令:    静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.    格式:        <%@include file="相对路径或者是内部路径" %>    例如:        <%@include file="/jsp/include/i1.jsp" %>    路径:        相对路径:            ./或者什么都不写 当前路径            上一级路径  ../        绝对路径:            带协议和主机的绝对路径            不带协议和主机的绝对路径                /项目名/资源        内部路径:            不带协议和主机的绝对路径去掉项目名                请求转发 静态包含 动态包含taglib指令:导入标签库      格式:         <%@taglib prefix="前缀名" uri="名称空间" %>    若导入之后        <前缀名:标签 .. >    例如:        <c:if test="">输出内容</c:if>///////////////////////////////////     jsp的内置对象:★★★(9大内置对象)在jsp页面上可以直接使用的对象    内置对象            类型    out             JspWriter    request         HttpServletRequest    response        HttpServletResponse    session         HttpSession    exception       Throwable    page            Servlet(this)    config          ServletConfig    application     ServletContext    pageContext     PageContextjsp的域对象:理解    application     整个项目    session         一次会话    request         一次请求    pageContext     一个页面pagecontext作用:理解    1.域对象        xxxAttribute()    2.操作其他域对象        方法:            xxxAttribute(...,int scope);                scope取值:                    APPLICATION_SCOPE                     SESSION_SCOPE                     REQUEST_SCOPE                     PAGE_SCOPE     3.获取其他的内置对象        getXxx()        注意:            getRequest():获取request内置对象    4.便捷查找,        findAttribute(String key):            依次从pagecontext,request,session,application四个域中,查找相应的属性,若查找到了返回值,且结束该次查找            若查找不到,返回一个nulljsp的动作标签<jsp:forward>:请求转发  相当于java中  request.getRequestDispatcher(..).forward(..);    <jsp:forward page="内部路径"></jsp:forward><jsp:include>:动态包含    就是将被包含页面或者servlet的运行结果包含到当前页面中./////////////////////////////////////////////////////////el:jsp的内置表达式语言,从jsp2.0开始.用来替代<%=..%>作用:    1.获取域中数据 ★    2.执行运算 ★    3.获取常见的web对象    4.调用java的方法格式:    ${el表达式}获取域中数据:★注意:★    若属性名中出现了"."|"+"|"-"等特殊符号,需要使用scope获取        例如:            ${requestScope["arr.age"] }获取简单数据    ${pageScope|requestScope|sessionScope|applicationScope.属性名}    以后经常使用:        ${属性名}:依次从pageContext,request,session,application查找指定属性,若查找到返回值,结束该次查找            若查找不到,返回""获取复杂数据    获取数组中的数据        ${域中的名称[index]}    获取list中的数据        ${域中的名称[index]}    获取map中的数据        ${域中的名称.键名}javabean导航    javabean:        java语言编写的一个可重用的组件,        狭义上来说就是我们编写的一个普通的java类 例如:User Person         javabean规范:            1.必须是一个公共的具体的类  public class            2.提供私有的字段  private String id;//id称之为字段            3.提供公共访问字段的方法 get|set|is方法                public String getId(){..}                一旦有公共的方法之后,get|set|is之后的内容,将首字母小写,将这个东西称之为bean属性                    id就是一个bean属性            4.提供一个无参的构造器            5.一般实现序列化接口  serializable    ${域中javabean名称.bean属性}//////////////////执行运算:四则运算 关系(>..) 逻辑(&& ||)注意:    +:只能进行加法运算,字符串形式数字可以进行加法运算.    empty:判断一个容器的长度是否为0(array set list map),还可以判断一个对象是否为空        ${empty 域中的对象名称}    三元运算符//////////////////el的内置对象(了解)11个    pageScope    requestScope    sessionScope    applicationScope    param    paramValues    header    haederValues    initParam    cookie★    pageContext★注意:    除了pagecontext其余对象获取的全是map集合了解:和参数相关的el内置对象    param    paramValues了解:和请求头相关的el内置对象    header    haederValues了解:和全局初始化参数相关的el内置对象    initParamcookie内置对象:    ${cookie} 获取map{key=Cookie}        例如:创建cookie            Cookie c=new Cookie("username","tom");        通过${cookie}获取相当于                {username=new Cookie("username","tom")}        相当于map的key是cookie的键        map的value是当前cookie    若项获取名称username的cookie的value值(获取tom)        ${cookie.username.value}--javabean导航    注意:        java中Cookie的api            getName():获取cookie的名称            getValue():获取cookie的value值        我们称name和value是cookie的bean属性    使用cookie内置对象:        ${cookie.给cookie起名字.value}    例如:        获取jsession的值        ${cookie.JSESSIONID.value}pageContext:获取不是map集合,相当于jsp的pageContext内置对象        在jsp页面中获取项目名        ${pageContext.request.contextPath}/////////////////////////////////////////       /////////////////////////////////////////       jsp注释:html注释 <!--  -->    注释的内容只在页面上看不到  java代码和html源代码都有java注释     只在java代码中存在jsp注释 <%--  --%>    只在jsp页面中存在,翻译成java文件之后就没有了//////////////////////////////////////////////jstl:jsp标准的标签库语言apache的用来替代java脚本使用步骤:    1.导入jar包 (jstl.jar和standard.jar)    2.在页面上导入标签库        <%@taglib prefix="" uri=""%>        例如:            <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>jstl的分类:    core:核心类库 ★    fmt:格式化|国际化    xml:过时了    sql:过时了    函数库:很少使用core:掌握    ★c:if    ★c:forEach    c:set 往域中设置值    c:choose c:when c:otherwise 分支★c:if 判断    <c:if test="${el表达式}">满足的时候输出的内容</c:if>    例如:        <c:if test="${3>4 }">            3大于4        </c:if>        <c:if test="${3<=4 }">            3不大于4        </c:if>        //////////////★c:forEach 循环    格式1:         <c:forEach begin="从那里开始" end="到那里结束" step="步长" var="给变量起个名字" varStatus="循环状态变量">            ${i }--${vs.count }--${vs.current }<br>         </c:forEach>        varStatus:用来记录循环的状态            常用的属性:                count:记录次数                current:当前遍历的内容    例如:        <c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">            ${i }--${vs.count }--${vs.current }<br>        </c:forEach>    格式2:        <c:forEach items="${el获取域中的容器}" var="n">            ${n }        </c:forEach>        例如:            //遍历list            <c:forEach items="${list }" var="n">                ${n }            </c:forEach>            //遍历map             <c:forEach items="${map }" var="en">                ${en.key }-- ${en.value }<br/>              </c:forEach>