Jsp相关介绍

简介: Jsp相关介绍

一、JSP内置对象

1.1概念

  • JSP内置对象即JSP的隐式对象
  • JSP隐式对象也被称为预定义变量
  • JSP隐式对象是JSP容器为每个页面提供的Java对象

在JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagaContext、cofig、page、excepition

1.2特点

  • 由JSP规范提供,不用编写者实例化;
  • 通过Web容器实现和管理;
  • 所有JSP页面均可使用;
  • 内置对象不能在JSP的<%!..%>中使用,因为out等内置对象是方法的局部变量,因此不能在类中直接使用out等内置对象

Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量

  • 只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%><%使用内置对象%>

1.3分类

  • 输入输出对象
  • request、resonse、out
  • 通信控制对象
  • pageContext、session、application
  • Servlet对象
  • page、config
  • 错误处理对象
  • exception

1.4JSP与servlet对象的对应关系

JSP的本质就是Servlet,Servlet是JSP的前身和基础,也就是说JSP也实现了Servlet这个接口。

JSP的很多内置对象都是通过Servlet的HttpServletRequest对象、HttpServletResponse对象和HttpServlet得到的

对 象 类型 说 明
request javax.servlet.http.HttpServletRequest 获取用户请求信息
response javax.servlet.http.HttpServletResponse 响应客户端请求,并将处理信息返回到客户端
out javax.servlet.jsp.JspWriter 输出内容到 HTML 中
session javax.servlet.http.HttpSession 用来保存用户信息
application javax.servlet.ServletContext 所有用户共享信息
config javax.servlet.ServletConfig 这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数
pageContext javax.servlet.jsp.PageContext JSP 的页面容器,用于访问 page、request、application 和 session 的属性
page javax.servlet.jsp.HttpJspPage 类似于 Java 类的 this 关键字,表示当前 JSP 页面
exception java.lang.Throwable 该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象。

二、JSP域对象

2.1概念

作用域:JSP创建的对象有一定的生命周期,也有可能被其他对象访问。对象的生命周期和可访问性就是作用域,即信息共享的范围。

域对象:有作用域的对象

2.2四大域对象

  • pageContext(page 域对象)
  • request(request 域对象)
  • session(session 域对象)
  • application(application 域对象)
作用范围
作用域 描述 作用范围
page 如果把属性保存到 pageContext 中,则它的作用域是 page。 该作用域中的属性只在当前 JSP 页面有效,跳转页面后失效。
request 如果把属性保存到 request 中,则它的作用域是 request。 该作用域中的属性只在当前请求范围内有效。服务器跳转页面后有效,例如jsp:forward;客户端跳转页面后无效,例如超链接。
session 如果把属性保存到 session 中,则它的作用域是 session。 该作用域中的属性只在当前会话范围内有效,网页关闭后失效。
application 如果把属性保存到 application 中,则它的作用域是 application。 该作用域中的属性在整个应用范围内有效,服务器重启后失效。

2.3通用方法

getAttribute(String name) //获取对应的数据
getAttributeNames()//获取所有的key
removeAttribute(String name) //移除对应的数据
SetAttribute(String name, Object object) //设置数据

三、EL表达式

3.1EL表达式是什么?

概念

EL(Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。

语法
以“${”为起始、“}”为结尾,中间为表达式
${EL expression}  
${obj.sname}  
【注意:${obj.sname}实质是调用obj的getName()方法——Java反射机制】
【注意:sname必须是stu实体类中的属性名!!!】
eg:${stu.sname}实质就是调用了stu.getSname()方法 
eg:${aa}实质就是拿域对象中键为aa的值
EL中的隐含对象(作用域)
pageScope、requestScope、sessionScope、applicationScope //在键出现冲突(重复)的时候使用,用来区分调值
eg:
${sessionScope.user.name}就是取出session范围内的namme值

3.2为什么要用EL表达式?

核心:代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出

之前的JSP页面中,我们经常使用JSP表达式来输出变量或者页面之间传递的参数,大大降低了页面的可读性。

而EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。

3.3怎么使用?

eg:${stu.sname}实质就是调用了stu.getSname()方法 
eg:${aa}实质就是拿域对象中键为aa的值
(1)EL访问JavaBean的属性
  ${key.属性}
  ${key["属性"]}
(2)EL访问数组中的数据
  ${数组名[下标]}
  ${数组名[下标].属性}
(3)EL获取list中数据
  ${集合名[下标]}
(4)EL访问Map
  ${集合名.key}
EL运算符
类别 运算符
算术运算符 +、-、*、/ 或 div、%或 mod
关系运算符 = = 或 eq、!= 或 ne 、< 或 It、>或 gt、<=或le、>= 或 ge
逻辑运算符 &&或and、
其他运算符 Empty运算符、条件运算符、()运算符
//算术、关系、逻辑运算符同java一致
eg:${2>1&&5!=6}
//empty/not empty运算符 判断是否为空/不为空
eg:${empty ls}

四、JSTL标签

4.1JSTL是什么?

概念

JSTL(JSP Standard Tag Library)是JSP标准标签,由apache实现。是sun公司制定的,类似于HTML标签的jsp标签技术。俗称C标签。

核心标签库

4.2为什么要用JSTL?

使用了EL表达式可以简化JSP页面代码,但是如果需要进行逻辑判断、循环遍历怎么办?

JSTL就来了。

4.3怎么用?

1.导入依赖jar:jstl.jar、standrad.jar,将两个JSTL的jar包放到WebContent->WEB-INF->lib下
2.在所需的JSP页面添加taglib指令,引入JSTL中core包依赖约束
taglib指令:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

4.4通用标签:set remove out

4.4.1 out标签
  • 标签:用于将结果输出。类似于JSP中的<%= %>表达式,或者是EL表达式${} expression }。
<%--取值--%>
<c:out value="${userName}"></c:out>
  • 内部属性介绍:
  • value:设置要输出到页面的数据,要使用EL表达式
  • default:设置一个默认值,当value所设置的EL表达式的值为null时,则将default所对应的值输出到页面
  • escapeXml:设置输出到页面中的内容是否转义,默认值为true,表示转义,即原样输出;若设置为false,表示不转义,输出到页面中的内容会被浏览器解析
4.5.2 set标签
  • 标签:用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。
<%--设值--%>
<c:set var="userName" value="tanghaorong" scope="session"></c:set>
  • 内部属性介绍:
  • var:设置共享数据的属性名
  • value:设置共享数据的属性值
  • scope:设置共享数据的域对象的范围,若不指定域对象的范围,则默认在pageContext域对象中共享数据,scope=“page(默认)|request|session|application”
4.5.3 remove标签
  • 标签:相较于,作用是移除范围域中的变量。
<%--删除userName变量--%>
<c:remove var="userName"></c:remove>
  • 内部属性介绍:
  • var:要删除的域对象中共享数据的属性名
  • scope:要删除共享数据的域对象的范围,
  • scope=“page|request|session|application”,若不指定scope,则删除所有域对象中以var的值作为属性名的数据

4.5条件标签if

4.5.1 if标签
  • 标签:和程序中的if语句作用相同,用来实现条件控制,但是没else功能。
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
       标签体内容
</c:if>
  • 其中参数说明:
  • test属性用于存放判断的条件,一般使用EL表达式来编写。
  • var属性用来存放判断的结果,类型为true或false。
  • scopes属性用来指定var属性存放的范围。
4.5.2 、和标签
  • 、和标签:这三个标签通常一起使用,标签作为和标签的父标签来使用。类似于程序中if-else,其中表示if,表else。
<%
    //在session中设置值
    session.setAttribute("score",50);
%>
<c:choose>
    <c:when test="${score>60}">
        <span>恭喜!及格了</span>
    </c:when>
    <c:otherwise>
        <span>不好意思!不及格</span>
    </c:otherwise>
</c:choose>

4.6迭代标签:forEach forTokens

4.6.1 forEach标签
  • :相当于 for 循环。java中有增强for循环和普通for循环,JSTL 中的 也有两种用法
  • 作用:根据循环条件遍历集合中的元素
  • 属性:
  • var设定变量名用于存储从集合中取出的元素(必须无默认值)
  • items指定要遍历的集合
  • begin、and用于指定遍历的起始位置和终止位置(有默认值)
  • step指定循环的步长(有默认值)
  • varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。
  • index 下标
  • count 技术
  • first 是否是第一个
  • last 是否是最后一个
<!--1、完整语法-->
<c:forEach items="要遍历的集合对象" var="变量" varStatus="状态" begin="开始" end="结束"  step="增量">
   循环体代码…
</forEach>
<!--第一种用法:forEach增强-->
<c:forEach items="要遍历的集合对象" var="变量" >
   循环体代码…
</forEach>
<!--
  第二种用法:类似于 Java 中的普通for循环
  从0循环到10,变量名是 `i` ,每次自增1
-->
<c:forEach begin="0" end="10" step="1" var="i">
    ${i}
</c:forEach>
4.6.2 forTokens标签
  • 标签:该标签用于浏览字符串,并根据指定的字符将字符串截取。
  • 语法
<c:forTokens items=”strigOfTokens” delims=”delimiters” [var=”name”] [begin=”begin”] [end=”end”] [step=”len”] [varStatus=”statusName”] >
    主体内容
</c:forTokens>

其中参数说明:

  • items指定被迭代的字符串。
  • delims指定使用的分隔符。
  • var指定用来存放遍历到的成员。
  • begin指定遍历的开始位置(int型从取值0开始)。
  • end指定遍历结束的位置(int型,默认集合中最后一个元素)。
  • step遍历的步长(大于0的整型)。
  • varStatus存放遍历到的成员的状态信息。
<c:out value="根据一个分隔符截取:"/><hr>
<c:forTokens items="123-4567-8910" delims="-" var="tel">
    <c:out value="${tel}"></c:out><br/>
</c:forTokens>
<br/><br/><br/>
<c:out value="根据多个分隔符截取:"/><hr>
<c:forTokens var="str" items="太阳、星星、月亮;地球|火星" delims="、;|">
    <c:out value="${str}"></c:out><br/>
</c:forTokens>
<br/><br/><br/>
<c:out value="输出其它属性信息:"/><br><hr>
<c:forTokens items="1*2*3*4*5*6*7"
             delims="*"
             begin="1"
             end="3"
             var="n"
             varStatus="s">
    数字 <c:out value="${n}"/> 的四种属性:<br>
    所在位置,即索引:<c:out value="${s.index}"/><br>
    总共已迭代的次数:<c:out value="${s.count}"/><br>
    是否为第一个位置:<c:out value="${s.first}"/><br>
    是否为最后一个位置:<c:out value="${s.last}"/><br>
    <hr>
</c:forTokens>
目录
相关文章
|
6月前
|
前端开发 JavaScript Java
jsp简单了解
JSP(Java Server Pages)是一种用于开发动态Web应用程序的Java技术。它允许将Java代码嵌入到HTML页面中,以生成动态内容。在服务器上运行时,JSP会被编译成Java Servlet,并在每个请求时动态生成页面内容。JSP提供了丰富的标签和API,用于访问数据库、处理表单数据、进行条件判断和循环等常见操作。它是Java EE(现在被称为Jakarta EE)的一部分,可以与Java Servlet、JavaBeans、Java标准标签库(JSTL)等一起使用。
41 2
 jsp简单了解
|
Java
jsp3
jsp3
128 2
|
存储 缓存 Java
jsp2
jsp2
44 0
|
Java 应用服务中间件
jsp1
jsp1
38 0
|
前端开发 Java 应用服务中间件
深入理解JSP(一)
深入理解JSP(一)
119 0
|
Java 应用服务中间件 Apache
JSP
JSP
75 0
|
前端开发 搜索推荐 Java
JSP是什么
JSP是什么
304 0
JSP是什么
|
存储 前端开发 Java
JSP(四)
JSP(四)
159 0
JSP(四)
|
XML SQL Java
用最简单的话语教你使用JSP(下)
用最简单的话语教你使用JSP(下)
用最简单的话语教你使用JSP(下)
|
Java 应用服务中间件
用最简单的话语教你使用JSP(上)
JSP 1.什么是JSP 2. JSP原理 3. JSP基础语法 4. JSP指令 5. 九大内置对象 6. JSP标签、JSTL标签、EL表达式 6.1 EL表达式${} 6.2 JSP标签 6.3 JSTL表达式
用最简单的话语教你使用JSP(上)