隐藏

jsp基础笔记
2022年 03月 22 日

Calvin

介绍:

JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

指令

<%@ 指令内容 %>

page 指令

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

  • contentType

    其实即使说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码
  • language

    表明 jsp 页面中可以写 java 代码
  • pageEncoding jsp 内容编码
  • extends 用于指定 jsp 翻译成 java 文件后,继承的父类是谁,一般不用改。
  • import 导包使用的,一般不用手写。
  • session

    值可选的有 true | false .
    用于控制在这个 jsp 页面里面,能否直接使用 session 对象。
    具体的区别是: 如果该值是 true , 那么在代码里面会有 getSession()的调用
    如果是 false : 那么就不会有该方法调用,也就是没有 session 对象了。在页面上自然也就不能使用 session 了。
  • errorPage

    指的是发生错误时要跳转的的页面, 值需要给错误的页面路径
  • isErrorPage

    上面的 errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个 isErroPage , 就是声明某一个页面到底是不是错误的页面。

include (静态包含)

  • 将被包含的文件的源码加入到了本 JSP 程序中,然后再进行编译。

     ` <%@ include file="other02.jsp"%>`

    设置引入的 jsp 页面,必须写相对路径

  • 逻辑: 把另外一个页面的所有内容拿过来一起编译运行输出。 所有的标签元素都包含进来。

taglib

<%@ taglib prefix="" uri=""%>

  • uri: 标签库路径
  • prefix : 标签库的别名

jsp 动作 (动态) 标签

<jsp:include page=""></jsp:include>(include 动态包含)

include 行为用于运行时包含某个文件,如果被包含的文件为 JSP 程序,则先会执行 JSP 程序,然后在把执行的结果包含进来。 

  • 这是在本页面中引入”other.jsp“这个页面的执行结果
    <jsp:include page="other.jsp"></jsp:include>

<jsp:forward page=""></jsp:forward> 实现请求转发功能 (可带参数)

  • page: 需要跳转到的页面或者 servlet 请求路径
  • <jsp:param name="*" value="*"/> 参数行为,带一些参数过去,name & value 是以键值对的形式带过去的
        <jsp:forward page="HttpServlet">
        <jsp:param name="name" value="test"/>
     </jsp:forward>
     
           也可以写成:
           <jsp:param name=""value="" />
              </jsp:forward page="*.jsp">
            
              // 跳转到目标 js 页面后然后再:
            request.getParameter("name");
              // 来获取接受到信息     
      
         // 等同于以下 javaServlet 中的转发代码
    <%
        // 请求转发
        request.getRequestDispatcher("*.jsp").forward(request,respone);
     %>

include 指令和 include 行为的区别?

  • 它们俩的作用相同,区别在于:

    • include 指令 (include file) 是将被包含的文件的源码加入到了本 JSP 程序中,然后在进行编译,属于静态包含,
    • 而 include 行为 (include page) 只是将被包含的文件的运行结果包含进自己。属于动态包含。

    ### JSP 内置对象
    内置对象就是我们可以直接在 JSP 页面中使用这些对象,不用创建

  • request:HttpServletRequest 的对象 *
  • response:HttpServletResponse 的对象 *
  • session:HttpSession 的对象 *
  • application:代表当前应用 是 ServletContext 的对象 *
  • pageContext:页面的上下文。可以获取其他的对象
  • config:jsp 对的 servlet 对应 ServletConfig 的对象
  • out:JspWrite 对象。out.print() 将字符串直接打印在浏览器
  • page:指当前 jsp 对应 servlet 的对象引用
  • exception:必须在 jsp 声明一个指令

    ---

    JSP 作用域对象

    作用域

    表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute

四大作用域:(从上到下作用域范围依次是从小到大)

  • pageContext 【PageContext】

    作用域仅限于当前的页面。它还可以获取到其他八个内置对象。
  • request 【HttpServletRequest】

    作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。
  • session 【HttpSession】

    作用域限于一次会话(多次请求与响应) 当中。
  • application 【ServletContext】

    整个工程都可以访问, 服务器关闭后就不能访问了。

使用作用域来存储数据:

// 使用作用域来存储数据 <br>
   <%
        pageContext.setAttribute("name", "page");
        request.setAttribute("name", "request");
        session.setAttribute("name", "session");
        application.setAttribute("name", "application");
    %>
// 取出四个作用域中的值 <br>
    <%=pageContext.getAttribute("name")%>
    <%=request.getAttribute("name")%>
    <%=session.getAttribute("name")%>
    <%=application.getAttribute("name")%>

### EL 表达式

为了简化 jsp 代码,具体一点就是为了简化在 jsp 里面写的 java 代码。

写法格式

${表达式}

  • EL 表达式的 . 或者 [] 的作用:获取域中对象的属性值,若属性值含有特殊的字符,则可以使用 []

      如:`${emp.first.Name}`(错误)       `${emp["firstName"]}`(正确)
  • 如果从作用域中取值,会由小到大,如果没有,就往下一个作用域取。若四个作用域取完都没有,就无显示。
  • EL 表达式可以自动类型转化,也可以进行简单的算术运算
  • EL 表达式判断某个值是否为空:${empty *}
    例如:${!empty list} //list非空
一般使用 EL 表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。

如何使用

  1. 取出 4 个作用域中存放的值。
        <%
            pageContext.setAttribute("name", "page");
            request.setAttribute("name", "request");
            session.setAttribute("name", "session");
            application.setAttribute("name", "application");
        %>
        
        // 按普通手段取值
        <%= pageContext.getAttribute("name")%>
        <%= request.getAttribute("name")%>
        <%= session.getAttribute("name")%>
        <%= application.getAttribute("name")%>
        
        // 使用 EL 表达式取出作用域中的值
        ${pageScope.name}
        ${requestScope.name}
        ${sessionScope.name}
        ${applicationScope.name}
  1. 如果域中所存的是数组
            <%
               String [] a = {"aa","bb","cc","dd"};
               pageContext.setAttribute("array", a);
           %>
           使用 EL 表达式取出作用域中数组的值 <br>
           ${array[0] } , ${array[1] },${array[2] },${array[3] }
  1. 如果域中所存的是集合

        使用 EL 表达式取出作用域中集合的值 <br>
        ${li[0] } , ${li[1] },${li[2] },${li[3] }
  1. 取出 Map 集合的值

    <%
        Map map = new HashMap();
        map.put("name", "zhangsna");
        map.put("age",18);
        map.put("address","北京..");
        map.put("address.aa","深圳..");
    
        pageContext.setAttribute("map", map);
    %>
    使用 EL 表达式取出作用域中 Map 的值 <br>
    
    ${map.name} , ${map.age} , ${map.address}  , ${map["address.aa"] }

取值细节

  1. 从域中取值, 得先存值。

    <%
        //pageContext.setAttribute("name", "zhangsan");
        session.setAttribute("name", "lisi...");
    %>
    
    ${pageScope.name} 
    // 直接指定到这个作用域里面去找这个 name
    
    ${name}
    // 先从 page 里面找,没有去 request 找,再去 session,去 application <br>
    
    ${sessionScope.name}  
    // 指定从 session 中取值
  2. 取值方式
  3. 如果这份值是有下标的,那么直接使用 []

     <%
         String [] array = {"aa","bb","cc"}
         session.setAttribute("array",array);
     %>
     ${array[1] } --> 这里 array 说的是 attribute 的 name 
  4. 如果没有下标, 直接使用 . 的方式去取

     <%
         User user = new User("zhangsan",18);
         session.setAttribute("u", user);
     %>
     ${u.name}  , ${u.age} 
    

EL 表达式 的 11 个内置对象。

${对象名. 成员}

  • pageContext
    作用域相关对象
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

头信息相关对象

  • header
  • headerValues

参数信息相关对象

  • param
  • paramValues
  • cookie
    全局初始化参数
  • initParam

JSTL

全称 : JSP Standard Tag Library jsp 标准标签库
简化 jsp 的代码编写。 替换 <%%> 写法。 一般与 EL 表达式配合

怎么使用

  1. 导入 jar 包 (jstl.jar && standard.jar) 并添加进工程。
  2. 在 jsp 页面上,使用 taglib 指令,来引入标签库
  3. 注意: 如果想支持 EL 表达式,那么引入的标签库必须选择 1.1 的版本,1.0 的版本不支持 EL 表达式。
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用基础

常用标签

<c:out value="${*}"></c:out>
<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>

c:out :获取域中的属性值,并且对打印到页面的特殊字符进行转换

c:set

        <!-- 声明一个对象 name, 对象的值 zhangsan , 存储到了 page(默认) , 指定是 session -->
        <c:set var="name" value="zhangsan" scope="session"></c:set>
        
        ${sessionScope.name}

c:if

判断 test 里面的表达式是否满足,如果满足,就执行 c:if 标签中的输出 , c:if 是没有 else 的。
        <c:set var="age" value="18" ></c:set>
        <c:if test="${age > 26}">
            年龄大于了 26 岁...
        </c:if>
        
        <c:if test="${age <= 26}">
            年龄小于了 26 岁...
        </c:if>


        ------------------------------

        定义一个变量名 flag  去接收前面表达式的值,然后存在 session 域中

        <c:if test="${age > 26}" var="flag" scope="session">
            年龄大于了 26 岁...
        </c:if>

c:forEach

    <c:forEach items="${requestScope.cusMap}" var="cusMap" begin="0" end="4" step="1"   varStatus="status">
    //items: 要遍历的数组 / 集合
         // 步数:${status.step},
         // 开始的索引:${status.begin},
         // 结束索引:${status.end},
         // 当前的个数:${status.count},
         // 当前的对象:${status.current},
         // 是否为首个:${status.first},
         // 是否为结尾:${status.last},
         // 集合的索引:${status.index},
         //${cusMap.key}, ${cusMap.value.id}
        从 1 开始遍历到 10 ,得到的结果 ,赋值给 i , 并且会存储到 page 域中, step , 增幅为 2, 
        <c:forEach begin="1" end="10" var="i" step="2">
            ${i}
        </c:forEach>


        -----------------------------------------------

        <!-- items : 表示遍历哪一个对象,注意,这里必须写 EL 表达式。 
        var: 遍历出来的每一个元素用 user 去接收。 -->
        <c:forEach var="user" items="${list}">
            ${user.name} ----${user.age}
        </c:forEach>

总结:

在我们开发中,经常要用到的 6 个行为是:

    <jsp:include > 动态包含
    <jsp:forward> 请求转发
    <jsp:param> 设置请求参数
    <jsp:useBean> 创建一个对象
    <jsp:setProperty> 给指定的对象属性赋值
    <jsp:getProperty> 取出指定对象的属性值

jsp基础笔记

介绍:

JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。

指令

<%@ 指令内容 %>

page 指令

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

  • contentType

    其实即使说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码
  • language

    表明 jsp 页面中可以写 java 代码
  • pageEncoding jsp 内容编码
  • extends 用于指定 jsp 翻译成 java 文件后,继承的父类是谁,一般不用改。
  • import 导包使用的,一般不用手写。
  • session

    值可选的有 true | false .
    用于控制在这个 jsp 页面里面,能否直接使用 session 对象。
    具体的区别是: 如果该值是 true , 那么在代码里面会有 getSession()的调用
    如果是 false : 那么就不会有该方法调用,也就是没有 session 对象了。在页面上自然也就不能使用 session 了。
  • errorPage

    指的是发生错误时要跳转的的页面, 值需要给错误的页面路径
  • isErrorPage

    上面的 errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个 isErroPage , 就是声明某一个页面到底是不是错误的页面。

include (静态包含)

  • 将被包含的文件的源码加入到了本 JSP 程序中,然后再进行编译。

     ` <%@ include file="other02.jsp"%>`

    设置引入的 jsp 页面,必须写相对路径

  • 逻辑: 把另外一个页面的所有内容拿过来一起编译运行输出。 所有的标签元素都包含进来。

taglib

<%@ taglib prefix="" uri=""%>

  • uri: 标签库路径
  • prefix : 标签库的别名

jsp 动作 (动态) 标签

<jsp:include page=""></jsp:include>(include 动态包含)

include 行为用于运行时包含某个文件,如果被包含的文件为 JSP 程序,则先会执行 JSP 程序,然后在把执行的结果包含进来。 

  • 这是在本页面中引入”other.jsp“这个页面的执行结果
    <jsp:include page="other.jsp"></jsp:include>

<jsp:forward page=""></jsp:forward> 实现请求转发功能 (可带参数)

  • page: 需要跳转到的页面或者 servlet 请求路径
  • <jsp:param name="*" value="*"/> 参数行为,带一些参数过去,name & value 是以键值对的形式带过去的
        <jsp:forward page="HttpServlet">
        <jsp:param name="name" value="test"/>
     </jsp:forward>
     
           也可以写成:
           <jsp:param name=""value="" />
              </jsp:forward page="*.jsp">
            
              // 跳转到目标 js 页面后然后再:
            request.getParameter("name");
              // 来获取接受到信息     
      
         // 等同于以下 javaServlet 中的转发代码
    <%
        // 请求转发
        request.getRequestDispatcher("*.jsp").forward(request,respone);
     %>

include 指令和 include 行为的区别?

  • 它们俩的作用相同,区别在于:

    • include 指令 (include file) 是将被包含的文件的源码加入到了本 JSP 程序中,然后在进行编译,属于静态包含,
    • 而 include 行为 (include page) 只是将被包含的文件的运行结果包含进自己。属于动态包含。

    ### JSP 内置对象
    内置对象就是我们可以直接在 JSP 页面中使用这些对象,不用创建

  • request:HttpServletRequest 的对象 *
  • response:HttpServletResponse 的对象 *
  • session:HttpSession 的对象 *
  • application:代表当前应用 是 ServletContext 的对象 *
  • pageContext:页面的上下文。可以获取其他的对象
  • config:jsp 对的 servlet 对应 ServletConfig 的对象
  • out:JspWrite 对象。out.print() 将字符串直接打印在浏览器
  • page:指当前 jsp 对应 servlet 的对象引用
  • exception:必须在 jsp 声明一个指令

    ---

    JSP 作用域对象

    作用域

    表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute

四大作用域:(从上到下作用域范围依次是从小到大)

  • pageContext 【PageContext】

    作用域仅限于当前的页面。它还可以获取到其他八个内置对象。
  • request 【HttpServletRequest】

    作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。
  • session 【HttpSession】

    作用域限于一次会话(多次请求与响应) 当中。
  • application 【ServletContext】

    整个工程都可以访问, 服务器关闭后就不能访问了。

使用作用域来存储数据:

// 使用作用域来存储数据 <br>
   <%
        pageContext.setAttribute("name", "page");
        request.setAttribute("name", "request");
        session.setAttribute("name", "session");
        application.setAttribute("name", "application");
    %>
// 取出四个作用域中的值 <br>
    <%=pageContext.getAttribute("name")%>
    <%=request.getAttribute("name")%>
    <%=session.getAttribute("name")%>
    <%=application.getAttribute("name")%>

### EL 表达式

为了简化 jsp 代码,具体一点就是为了简化在 jsp 里面写的 java 代码。

写法格式

${表达式}

  • EL 表达式的 . 或者 [] 的作用:获取域中对象的属性值,若属性值含有特殊的字符,则可以使用 []

      如:`${emp.first.Name}`(错误)       `${emp["firstName"]}`(正确)
  • 如果从作用域中取值,会由小到大,如果没有,就往下一个作用域取。若四个作用域取完都没有,就无显示。
  • EL 表达式可以自动类型转化,也可以进行简单的算术运算
  • EL 表达式判断某个值是否为空:${empty *}
    例如:${!empty list} //list非空
一般使用 EL 表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。

如何使用

  1. 取出 4 个作用域中存放的值。
        <%
            pageContext.setAttribute("name", "page");
            request.setAttribute("name", "request");
            session.setAttribute("name", "session");
            application.setAttribute("name", "application");
        %>
        
        // 按普通手段取值
        <%= pageContext.getAttribute("name")%>
        <%= request.getAttribute("name")%>
        <%= session.getAttribute("name")%>
        <%= application.getAttribute("name")%>
        
        // 使用 EL 表达式取出作用域中的值
        ${pageScope.name}
        ${requestScope.name}
        ${sessionScope.name}
        ${applicationScope.name}
  1. 如果域中所存的是数组
            <%
               String [] a = {"aa","bb","cc","dd"};
               pageContext.setAttribute("array", a);
           %>
           使用 EL 表达式取出作用域中数组的值 <br>
           ${array[0] } , ${array[1] },${array[2] },${array[3] }
  1. 如果域中所存的是集合

        使用 EL 表达式取出作用域中集合的值 <br>
        ${li[0] } , ${li[1] },${li[2] },${li[3] }
  1. 取出 Map 集合的值

    <%
        Map map = new HashMap();
        map.put("name", "zhangsna");
        map.put("age",18);
        map.put("address","北京..");
        map.put("address.aa","深圳..");
    
        pageContext.setAttribute("map", map);
    %>
    使用 EL 表达式取出作用域中 Map 的值 <br>
    
    ${map.name} , ${map.age} , ${map.address}  , ${map["address.aa"] }

取值细节

  1. 从域中取值, 得先存值。

    <%
        //pageContext.setAttribute("name", "zhangsan");
        session.setAttribute("name", "lisi...");
    %>
    
    ${pageScope.name} 
    // 直接指定到这个作用域里面去找这个 name
    
    ${name}
    // 先从 page 里面找,没有去 request 找,再去 session,去 application <br>
    
    ${sessionScope.name}  
    // 指定从 session 中取值
  2. 取值方式
  3. 如果这份值是有下标的,那么直接使用 []

     <%
         String [] array = {"aa","bb","cc"}
         session.setAttribute("array",array);
     %>
     ${array[1] } --> 这里 array 说的是 attribute 的 name 
  4. 如果没有下标, 直接使用 . 的方式去取

     <%
         User user = new User("zhangsan",18);
         session.setAttribute("u", user);
     %>
     ${u.name}  , ${u.age} 
    

EL 表达式 的 11 个内置对象。

${对象名. 成员}

  • pageContext
    作用域相关对象
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

头信息相关对象

  • header
  • headerValues

参数信息相关对象

  • param
  • paramValues
  • cookie
    全局初始化参数
  • initParam

JSTL

全称 : JSP Standard Tag Library jsp 标准标签库
简化 jsp 的代码编写。 替换 <%%> 写法。 一般与 EL 表达式配合

怎么使用

  1. 导入 jar 包 (jstl.jar && standard.jar) 并添加进工程。
  2. 在 jsp 页面上,使用 taglib 指令,来引入标签库
  3. 注意: 如果想支持 EL 表达式,那么引入的标签库必须选择 1.1 的版本,1.0 的版本不支持 EL 表达式。
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用基础

常用标签

<c:out value="${*}"></c:out>
<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>

c:out :获取域中的属性值,并且对打印到页面的特殊字符进行转换

c:set

        <!-- 声明一个对象 name, 对象的值 zhangsan , 存储到了 page(默认) , 指定是 session -->
        <c:set var="name" value="zhangsan" scope="session"></c:set>
        
        ${sessionScope.name}

c:if

判断 test 里面的表达式是否满足,如果满足,就执行 c:if 标签中的输出 , c:if 是没有 else 的。
        <c:set var="age" value="18" ></c:set>
        <c:if test="${age > 26}">
            年龄大于了 26 岁...
        </c:if>
        
        <c:if test="${age <= 26}">
            年龄小于了 26 岁...
        </c:if>


        ------------------------------

        定义一个变量名 flag  去接收前面表达式的值,然后存在 session 域中

        <c:if test="${age > 26}" var="flag" scope="session">
            年龄大于了 26 岁...
        </c:if>

c:forEach

    <c:forEach items="${requestScope.cusMap}" var="cusMap" begin="0" end="4" step="1"   varStatus="status">
    //items: 要遍历的数组 / 集合
         // 步数:${status.step},
         // 开始的索引:${status.begin},
         // 结束索引:${status.end},
         // 当前的个数:${status.count},
         // 当前的对象:${status.current},
         // 是否为首个:${status.first},
         // 是否为结尾:${status.last},
         // 集合的索引:${status.index},
         //${cusMap.key}, ${cusMap.value.id}
        从 1 开始遍历到 10 ,得到的结果 ,赋值给 i , 并且会存储到 page 域中, step , 增幅为 2, 
        <c:forEach begin="1" end="10" var="i" step="2">
            ${i}
        </c:forEach>


        -----------------------------------------------

        <!-- items : 表示遍历哪一个对象,注意,这里必须写 EL 表达式。 
        var: 遍历出来的每一个元素用 user 去接收。 -->
        <c:forEach var="user" items="${list}">
            ${user.name} ----${user.age}
        </c:forEach>

总结:

在我们开发中,经常要用到的 6 个行为是:

    <jsp:include > 动态包含
    <jsp:forward> 请求转发
    <jsp:param> 设置请求参数
    <jsp:useBean> 创建一个对象
    <jsp:setProperty> 给指定的对象属性赋值
    <jsp:getProperty> 取出指定对象的属性值

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论