Day17_Jsp入门与EL表达式

 Jsp本身需要用<%  JAVA程序  %>来书写java程序并执行

${}是一种简写格式,封装了<%%>但是本质上还是调用了java程序,所以他才能和servlet一样来使用请求对象。

$(" 标签对象")是用来获取jquery对象的

一、Jsp的执行流程与本质

jsp(java server page):java服务页面:http://localhost:8080/Servlet_jsp/index.jsp

JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。

jsp会经历两个阶段:
        index.jsp----->翻译index_jsp.java---->class index_jsp  extends HttpJspBase----->HttpServlet(Jsp本质:Servlet)
        被tomcat解析---->创建当前类对象(index_jsp.class)---->反射的创建对象(index_jsp01)---->调用_jspservice()--->解析jsp文件中html标签代码


默认jsp的存储路径:

C:\Users\Administrator\.IntelliJIdea2019.1\system\tomcat\Unnamed_servlet+jsp+jdbc\work\Catalina\localhost\servlet_jsp_jdbc\org\apache\jsp

二、Jsp三大指令

1、page指令:
        language(默认属性):只支持Java语言
        contentType(默认属性):当前jsp编码是utf-8.
        buffer:jsp中的html标签都需要被jap内置对象(JspWriter(字符流)out),out对象不断给浏览器写入内容,缓冲区大小默认为8kb.
        errorPage:当前页面发生异常,跳转至的错误页面上
        isErrorPage:当前页面是否是错误页面
        isELIgnored:是否忽略jsp的el表达式,默认值false不忽略
        import:导入相关的java类或者接口的包名

<%@ page contentType="text/html;charset=UTF-8" language="java"buffer="8kb" 
errorPage="myfristjsp.jsp" isErrorPage="false" isELIgnored="false" %>
<%
    int i =10;
//输出至控制台
    System.out.println(i);
//异常跳转至errorPage页面
    int b = i/0;
//输出至网页
    out.write("我是程彪");
%>
<%--  jsp输出表达式  --%>
//java值输出至网页<%=变量名%>
<%=i%>

2、include指令:

         网站中的共有页面:头部导航页面,可以将头部导航页面静态导入在其他页面上。
         静态导入:导入的jsp文件不会被单独翻译和编译,直接就将导入jsp文件内容直接写入到当前jsp文件中,比较节省内存! (推荐)
         @include指令:静态导入       file属性:加载导入的jsp文件,只是将导入的jsp文件内容写进来;

<body>
    <%@include file="02_header.jsp"%>
    <hr>
    <%@include file="02_image.jsp"%>
</body>

3、taglib指令

1、前置部分:

        1)导入两个jar包jstl-1.2 ,standard-1.1.2
        2)导入核心标签库的路径        <%@taglib prefix="c"  uri="核心标签库的网络路径"%>

2、taglib的三个主要标签

        c:if标签:类似于Java语言中的if(条件表达式){},但是没有else标签
        test:"${变量名(从域对象中获取)并且进行判断}"        true,执行c:if标签的文本内容

        在el表达式有关键字empty与not empty结合c:if标签使用,判断集合或者实体对象是否空
        test:"${empty 变量名}"     test:"${not empty 变量名}"

<%
    int i=10;
    request.setAttribute("i",i);
%>
<c:if test="${i==10}">
    <h3>i=10,条件成立</h3>
</c:if>
<c:if test="${i!=15}">
    <h3>i!=15,条件成立</h3>
</c:if>
<%
    User user = null;
//    User user = new User("程彪", "756039065");
    request.setAttribute("user",user);
%>
<c:if test="${empty user}">
    <h3>user为空</h3>
</c:if>
<c:if test="${not empty user}">
    <h3>user不为空</h3>
</c:if>

c:choose:选择判断标签
        c:when约等于if/else if或者case
        c:otherwise约等于else或者default

<%
    int week = 4;
    request.setAttribute("week",week);
%>
    <c:choose>
        <c:when test="${week==1}">
            <h4>星期一</h4>
        </c:when>
        <c:when test="${week==2}">
            <h4>星期二</h4>
        </c:when>
        <c:when test="${week==3}">
            <h4>星期三</h4>
        </c:when>
        <c:when test="${week==4}">
            <h4>星期四</h4>
        </c:when>
        <c:when test="${week==5}">
            <h4>星期五</h4>
        </c:when>
        <c:when test="${week==6}">
            <h4>星期六</h4>
        </c:when>
        <c:when test="${week==7}">
            <h4>星期天</h4>
        </c:when>
        <c:otherwise>
            <h4>非法数据</h4>
        </c:otherwise>
    </c:choose>
    c:foreach标签,类似于循环语句
    c:foreach的普通用法:
        begin:开始的index值     默认为0
        end:结束的index值       默认为结束位置
        step:每次index增加大小
        var:代表循环中的变量名
        varStatus:循环中的状态属性: 指定属性值 "stataus"
        ${varStatus的属性值.index}:获取角标值:从0开始   :内置的属性index
        ${varStatus的属性值.count}:获取序号值 从1开始   :内置属性count
    c:foreach的特殊用法:
        var:代表循环中的变量名
        items:"${域对象属性名称}"
//普通用法
<c:forEach var="i" step="1" begin="4" end="10" varStatus="status">
    ${i} ${status.index} ${status.count} ${status.begin}
    ${status.end} ${status.step} ${status.first} ${status.last}<br>
</c:forEach>
//特殊用法
<c:forEach items="${users}" var="user" varStatus="statu">
    ${statu.index}--->${statu.count}--->${user}
    --->${user.username}--->${user.passwrod}<br>
</c:forEach>

三、Jsp九大内置对象与EL表达式:

1、jsp的9大内置对象:
四大域对象:
    PageContext pageContext:当前jsp页面有效                      
                jsp中使用el表达式:pageScope
    HttpServletRequest request:在一次请求中有效                  
                jsp中使用el表达式:requestScope
    HttpSession session:在一次会话中有效                         
                jsp中使用el表达式:sessionScope
    ServletContext application:是全局对象:代表整个web应用程序     
                jsp中使用el表达式:applicaionScope
其他内置对象:
    ServletConfig config:配置对象
    JspWriter out(jspWriter extend Writer):字符输出流对象
    HttpServletResponse response(响应对象):响应给浏览器内容
    Object page(this):代表是当前jsp对象的地址值引用
    Throwable t :代表的异常对象
<%
    pageContext.setAttribute("name","我是pageContext");
    request.setAttribute("name","我是request");
    session.setAttribute("name","我是session");
    application.setAttribute("name","我是application");
    
%>
<%out.write("传统方式输出<br>");%>
<%=(String)pageContext.getAttribute("name")%><br>
<%=(String)request.getAttribute("name")%><br>
<%=(String)session.getAttribute("name")%><br>
<%=(String)application.getAttribute("name")%><br>
<hr>
<%out.write("EL方式输出<br>");%>
${pageScope.name}<br>
${requestScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}<br>
//${域对象属性名称}会自动在四个域中搜索,(从小到大),有对应的内容,就直接获取并输出
${name}

2、EL表达式

        就是通过${域对象属性名称.javabean的bean属性}获取内容
       bean属性:访问getXxx()--->将get()去掉 X 变成小写

注意:map集合(在jsp中map的key值不能为Integer类型

<%--字符串数据--%>
<%
    request.setAttribute("msg","现在是2022.05.26  0:42");
%>
<%=request.getAttribute("msg")%><br>
${msg}<hr>
<%--实体类对象--%>
<%
    User user = new User("程彪","756039065");
    request.setAttribute("user",user);
%>
<%=(User)request.getAttribute("user")%><br>
<%=((User)request.getAttribute("user")).getUsername()%>---><%=((User)request.getAttribute("user")).getPasswrod()%><br>
${user}<br>
${user.username}--->${user.passwrod}<hr>
<%--list集合数据--%>
<%
    User user1 = new User("程彪","756039065");
    User user2 = new User("小小","159299548");
    ArrayList<User> users = new ArrayList<>();
    users.add(user1);
    users.add(user2);
    request.setAttribute("users",users);
%>
<%=((ArrayList<User>)request.getAttribute("users")).get(0).getUsername()%>---><%=((ArrayList<User>)request.getAttribute("users")).get(0).getPasswrod()%><br>
<%=((ArrayList<User>)request.getAttribute("users")).get(1).getUsername()%>---><%=((ArrayList<User>)request.getAttribute("users")).get(1).getPasswrod()%><br>
${users[0].username}--->${users[0].passwrod}<br>
${users[1].username}--->${users[1].passwrod}<br>
${users[0]}<br>     ${users}<hr>
<%--map集合(在jsp中map的key值不能为Integer类型)--%>
<%
    Map<String,Long> map = new HashMap<>() ;
    map.put("程彪",123L);
    map.put("小小",456L);
    request.setAttribute("map",map);
%>
<%=((Map<String,Long>)request.getAttribute("map")).get("程彪")%>---><%=((Map<String,Long>)request.getAttribute("map")).get("小小")%><br>
${map["程彪"]}--->${map["小小"]}<hr>
${map}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值