JSP页面+EL表达式+JSTL标签库

Posted chritina-victoria

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP页面+EL表达式+JSTL标签库相关的知识,希望对你有一定的参考价值。

1.JSP java server pages.代替servlet程序 回传 html页面的数据给客户端进行显示。

创建:new java enterprise,在web下new jsp

访问:第一次访问jsp页面时,tomcat服务器会将jsp页面翻译成java源文件,并对其编译形成.class字节码文件。

          翻译出来的文件位置:C:UsersVICTORIA.IntelliJIdea2019.3system omcatTomcat_8_5_54_tomcat8workCatalinalocalhost omcat8_war_explodedorgapachejsp

本质:jsp程序通过继承HttpJspBase类间接继承HttpServlet类,实质就是将jsp程序翻译成servlet程序后,在servlet程序中,通过输出流将html数据回传至客户端

语法:

jsp头部page指令:修改jsp页面的属性和行为     <%@ page contentType="text/html;charset=UTF-8" language="java" %>

属性含义:

language             Jsp文件经翻译后形成什么语言的文件,暂时只支持java

contentType        jsp返回的数据类型,即源码中response.setContentType()的值

pageEncoding     当前jsp文件本身使用的字符集

import                  与java源文件一样,用于导包导类

对于out输出流:  autoFlush设置out输出流缓冲区,满后是否自动刷新,默认值ture    buffer设置out输出流缓冲区大小,默认值8kb

errorPage            jsp页面出错后,跳转的页面位置

isErrorPage         设置当前页面是否为jsp出错页面,默认值false;当设置为ture时可以对其进行异常错误信息的获取

session                设置当前jsp页面是否会创建HttpSession对象,默认为ture

extends                设置由jsp文件翻译出来的java类默认继承谁

2.错误类型

JSP Buffer overflow:JSP缓冲区满了之后不能自动刷新。

3.jsp常用脚本:声明脚本、表达式脚本、代码脚本

声明脚本(不常使用嘞)

 技术图片

表达式脚本:在jsp页面上输出数据 <%=  %>,可输出整型、浮点型、字符串和对象。

                      表达式脚本都会被翻译到相应java文件的_jspService()方法中,并可以使用该方法中定义的对象。使用out.print()将内容输出到页面上。结尾不加;

                      在浏览器中输出。

代码脚本:在其中编译我们需要的功能。<%  %>

                  代码脚本都会被翻译到相应java文件的_jspService()方法中,并可以使用该方法中方法。

                  可由多个代码脚本组合完成一个功能,且可与表达式脚本组合使用

                  在控制台输出。例如if,for,重写_jspService中的方法

4.jsp三种注释:html注释、java注释、jsp注释

html注释:<!--  -->翻译到java文件中的_jspService()中,以out.writer()输出到客户端

java注释:// /**/  在声明脚本和代码脚本中使用

jsp注释:<%--  --%>可注释掉jsp文件中的代码

5.jsp九大内置对象

技术图片

response响应对象,

request请求对象,

pageContext: jsp上下文对象,

session会话对象,

application:ServletContext对象,

config:ServletConfig对象,

out: jsp输出对象,

page:指向当前jsp页面的对象,

exception:在jsp声明中添加isErrorPage=‘true‘后得到的异常对象。

6.jsp四大域对象:像map一样存取数据,但各自对数据的存取范围不同。 

PageContextImpl类pageContext:当前jsp页面范围内有效。使用request.getRequestDispatcher("/scope2.jsp").forward(request,response)验证

HttpServletRequest类request:一次请求内有效

HttpSession类session一个会话范围内有效(打开浏览器访问服务器,会话开始;直到关闭浏览器,会话结束)

ServletContext类application:整个web工程范围内。只要web工程不停止,该对象的数据一直存在

7.jsp中的out.write(" ")response.getWriter().write(" "):表示响应,用于给客户端回传内容的。

区别:由于jsp页面在执行完全部代码后,调用out.flush()将out缓冲区中的数据追加到response缓冲区末尾;最后response缓冲区刷新将全部数据写回到客户端。

因jsp翻译成java底层使用out输出,故使用out输出,避免打乱

out.write()和out.print()区别

out.write()输出字符串没有问题(输出其他整型等有问题的原因,底层将整型先转换成ASCIII码后输出)

out.print()输出任何类型都没有问题(原因,底层将数据转换成字符串后使用out.write()输出)

jsp页面使用out.print()进行输出

8.jsp标签:

静态包含:<%@ include file="包含文件路径" %>  可用在对网站页面中重复引用的模块 进行维护

                  不翻译被包含的jsp页面,仅将被包含的代码拷贝到包含的位置,进行输出。

动态包含:<jsp:include page="包含文件路径"><jsp:param name="guo" value="tong"></jsp:include>

                  翻译被包含的jsp页面为 java文件,

                  底层执行 org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/index.jsp", out, false); 调用被包含的页面进行输出

                  中间定义的参数可在 被包含的文件中获取requesr.getparameter("name");

请求转发:<jsp:forward page="/"></jsp:forward>

9.javaweb三大组件:Servlet程序,Filter过滤器,Listener监听器

Listener监听器:JavaEE规范,一种接口,监听事物变化,通过回调函数反馈给程序做相应处理。

10.ServletContextListener监听器(最常使用):监听ServletContext对象的创建和销毁。

                                                   监听到创建和销毁后,分别调用contextInitialized()和contextDestoryed(),在ServletContext对象创建后马上调用做初始化,在ServletContext对象销毁后调用。

使用过程:编写一个类去实现ServletContextListener监听器 监听 ServletContext对象

                  实现两个回调方法

                  在web.xml中配置监听器

11.EL表达式${键值}:expression language  代替jsp页面的 表达式脚本<%= %>在jsp页面进行域对象 数据的输出。编码更加简洁

                            当值为null时,输出空串。

                            四个域中都具有键值 符合要求的话,按pageContext,request,session,application顺序输出

        可输出一个类的普通属性、数组属性( ${p.persons}输出数组地址;${p.persons[]}输出数组中指定位置的值 )。list集合属性${p.persons[]}和map集合属性${p.persons.key1}。

12.EL表达式运算:

逻辑(== != > < >= <=),

关系(&& || !),

数值(+ - * / %),

empty运算(判断一个数据是否为空,值为null 空串 Object数组长度为0 list元素个数为0 map元素个数为0 情况下输出true)(${empty key值}),

三元运算,

.运算(可输出bean对象中属性的值),

[]运算(可输出有序集合中元素的值 同时 可输出map集合中key中含特殊字符key的值${map[‘a.a.a‘]}    ${map["b+b+b"]})

13.EL中11个隐含对象(EL自身定义,可随意使用):scope表示范围

变量 类型 作用
pageContext PageContextImp类 获取jsp九大内置对象;用于输出协议,服务器IP,服务器端口,当前工程路径contextPath,请求方法method,客户端IP remoteHost,会话ID ${pageContext.Session.ID}
pageScope Map(String,Object) 获取pageContext域中的 对象
requestScope Map(String,Object) 获取Request域中的 对象
sessionScope Map(String,Object) 获取Session域中的 对象
applicationscope Map(String,Object) 获取ServletContent域中的 对象
param Map(String,String) 获取请求参数的值 ${param.key值}
paramValues Map(String,String[]) 获取多个请求参数的值
header Map(String,String) 获取请求头的值  ${header[‘user-Agent‘]}    ${header.user-Agent}
headerValues Map(String,String[]) 获取多个请求头的值 ${headerValues.[‘user-Agent‘][0]}  ${headerValues.[‘user-Agent‘]}得到数组对象
cookie Map(String,Cookie) 获取当前请求的cookie信息 ${cookie.JSESSIONID}输出cookie对象    ${cookie.JSESSIONID.name}cookie对象也是 键-值对的组合
initParam Map(String,String) 获取web.xml中配置的<context.param>即上下文参数

对于pageContext对象的使用:EL表达式 . 表示寻找相应的get()

输出使用协议:<%=request.getScheme()%>  ${pageContext.request.scheme}

输出服务器IP:<%=request.getServerName()%>  ${pageContext.request.servlername}

输出服务器端口:<%=request.getServerPort()%>  ${pageContext.request.servlerport}

 

企业中:

<% pageContext.setAttribute("req",request)%>  先封装再使用

<%=req.getServerPort()%>  ${req.servlerport}

14.JSTL标签库 JSP Standard Tag Library  代替JSP代码脚本  

JSTL五类标签库:

核心标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> taglib表示标签库 

格式化:

函数

数据库:现使用dao层实现与数据库的交互

xml:早期客户端与数据库之间交互,现使用JSON

使用步骤:

导入jstl标签库的jar包(taglibs-standard-impl-1.2.1.jar和taglibs-standard-spec-1.2.1.jar)

使用taglib指令引入标签库 技术图片

15.标签
保存数据:<c:set scope="" var="" value="" /> (scope属性设置保存到哪儿个域,page表示PageContext域(默认),request表示Request域,session表示Session域,application表示ServletContext域)(var设置键值)(value设置值)

if判断<c:if test="" var="" scpoe=""/>(test条件表达式,使用EL,${12=12})

switch选择<c:choose><c:when><c:otherwise> 分别表示父标签,test条件为真时执行,test条件为假时执行,

遍历整型,对象数组,map对象,list对象:

    <c:forEach var="i" begin="1" end="5" step=""  />  var表示当前循环对象  varStatus当前变量的状态   items表示遍历的集合 

  技术图片

技术图片

16.varStatus当前变量的状态 <c:varStatus="status" />   ${status.current}

public status implement interface LoopTagStatus{

  public Object getCurrent();//当前遍历的数据

  public int getIndex();//当前遍历的索引

  public int getCount();//当前遍历的个数

  public boolean isFirst();//当前遍历是否为开头或结尾

  public boolean isLast();

  public Integer getBegin();//获取begin end step的属性值

  public Integer getEnd();

  public Integer getStep();

}

以上是关于JSP页面+EL表达式+JSTL标签库的主要内容,如果未能解决你的问题,请参考以下文章

EL(表达式语言)与JSTL(JSP标准标签库)

JSP常用标签——JSTL标签和EL表达式

EL表达式和JSTL标签库

El表达式&JSTL标签库

JAVA Web基础 EL表达式与JSTL标签库

JSP和El表达式和JSTL标签库使用