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

本文介绍Web应用中的会话管理技术,包括Cookie和Session的工作原理与使用方法,并详细讲解JSP页面的基础知识,如指令、动作标签、内置对象等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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页面的一个内置对象 exception
include指令:
    静态包含,就是将其他页面或者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     PageContext
jsp的域对象:理解
    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四个域中,查找相应的属性,若查找到了返回值,且结束该次查找
            若查找不到,返回一个null


jsp的动作标签
<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内置对象
    initParam

cookie内置对象:
    ${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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值