Day17 Jsp三大指令9大内置对象;el表达式的使用;jsp的jstl常见核心标签使用(笔记)

3 篇文章 0 订阅
1 篇文章 0 订阅

Day17 Jsp三大指令9大内置对象;el表达式的使用;jsp的jstl常见核心标签使用(笔记)

1.Jsp:本质就是servlet,有三大指令/9大内置对象

前言:Jsp:本质就是servlet

注释:<%–注释–%>

jsp可以写Java代码格式为:<%Java代码%>

jsp的输出表达式:<%=xxxxx%>

1.1 三大指令

page指令,
include指令:静态导入
targlib指令:重点 + 结合jstl核心标签使用

(1) page指令

默认带的两个属性
language:只支持java语言
contentType:当前jsp的页面编码是utf-8

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

buffer:jsp中的html标签都需要被jsp内置对象:JspWriter(字符流) out对象,out对象不断给浏览器写入内容,缓冲区大小默认8kb
errorPage:如果当前页面发生异常,跳转到错误页面上
isErrorPage:当前页面是否是错误页面
isELIgnored:是否忽略jsp的el表达式 ,默认值不会忽略 false
import:导入相关的java类或者接口的包名

<%@ page contentType="text/html;charset=UTF-8" language="java"
         buffer="8kb" errorPage="500.jsp" isErrorPage="false" isELIgnored="false" %>

(2) include静态包含指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>静态包含</title>
    <%--
        一般网站:共有页面:头部导航页面,在其他页面上将页面导入进去:静态导入

        静态导入:将导入的jsp文件不会被单独翻译和编译,直接就将导入jsp文件内容直接写入到当前jsp文件中,
        比较节省内存! (推荐)
    --%>
</head>
<body>

        <%--@include指令:静态导入
            file属性:加载导入的jsp文件,只是将导入的jsp文件的内容写进来
        --%>
<%@include file="header.jsp"%><%--导入头部导航页面--%>
<hr/>
<%@include file="main.jsp"%><%--导入轮播图片--%>

</body>
</html>

解释:header.jsp和main.jsp是两个资源

(3) targlib指令:重点 + 结合jstl核心标签使用

<%@taglib%>taglib指令 + 结合jsp的核心标签库 jstl使用---->必须导入jstl.jar包以及依赖包

演示看下边的第五点

1.2 9大内置对象,其中四个都是域对象 :重点四个域对象,其他5个了解一下

jsp的9大内置对象
其中四个域对象:
PageContext pageContext :仅仅是在当前jsp页面中有效 jsp中使用el表达式:pageScope
HttpServletRequest request :在一次请求中有效 requestScope
HttpSession session :在一次会话中有效 sessionScope
ServletContext application :是全局对象:代表整个web应用程序 applicaionScope

其他内置对象:
ServletConfig config:配置对象
JspWriter out:jspWriter—继承Writer:字符输出流对象 对象名称 out
HttpServletResponse response:响应对象:直接响应给浏览器内容
Object page (this):代表是当前jsp对象的地址值引用
Throwable t :代表的异常对象

<body>
        <%

            //jsp的脚本代码:书写Java代码

            response.getWriter().write("hello,jsp内置对象");
            out.write("hello,高圆圆") ; //直接给浏览器打印内容
        %>

<%--
        9大内置对象:使用居多四个域对象
         PageContext pageContext     :仅仅是在当前jsp页面中有效             jsp中使用el表达式:pageScope
         HttpServletRequest request  :在一次请求中有效                      requestScope
         HttpSession session         :在一次会话中有效                      sessionScope
         ServletContext application  :是全局对象:代表整个web应用程序         applicaionScope

    --%>
<%
    //现在给pageContext域对象存了一数据
    //pageContext.setAttribute("name","张三") ;
    //给request对象存储一个数据
    request.setAttribute("name","李四") ;
    //给session对象中存储一个数据
    session.setAttribute("name","王五") ;
    //给application对象存储一个数据
    //application.setAttribute("name","老六") ;
%>

<%--没有el表达式之前传统方式获取域对象中属性绑定的内容-%>
<%--使用jsp的输出表达式--%>
<%= (String)pageContext.getAttribute("name")%>  <br/>
<%=(String)request.getAttribute("name")%> <br/>
<%=(String)session.getAttribute("name")%><br/>
<%=(String)application.getAttribute("name")%>

<hr/>
<%--
    使用jsp的el表达式:目的就是代替上面的写法
    ${域对象.name属性}  获取指定域对象中属性绑定的内容
--%>
<%--获取pageContext域对象中存储的内容: el表达式内置的pageScope--%>
${pageScope.name} <br/>
<%--获取request域对象中存的内容  el表达式内置对象 requestScope--%>
${requestScope.name} <br/>
<%--获取session域对象中存的内容  el表达式内置对象 sessionScope--%>
${sessionScope.name} <br/>
<%--获取appliction域对象中存的内容  el表达式内置对象 applcationScope--%>
${applicationScope.name} <br/>

<hr/>

<%--
        这个四个域对象中在el表达式 pageScope,requestScope,sessionScope,applicationScope
        获取每一个域对象属性对应的内容
        ${name属性名称}--- 会自动的在四个域对象搜索,(从小到大到),有对应的内容,就直接获取
--%>
${name}

</body>
</html>

2.Jsp 里面<% jsp的脚本代码:写Java代码的 %> /<%= jsp的输出表达式%>

<%  int i = 10 ; %>
<%=i%>

<%
	request.setAttribute("name","高圆圆") ; //给request域对象存储了一个数据
%>


jsp的el表达式  就是代替上面写法 <%=%> jsp的输出表达式:让写法更加简单
${pageScope.name属性值}
${requestScope.name属性值}---->里面有自己的内置对象
${sessionScope.name属性值}
${applicationScope.name属性值}

3.el表达式的使用----el表达式支持 (对象图导航语言Ognl:是Object Graph Navigation Language )

3.1 什么是javaBean规范?

这个类是具体类,必须有私有字段,必须提供对外公共访问setXXX/getXXX

class Student{  
    private String name ;
    
    public String getName(){ //name----bean属性
        return name ;
    }
    public void setName(String name){
        this.name = name ;
    }
}


Student s = new Student() ;
s.setName("高圆圆") ;
servlet已经将学生存储到了域对象中 request.setAttribute("student",student) ;

jsp----获取获取信息
   ${requestScope.student.name}--->调用getName()----->将get()去掉,把N变成小写---name

3.2 el表达式的使用

<html>
<head>
    <title>Jsp的javabean导航</title>
    <%--
        就是使用el表达式的对象图导航语言
        就是${绑定的属性名.javabean的bean属性}获取内容
    --%>
</head>
<body>
        <%
                //创建user类对象
            User user = new User() ;
            user.setUsername("高圆圆") ;
            user.setPassword("123456");
            //通过request域对象user对象存进去
            request.setAttribute("user",user); //将实体对象存到request域中
        %>
        <%--传统方式--%>
    <%=((User)request.getAttribute("user")).getUsername()%>     -      
    <%=((User)request.getAttribute("user")).getPassword()%>
    <hr/>
<%--el表达式就是代替上面格式
        ${域对象中name属性名称.javabean的bean属性}
        bean属性:访问getXxx()---将get()去掉 X 变成小写
        getUsername() get()去掉,留下Username---U变成小写 username
--%>
    <%--操作实体对象:访问JavaBean实体类的方法--%>
    ${user.username}  -  ${user.password}
</body>
</html>

4.el表达式的使用-操作字符串-实体-复杂集合数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el表达式的使用_操作字符串_实体_复杂集合数据</title>
</head>
<body>
    <%--
        操作最基本的字符串数据
    --%>
<%
        //使用request域对象存储字符串数据
    request.setAttribute("msg","hello,JavaEE!") ;

%>
    <%--传统方式--%>
<%=(String)request.getAttribute("msg")%><br/>

<%--使用el表达式获取数据:直接从${属性名称}--%>
${msg}

<hr/>

<%--存储实体对象--%>
<%
        //创建User对象
    User user = new User() ;
    //封装user对象
    user.setUsername("文章") ;
    user.setPassword("123");
    //将user对象存储到了request域中
    request.setAttribute("user",user);
%>
<%--传统方式--%>
<%=((User)request.getAttribute("user")).getUsername()%>   -
<%=((User)request.getAttribute("user")).getPassword()%> <br/>
<%--使用el表示直接获取实体中的bean属性--%>
${user.username}  - ${user.password}

<hr/>
<%--
        操作List集合数据
  --%>
<%
    List<User> list = new ArrayList<>() ;
    User u1 = new User() ;
    u1.setUsername("高圆圆") ;
    u1.setPassword("123456") ;
    User u2  = new User() ;
    u2.setUsername("王宝强") ;
    u2.setPassword("123") ;
        //添加到list集合中
    list.add(u1) ;
    list.add(u2) ;

    //将List集合存到request域对象中
    request.setAttribute("list",list);


%>
<%--
    传统方式获取数据
--%>
<%=(((List<User>)request.getAttribute("list")).get(0)).getUsername()%> - <%=(((List<User>)request.getAttribute("list")).get(0)).getPassword()%><br/>
<%=(((List<User>)request.getAttribute("list")).get(1)).getUsername()%> - <%=(((List<User>)request.getAttribute("list")).get(1)).getPassword()%>

<br/>

<%--使用el表达式获取集合数据--%>
${list[0].username} - ${list[0].password} <br/>
${list[1].username} - ${list[1].password} <br/>

<hr/>

<%--
        操作Map集合
--%>
<%
    //创建Map集合
    //key:人的名称
    //value:分数值
    Map<String,Integer> map = new HashMap<>() ;
    map.put("lucy",98) ;
    map.put("Tomcat",100) ;
    map.put("jacky",80) ;

    //将Map集合对象存储到request域中
    request.setAttribute("map",map) ;
%>
<%--
    传统方式  jsp的输出表达式 map.get("lucy")----获取value
--%>
<%--el表达式方式获取
    将key对应的value获取出来
--%>
${map['lucy']}  <%--推荐这个方式--%>
<%--${map["lucy"]} --%> <%--推荐这个方式--%>
${map['Tomcat']}
${map["jacky"]}

</body>
</html>

5.jsp的jstl常见核心标签的使用

5.1 c_if标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
    1)导入两个jar包jstl-1.2 ,standard-1.1.2
    2)导入核心标签库的路径
    <%@taglib prefix="c"  uri="核心标签库的网络路径"%>
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>taglib指令</title>
</head>
<body>
        <%--就可以使用jstl的core核心库---里面的c标签--%>
<%--常见使用:c:if标签--%>
<%
    int number = 15 ;
    //number存储request域对象中
    request.setAttribute("number",number) ;
%>
<%--
        c:if标签就是单独判断类似于Java语言中的if(条件表达式){}
 test:属性就是判断 里面${变量名从域对象中获取并且进行判断}
            true,执行c:if标签的文本内容


--%>
<c:if test="${number==10}">

        <h4>number的结果是10</h4>
</c:if>
<%--没有c:else标签,如果还需要针对不成立结果 需要在书写c:if--%>
<c:if test="${number!=10}">
            <h4>条件不成立</h4>
</c:if>

<hr/>

<%--
    在el表达式有关键字empty,判断为空---结合c:if标签使用
        判断集合或者实体对象是否空
--%>
<%
    List<String> list = new ArrayList<>() ;
    list.add("hello") ;
    list.add("world") ;
    list.add("java") ;
    //将List存储到request域中
    request.setAttribute("list",list);
%>
<c:if test="${ empty list}"> <%--集合为空--%>

        <h4>list为空</h4>
</c:if>

        <c:if test="${not empty list}"><%--判断集合不为空--%>
                ${list[0]} - ${list[1]} - ${list[2]}

        </c:if>
</body>
</html>

5.2 c_choose_选择判断标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入taglib,指定的核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>c_choose_选择判断标签</title>
</head>
<body>
<%--
            Java代码的选择判断语句  /swtich
                if(条件表达式1){
                        语句1;
                }else if(条件表达式2){
                            语句2;
                            ...
                } else{
                      语句n;
                }


                jsp的jstl核心库中c:choose     :选择判断标签
                                        c:when
                                        c:otherwise...
--%>
<%
    int weekNum = 0 ;
    //将weekNum存储request域中
    request.setAttribute("weekNum",weekNum) ;
%>

<c:choose>
    <%--选择判断--%>
    <%-- test="${域对象中获取数据判断,true,成立,才执行c:when语句}" --%>
    <c:when test="${weekNum==1}">    <%-- when相当于case --%>
        <h4>星期一</h4>
    </c:when>
    <c:when test="${weekNum==2}">
        <h4>星期二</h4>
    </c:when>
    <c:when test="${weekNum==3}">
        <h4>星期三  </h4>
    </c:when>
    <c:when test="${weekNum==4}">
        <h4>星期四</h4>
    </c:when>
    <c:when test="${weekNum==5}">
        <h4>星期五</h4>
    </c:when>
    <c:when test="${weekNum==6}">
        <h4>星期六</h4>
    </c:when>
    <c:when test="${weekNum==7}">
        <h4>星期日</h4>
    </c:when>
    <c:otherwise>     <%-- 相当于default --%>
        <h4>非法数据</h4>
    </c:otherwise>
</c:choose>
</body>
</html>

5.3 c_foreach标签

<%--使用taglib指令 导入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>c_foreach标签</title>
    <%--
            Java中遍历数组或者集合
            for(初始化语句;条件表达式;控制体语句){
                    循环体语句;
            }
            //针对集合:特有方式 迭代器---被增强for foreach语句
            for(集合存储数据类型   变量名 : 集合对象 ){
                    //使用这个变量
            }


            jsp的核心标签库:提供了c:foreach标签,类似于java中循环语句
    --%>
</head>
<body>
    <%

            for(int x = 0  ; x< 10 ; x ++){
                out.write(x+" ") ;
            }
    %>
    <hr/>
<%--
        c:foreach普通用法:普通遍历
            begin:角标从多少开始  从0开始
            end:结束的角标值
            step:类似于Java中的普通for循环控制台语句   1---每次+1
            var:代表循环中的变量名
            varStatus:循环中的状态属性: 指定属性值 "stataus"
                    ${varStatus的属性值.index}:获取角标值:从0开始   :内置的属性index
                    ${varStatus的属性值.count}:获取序号值 从1开始   :内置属性count
--%>
<c:forEach begin="0" end="9" var="i" step="1" varStatus="status">
        <%--取出循环中变量i--%>
            <%--${status.index}--%> 
    		${status.count}
            ${i} <br/>
</c:forEach>

<hr/>

<%--
    c:foreach的特殊用法:
                 var:代表循环中的变量名
                 items:写法 ${域对象中获取属性对应的内容}
--%>
<%
    List<String> list = new ArrayList<>() ;
    list.add("张三") ;
    list.add("李四") ;
    list.add("王五") ;
    //将集合存储到request域中
    request.setAttribute("list",list);
%>

<%--将list集合从域对象取出来,并遍历数据--%>
<c:forEach var="n" varStatus="status" items="${list}">
           ${status.count} - ${n} <br/>
</c:forEach>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值