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”]}

猜你喜欢

转载自www.cnblogs.com/xfdhh/p/11409078.html