• JSP与EL表达式


    JSP

    1、什么是JSP?

      Java Server Pages,SUN公司提供的一种动态网页编程技术。

    2、为什么要有JSP ?

      Servlet输出页面很繁琐

      Servlet生成的页面没有预览工具  

      JSP:  JSP = HTML+java代码+JSP本身的标签

    3、JSP是动态资源还是静态资源?

      是动态资源   放的位置、编写和访问上很像静态资源。本质上是一个Servlet。

    4、jsp如何运行?

      一个jsp在第一次访问时,会被容器(服务器)中的jsp引擎(容器中编译jsp的软件模块)

          编译成一个Servlet  jsp名字_jsp.java 和 jsp名字_jsp.class并且放在 Tomcat的work目录下。

    5、JSP和Servlet的不同 

      1.编写jsp文件就是编写文本文件一样。编写servlet编写的是java程序。

      2.编写jsp以后,直接将jsp拷贝到容器的部署目录就可以了。

      3.编写后的servlet要通过web.xml文件加以配置。jsp直接访问就行了。

      4.jsp和静态资源放在一起就可以了。-----jsp在使用上更像静态资源。

    6、JSP的三种脚本标签

      <%!  %>这个标签可以用来声明变量,方法 ,类;变量和方法是 成员变量和成员方法;类是成员内部类

           一般不用该标签

      <%  %>在这个标签中编写的java代码,将会出现在 _jspService()

      <%=  %>在这个标签中写的java代码将会出现在out() 中  向页面输出   该标签中的代码一定不要加分号

    7、JSP中的注释

      <!--   -->普通注释,会以注释的形式出现在html的代码里

          <%--   --%>JSP注释,不会出现在html中

    8、运行原理

      在tomcat的conf中的web.xml中可以看到本质还是Servlet

      原理图解:

    9、三大指令标签

      1、<%@ page %> 

    Language

    jsp中可以嵌入的语言 目前为止只能填java

    Import

    用来导包

    pageEncoding

    设置当前jsp页面的编码方式

    contentType

    设置浏览器查看这个页面时使用编码方式

    Session

    默认是true 当前jsp中能否使用session(如果为true,则在这个jsp中就已经可以使用session对象)

    isELIgnored

    当前页面能否使用EL表达式

    Buffer

    缓存区大小  默认是8kb

    autoFlush

    是否自动刷新

    errorPage

    指定错误页面

    isErrorPage

    设置为错误页面 (设置为错误页面,就有处理异常的功能)

      错误页面一般在web.xml中配置

    <error-page>
         <error-code>500</error-code>
         <location>/error.jsp</location>
    </error-page>
    <error-page>
    
    <exception-type>java.lang.NullPointerException</exception-type>
        <location>/error.jsp</location>
    </error-page>

      2、<%@ include file=""  %>  在当前页面包含其他页面

        这样的包含是静态包含,也叫做编译期包含。两个jsp将被编译成一个class文件。

        静态包含时,生成的html的结构被破坏

        动态包含:<jsp:include page="include1.jsp"></jsp:include>

      重点:动态包含和静态包含的区别    

        静态包含:是先将整个页面合并然后再生成相应java文件再在tomcat上运行。
        动态包含:先编译所有的页面,在使用的时候 jsp:include标签动态的加载。

        静态加载包含一些HTML静态的页面,没有动态的操作,编译较快,使用方便,功能欠缺。
        动态加载速度会稍稍慢一些,但是所有的页面都是独立的,功能齐全。

      3、<%@ taglib prefix="前缀" uri="标签库的路径" %>   引入标签库,使用的最多

    10、九大内置对象

      (1)out输出流对象  out流的执行是 先把 缓冲区中的内容 输出到 response.getWriter()的缓冲区中,再由

              response.getWriter() 这个流统一输出。

    <%="aaa"%>
    <% out.write("bbb");%>
    <%response.getWriter().write("ccc");%>
    输出结果为:ccc  aaa  bbb

      (2)pageContext  页面对象,可以获得其他八个对象,也有作用域(范围为当前页面)

      (3)request  请求对象

      (4)response  响应对象

      (5)session  会话对象

      (6)application  项目对象,用法和ServletContext一样

      (7)config  配置对象,用法和ServletConfig一样

      (8)Page  页面对象=this

      (9)exceptino  异常对象,只有jsp的isErrorPage=true时,才会出现这个对象

    11、四个作用域 

      pageContext:页面作用域
      request:请求作用域
      Session:会话作用域
      application:项目作用域

      1、在当前页中设置属性值,所有的作用域都可以获取到

      2、请求转发 时,pageContext作用域失效,其他的作用域可以获取值

      3、再次访问,进行第二次请求时, pageContext和request都失效

      4、关闭浏览器,重新打开再次访问,pageContext、request、session 都失效了

      5、关闭服务器,全部失效  

     EL表达式

    1、EL是Expression Language的缩写,它是一种简单的数据访问语言。目的是为了使JSP写起来更加简单。

    2、EL表达式的作用

      1.获取作用域中的值

      2.做运算 (数学运算  逻辑运算 关系运算...)

      3.EL 提供常用的操作web对象  (11 个)

      4.访问java的方法

    3、获取作用域中的值  

      例如:${name} 按照 page,request,session,application(ServletContext)的顺序,查找作用域 key是name的 value值 

       也可以指定查找的范围

                ${pageScope.key}

                ${requestScope.key}

                ${sessionScope.key}

                ${applicationScope.key}   

        getAttribute(key);  当key不存在时返回 null

        ${key}              当key不存在时返回空字符串"" 

    User user = new User(1,"zhaosi",20);
    request.setAttribute("user", user);
    /*
    ${user.id}
    ${user.name}
    ${user.age}   
    user----> 保存在request中时的key值
    id,name ,age 对象的属性名
    要求: 属性必须有get方法 EL表达式才能访问到
    */
    <%
             List<String> list = new ArrayList<String>();
             pageContext.setAttribute("list", list);
     %> 
    ${empty list }  判断list中是否有元素
             
     //数组  List  Map
             
     <%
              String[] ss = {"aaa","bbb","ccc"};
              pageContext.setAttribute("ss", ss);
              List<String>  list = new ArrayList<String>();
              list.add("xxx");
              list.add("yyy");
              list.add("zzz");
              request.setAttribute("list",list);
    
              List<User> list2 = new ArrayList<User>();
              User u1 = new User(1,"qwe",20);
              User u2 = new User(2,"asd",20);
              User u3 = new User(3,"zzz",20);
              list2.add(u1);
              list2.add(u2);
              list2.add(u3);
              request.setAttribute("list2",list2);
              
           
              Map<String,String> map = new HashMap<String,String>();
              map.put("aaa-a", "111");
              map.put("bbb", "222");
              map.put("ccc", "333");
              
              pageContext.setAttribute("map", map);
    %>
            ${pageScope.ss[1] }<br>
            ${requestScope.list[2] }<br>
            ${list2[0].name}<br>
            ${map.bbb } <br>
            ${map["aaa-a"] }

      注:EL不能遍历集合结构

    4、做运算 注意:两个值必须在一个大括号里,不能分开写

      ${10+2 } ${10 / 2}  ${5==5 }  ${5<3 }
      ${list2[0].name=="aaa" }
      ${list2[0].age==20 }
      ${list2[0].age == list2[1].age }

      运算符:

    操作

    描述

    示例

    结果

    ==eq

    是否相等

    ${5==5}

    True

    !=ne

    是否不等

    ${5!=5}

    false

    <lt

    是否小于

    ${5<7}

    True

    >gt

    是否大于

    ${5>7}

    false

    <=le

    是否小于等于

    ${5 le 5}

    true

    >=ge

    是否大于等于

    ${5 ge 6}

    false

      同样也有逻辑运算符

    5、EL提供常用的操作WEB对象

    pageScope

    requestScope

    sessionScope

    applicationScope

    param         相当于  request.getParameter()

    paramValues   相当于  request.getParameterValues()

    header        相当于   request.getHeader();  一个key对应一个value

    headerValues  相当于   request.getHeaders() 一个key对应多个value                             

    initParam     获取初始化参数(全局初始化参数)

    cookie        获取Cookie的

    pageContext  获取其他八个内置对象   访问这个八个对象下的get...方法

      注:当属性中出现 - 时:会被认为是减号,应该这样写  ${header[“User-Agent”]}

  • 相关阅读:
    你不是在拯救世界就是在拯救世界的路上
    你可以去当程序员了
    郭美美是个好姑娘
    据说有个老太太
    生命的尽头
    有关程序的50个至理名言
    程序员是这样的
    新买移动硬盘
    如果有天你看到我疯了,其实就是你疯了
    写字楼里写字间
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11409078.html
Copyright © 2020-2023  润新知