Java学习笔记(二十二):JSP、EL、JSTL

写在前面:

JSP
原理 jsp--java--class--使用
脚本 <% service方法 %>  <%!  成员 %>  <%=  out.print() %>
内置对象  pageContext  request  response  out  session  page  exception  config  application
注释 <!--  -->     <%--  --%>
指令

<%@指令  属性列表  %>

page:contentType、language、errorPage、isErrorPage、buffer、import

include:file

taglib:prefix、uri

EL
${表达式}    \${表达式}
运算(符号/英文)、[not] empty

${域名.键名}      ${键名}

域:pageScope、requestScope、sessionScope、applicationScope

${对象.属性}      ${ list[index] }       ${ map.key }         ${ map['key'] }
隐式对象:(四个域)、pageContext
JSTL

if

test
choose when、otherwise
for

items、begin、end

step、var、varStatus

s.index、s.count


1. JSP

介绍:

JSP:Java服务端页面,用于简化书写;修改后不用重启tomcat

tomcat作出响应前,会先找response的缓冲区,再找out的缓冲区

原理:

浏览器访问a.jsp;服务器找是否有这个a.jsp资源

如果有:将.jsp文件转成.java文件;编译.java文件,生成.class字节码文件;由字节码文件提供访问

因此,JSP本质是Servlet

JSP脚本:JSP定义Java代码的方式

方式一:<%  Java代码区  %>     -----在service方法中

方式二:<%!  Java代码区  %>     -----在成员位置(成员变量、成员方法、静态代码块等)

方式三:<%=  Java代码区  %>     -----在service方法的out.print(" ")中

JSP内置对象9个:(不需要创建和获取,直接使用---因为service方法中都有创建)

pageContext:当前页面共享数据,可获得其它八个对象

request:请求

response:响应

out:(JSPWriter)将数据输出到页面 .print   .write

session:服务端会话技术

page:(Object)当前页面(servlet)

config:(ServletConfig)servlet的配置对象

exception:(Throwable)

application:(ServletConfig)域对象

指令3个:

用于配置jsp页面、导入资源文件

格式:<%@指令名  属性列表  %>

page:配置;

----------contentType 设置响应体的MIME类型和字符集,设置当前页面的编码

----------buffer 缓冲区大小,默认8kb

----------language 语言(java)

----------import 导包

----------errorPage 发生错误后跳转到的页面

----------isErrorPage 标识这个页面是不是错误页面,默认false,设为true时可以使用exception对象

include:导入页面;

----------file 要导入的页面

taglib:导入资源;需要先在WEB_INF下的lib文件夹下导入标签库的jar包

----------prefix 自定义的前缀

----------uri 标签的位置

 

注释:

<!--  -->    应用于html内容,这个注释会被发送到页面

<%--  --%>      应用于整个jsp,这个注释不会被发送到页面

2. EL表达式

介绍:

替换和简化JSP页面的java代码

JSP默认支持EL表达式;在page中设置isELIgnored='true' 则EL不被解析

语法:

格式:${表达式}

忽略单个EL表达式:\${表达式}

运算:

算数:3/4 , 3 div 4

比较

逻辑:&& , || , ! , and

空运算符:empty list , not empty str ;用于判断字符串集合数组等是否为null并且长度是否为0

取值:

只能从域对象中取值:${域名.键名}

域对象从小到大依次:pageScope、requestScope、sessionScope、applicationScope

${键名} :表示依次从最小的域中找是否有该键的值,直到找到为止;没有找到会显示空字符串

取值---对象:

${对象.属性名} :其实是执行对象的getter方法

-----逻辑视图:可以在类中定义getAb方法,使用${类对象.ab}获得getAb的返回值

list:${list[index]} (下标越界什么都不显示,不报错)

map:${map.key}       ${map['key']} (单双引号到可以)

取值---隐式对象11个:

pageScope、requestScope、sessionScope、applicationScope

pageContext 也是一个隐式对象(也是JSP的内置对象),可以获得其它八个JSP内置对象

动态获取虚拟目录:${pageContext.request.contextPath}

3. JSTL

介绍:

JSP标准标签库;免费开源

用于替换和简化JSP页面的Java代码

使用:

导jar包:javax.servlet.jsp.jstl.jar、jstl-impl.jar(位置在WEB-INF的lib下,别忘了add as library)

引入标签库:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用标签:<c:标签 属性列表>    </c:标签>

举例:<c:if test="true">abc</c:if>

常用标签:

if 的属性:test(必有):接受boolean表达式,如果为true,则显示标签体内容

choose:相当于switch(when--case、otherwise--default)

for 的属性:begin开始位置,end结束位置,var变量,step步长,varStatus循环状态对象;

                      items对象

<c:if test="true">abc</c:if>
<hr>

<%
    int n = 1;
    request.setAttribute("n", n);
%>
<c:choose>
    <c:when test="${n>0}">${n}是正数</c:when>
    <c:when test="${n<0}">${n}是负数</c:when>
    <c:otherwise>${n}是零</c:otherwise>
</c:choose>
<hr>

<c:forEach begin="0" end="10" var="i" varStatus="s" step="2">
    ${i}
    ${s.index}  <%-- 索引,从0开始 --%>
    ${s.count}  <%-- 循环次数,从1开始 --%>
    <br>
</c:forEach>
<hr>

<%
    ArrayList<String> list = new ArrayList<>();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="i">
    ${i}
    <br>
</c:forEach>
<hr>

 

发布了97 篇原创文章 · 获赞 52 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/poppy_rain/article/details/98495309