• day11_JSP+EL+JSTL学习笔记


    一、jsp概述

        JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

        JSP实际上就是Servlet

     

        JSP这门技术的最大的特点在于:写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

        jsp = html + java

     

        html:静态内容。

        servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容-->太苦逼。

        jsp:适合编写输出动态内容,但不适合编写java逻辑。

     

        Servlet负责那些事情?

          1. 获取表单数据

          2. 处理业务逻辑

          3. 分发转向

        提问:为什么JSP技术也是一种动态web资源的开发技术?

          答:因为JSP技术允许在页面中嵌套java代码,以产生动态数据,并且web服务器在执行jsp时,web服务器会传递web开发相关的对象给jsp,

               jsp通过这些对象,可以与浏览器进行交互,所以jsp当然也是一种动态web资源开发技术。

        强调一个概念:

          对现在的用户而言,认为通过浏览器看到的东西都是网页。

          但我们程序员心里要清楚,开一个浏览器访问网页,这些网页有可能是一个html页面(即静态web资源),也有可能是一个动态web资源(即用servlet或jsp程序输出的)。

    二、jsp的原理

        1. IE浏览器在访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?(Servlet)

          答:第一次:转译(翻译) --> 编译 --> 执行

              第二次:执行

        2. Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签发送到客户端的?

          答:out.print("<......>"); 或者 out.write("<......>");

        3. Jsp页面中的java代码服务器是如何执行的?

          答:服务器 --> .java文件 --> .class文件 --> 结果out回客户端

        4. Web服务器在调用jsp时,会给jsp提供一些什么java对象(内置对象)?

          答:HttpSession、ServletConfig、ServletContent、request、response、out等等。

            
            
     
            

    三、jsp的最佳实践

        Servlet:控制器。重点编写java代码逻辑(获取表单数据、处理业务逻辑、分发转向)

        JSP:代码显示模板。重点在于显示数据。(为什么显示数据不直接用.html文件呢?因为.jsp文件中可以插入java代码显示回显消息,简言之,jsp功能更强大)

     

        示例:

          lojin.jsp

          doLogin.jsp(该jsp文件,先转译成java文件,注意:该jsp文件说白了其实就是纯的java代码,那么就最好不使用jsp文件了。)

          success.jsp

     

        但是用户关心的是只有显示给他们的页面,你怎么实现的,跟我(用户)没有关系。所以doLogin.jsp的代码可以放到src中。

    四、jsp的基本语法

        1JSP的模版元素:简言之就是网页的静态内容

        例如:html标签和普通文本。

        2JSP的脚本

        2.1、小脚本 

          <% java代码 %>

        2.1、表达式 

          <%= 2 + 3 %> 等价于out.print(2 + 3);

              
     
              

        2.3、声明 

          <%! %> 表示在类中定义全局成员和静态块。

        3JSP注释

        JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量

        网页注释:<!-- 网页注释 -->     特点:不安全,费流量

              

        4JSP3个指令

        5JSP6个动作

        6JSP9个内置对象

    五、jsp3个指令

      JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

      在JSP 2.0规范中共定义了三个指令: 

        page指令(页面级别)

        include指令(导入其它页面的信息)

        taglib指令(标签指令)

      例如: 

          

        <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; UTF-8"%>

      语法:

          <%@ 指令名称 属性1="属性值1" 属性2="属性值2 ...... %>

        或者:

          <%@ 指令名称 属性1="属性值1%>

          <%@ 指令名称 属性2="属性值2%>
     

      示例:

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
        或者:
          <%@ page language="java" %>
          <%@ page import="java.util.*" %>

       1page

        作用:page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面。

            为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 

        属性:

          1.1importjava代码中的import是一样的。

            <%@ page import="java.util.Date, java.util.List" %>

            或者:

            <%@ page import="java.util.Date" %>

            <%@ page import="java.util.List" %>

            JSP会自动导入(默认导入)以下的包:

              import java.lang.*;

              import javax.servlet.*;

              import javax.servlet.http.*;

              import javax.servlet.jsp.*;

          1.2session: 表示是否会自动创建session对象。其默认值是true。

          1.3buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小,默认大小是8kb。建议最好不要改大小。

          1.4、errorPage: 如果页面中有错误,则跳转到指定的资源。(即不让页面弹出404/500等错误)

            errorPage="/uri" 

            如果写"/"则代表当前应用的目录下,绝对路径。

            如果不写"/"则代表相对路径。

          1.5isErrorPage: 表示是否创建throwable对象。其默认值是false。作用:输出页面错误信息:by zero

          1.6contextType: contentType="text/html; charset=UTF-8" 告诉浏览器使用什么编码来解析文本。等同于 response.setContextType("text/html; charset=utf-8"); 

          1.7pageEncoding: 告诉JSP引擎(服务器)要转译(翻译)的文件使用的编码。

            例如:<%@ page  pageEncoding="gbk" %>

          1.8isELIgnored: 是否支持EL表达式。 默认是false,表示支持EL表达式。

            例如:${1+1}  等价于out.print(1+1);

          pageEncoding说明图:

            

       2include

          include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

            静态包含:把其它资源包含到当前页面中。

              <%@ include file="/include/header.jsp" %>

            动态包含:

              <jsp:include page="/include/header.jsp"></jsp:include>

            两者的区别:转译(翻译)的时间段不同

              前者:在翻译时就把两个文件合并

              后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

            使用原则:能用静的就不用动的。原因之一是:可以省略一些代码的书写。

       3taglib

          作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

            <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    prefix:前缀(相当于重新给uri起个名字)

           示例:

            <% 

              if (5 > 3) { 

              out.print(5); 

              } 

            %> 

            <%-- 上下二种方式是等价的 --%>

            <c:if test="${5>3}"> 

              aaa 

            </c:if>

            下面的这种方式很好用!后面慢慢体会。

    六、jsp6个动作

        使用标签的形式来表示一段java代码。

          如: 

            <jsp:include page="2.jsp"></jsp:include>

            <jsp:include > 动态包含

            <jsp:forward> 请求转发

            <jsp:param> 设置请求转发的参数

     

            <jsp:useBean> 创建一个对象

            <jsp:setProperty> 给指定的对象属性赋值

            <jsp:getProperty> 取出指定对象的属性值

          示例:

            

    七、jsp9个内置对象

        指在JSP<%=%> <% %>中可以直接使用的对象,服务器给我们创建好的对象,直接拿过来用就行了。

          例如:

          <%=request.getParameter("name") %>

          <%

             Student stu = new Student();

             stu.setName("tom");

             out.print(stu.getName());

             // request.getRequestDispatcher("/7.jsp").forward(request, response);

           %>

          

        pageContext(重要):做自定义标签的时候会用到它,该域对象用的比较少,因为该域对象只在当前页面有效。

        1、本身也是一个域对象:它可以操作其它三个域对象(request、session、application)的数据

            void setAttribute(String name, Object value);

            Object getAttribute(String name);

            void removeAttribute(String name);

            操作其它域对象的方法

            void setAttribute(String name, Object value, int scope);

            Object getAttribute(String name, int scope);

            void removeAttribute(String name, int scope);

              scpoe(域)的值:

              PageContext.PAGE_SCOPE 

              PageContext.REQUEST_SCOPE 

              PageContext.SESSION_SCOPE 

              PageContext.APPLICATION_SCOPE

            findAttribute(String name); // 自动从page、request、session、application依次查找,找到了就取值,然后结束查找。(很牛的方法,要记住)

        2、它可以创建其它的8个隐式对象

            在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时使用。

        3、提供了转发和包含的简易方法

            pageContext.forward("2.jsp"); // 请求转发

            pageContext.include("2.jsp"); // 包含

    八、四大域对象:实际开发如何用?

        PageContext:pageConext      存放的数据仅在当前页面有效。开发时使用较少。当前页面存放数据用表单标签中的 <input type="hidden" />,且该存值方式用户看不到。

        ServletRequest: request      存放的数据在一次请求(转发:可以传数据)内有效。使用非常多。

        HttpSession: session         存放的数据在一次会话(多次请求)中有效。使用的比较多。例如:存放用户的登录信息、购物车功能。

        ServletContext: application  存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。用于统计在线人数。

    九、EL表达式

      1EL的概述和基本语法 

          EL表达式:expression language 表达式语言

            作用:要简化jspjava代码开发。

              特点:具有很强的容错机制。

          它不是一种开发语言,而是jsp获取数据的一种规范。或者说,它把java底层代码进行了封装。

            

      2EL的具体功能 

        a、获取数据

          EL表达式只能获取存在4个作用域中的数据。

            ${ s } 原理: ${ s } 等价于 pageContext.findAttribute("s");

                注意1:${ s }取不到表单数据,若想取到表单数据,需要 ${ param.s } 这样才可以取到。

                注意2:url?name=tom&pwd=123  这种方式就是get提交的表单方式,所以需要 ${ param.name } 才能取到值。

          EL获取对于null这样的数据,在页面中表现为空字符串(""),不会报错,说明EL具有很强的容错机制

          ${ s.name } 等价于 s.getName()方法

          点(.) 运算符相当于调用了getter方法,点后页面跟的是属性名。
            
          属性导航:非常好用。以后学习框架Hibernate的时候,一个对象中包含其它对象。
            
          []运算符:点能做的,它也能做它能做的,点不一定能做。
            ${ s.name } == ${ s['name'] } == ${ s["name"] }
            

        b、运算

          empty 

            判断null空字符串没有元素的集合(即使集合对象本身不为null)都返回true。

             

          三元运算符  

            

        c、隐式对象:11

           

            
     
            

    十、JSTL

      1、什么是JSTL

      JSTLJavaServerPages Standard Tag LibraryJSP标准标签库。

      作用是:简化java代码。

      EL表达式${...} 只能处理简单java代码,复杂的逻辑java代码就不行了!此时就用JSTL。

      2JSTL的作用

      使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

            注意:在JSTL中想取值,必须加${值}。

      3、使用JSTL

        1)在JSP页面中添加taglib指令(prefix:前缀(相当于重新给uri起个名字))

            

        2)使用JSTL标签

            

      4、常用标签介绍

      核心标签库:

      > 通用标签:set、 out、 remove(了解就行,开发时根本不用个!)

            
            
     

      > 条件标签if  choose

            
     

      > 迭带标签forEach

      普通for循环

      

      迭带器

            
          注意:
            <tr></tr> 代表行
            <td></td> 代表单元格
            <th></th> 相当于<td>,只是内置样式加粗居中
            
            
          或者使用css选择器中的类选择器的方式改变样式,如下:
            
            
          c:forEach中的varStatus属性。
            该属性指向一个字符串,该字符串引用一个对象。map.put("vs", 一个对象); 
              这个对象记录着当前遍历的元素的一些信息:
              getIndex() 返回索引,从0开始。
              getCount() 返回计数,从1开始。
              isFirst() 是否是第一个元素。
              isLast() 是否是最后一个元素。
  • 相关阅读:
    passwd: Have exhausted maximum number of retries for service
    将单个文件上传到多机器工具
    leetcode-Jump game II
    LeetCode--Combination Sum --ZZ
    Leetcode- Find Minimum in Rotated Sorted Array-ZZ
    leetcode-permutation sequence
    leetcode-next permutation
    LeetCode-Subsets ZZ
    leetcode-Restore IP Addresses-ZZ
    leetcode-palindrome partitioning-ZZ
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/9013314.html
Copyright © 2020-2023  润新知