JSP概念
JSP:Java Server Page-----java服务器页面,运行在服务器端的页面,由Web容器解析成静态的HTML发送给浏览器,再由浏览器解析。我们在浏览器上看到的HTML页面,其实是JSP在服务器上运行的结果。
JSP相对HTML、Servlet的优点
技术 | 特点 |
---|---|
HTML | 优:用于网页显示,方便编写JavaScript代码和CSS样式 缺:不能编写动态内容 |
Servlet | 缺:写的是Java代码,不方便编写JavaScript和CSS样式。 优:能编写动态的内容,访问数据库 |
JSP | JSP=HTML+Servlet,继承了2种技术的优点。既可以编写动态的内容,又方便页面的美化。 |
JSP与Servlet的关系
JSP就是一个Servlet
JSP由服务器翻译成Servlet,然后编译成class文件。
用户第一次访问这个JSP的时候,生成Servlet,只会生成1次。
JSP的三种注释
JSP中的三种注释 | 说明 |
---|---|
HTML | <!-- 注释 --> 只能注释静态内容 |
Java | 三种注释都可以 //单行 /* 多行 / /* 文档注释 */ 只用于Java代码的注释 |
JSP | <%-- 注释 --%> |
- HTML的注释:在网页的源代码可见
- Java注释:在翻译以后的Servlet中可见
- JSP注释:在网页和Servlet中都不可见
JSP的3种脚本元素
组成部分 | 功能 | 语法 |
---|---|---|
JSP代码片段 | 编写一般的Java代码 | <% %> |
JSP脚本表达式 | 输出变量或表达式的值 | <%= %> |
JSP声明 | 声明全局变量或方法 | <%! %> |
JSP的内置作用域对象
pageContext、request、session、application、
EL表达式的作用
- 输出作用域中的值
- 用于各种运算符计算
EL表达式与EL表达式的区别
EL:Expression Language 表达式语言
区别 | JSP表达式 | EL表达式 |
---|---|---|
语法 | <%= 脚本变量%> | ${作用域中键} |
输出哪里的值 | 输出Java脚本变量的值 | 作用域中值,前提是作用域中要先放入键和值 |
与页面域有关的方法及写法
void setAttribute(String key,Object value) //向页面域中添加键和值
Object setAttribute(String key) //向页面域中取出指定的值
void removeAttribute(String key); // 删除所有域中同名的值
void removeAttribute(String key,int scope); // 删除指定域的值
Object findAttribute(String key); //从小到大的范围去查找作用域同名的值,找到就不找了,找不到则返回null
EL的写法:
作用域 | EL的写法 |
---|---|
页面域 | ${pageScope.键} |
请求域 | ${requestScope.键} |
会话域 | ${sessionScope.键} |
上下文域 | ${applicationScope.键} |
自动查找 | ${键} |
与页面域有关的方法之案例:
<body>
<%
// 向四个作用域中添加键值对
pageContext.setAttribute("name","页面域");
request.setAttribute("name","请求域");
session.setAttribute("name","会话域");
application.setAttribute("name","上下文域");
%>
得到页面域的值:<%=pageContext.getAttribute("name")%><br/>
得到请求域的值:<%=request.getAttribute("name")%><br/>
得到会话域的值:<%=session.getAttribute("name")%><br/>
得到上下文域的值:<%=application.getAttribute("name")%><br/>
<%
//pageContext.removeAttribute("name");// 删除所有域中同名的值
pageContext.removeAttribute("name",PageContext.PAGE_SCOPE);// 删除指定域的值
%>
<h2>删除后</h2>
得到页面域的值:<%=pageContext.getAttribute("name")%><br/>
得到请求域的值:<%=request.getAttribute("name")%><br/>
得到会话域的值:<%=session.getAttribute("name")%><br/>
得到上下文域的值:<%=application.getAttribute("name")%><br/>
从小到大的范围去查找作用域同名的值,找到就不找了:<%=pageContext.findAttribute("name")%><br/>
<h2>使用el表达式取出作用域的值</h2>
页面域:${pageScope.name}<br/>
请求域:${requestScope.name}<br/>
会话域:${sessionScope.name}<br/>
上下文域:${applicationScope.name}<br/>
自动查找:${name}<br/>
</body>
结果:
使用EL中从域中取出不同数据类型的写法
数据类型 | 写法 |
---|---|
JavaBean中属性 | ${对象.属性} |
List | ${list[索引]} |
数组 | ${数组[索引]} |
Map集合 | ${map.键} 或 ${map[“键”]} |
EL运算符
算术运算符:+、-、*、/、%
比较运算符:==、!=、<、>、<=、>=
逻辑运算符:&&、||、!
三元运算符:${条件表达式?真值:假值}
以上皆与java一样;
判空运算符:
语法:${empty 键} |
---|
1. 判断键是否为NULL,如果为空则返回true |
2. 如果键是一个空字符串,也返回true |
3. 如果键是一个集合,集合中没有元素,返回true |
JSTL概念
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。我们可以在JSP页面上编写各种标签来完成一些复杂的功能,它出现的目的是为了减少JSP页面上的Java代码量,让JSP页面更好维护。它的底层本质上运行的还是Java代码。
JSTL定制标签库
- core:核心标签库,用于页面上代码的流程控制。如:if, for
- format:国际化和格式化的标签,可以对日期和货币等数字进行格式化。也可以对同一个页面进行国际化的操作。
- xml:在JSP上直接解析XML文件
- sql:在JSP上直接访问数据库,不符合三层架构。表示层->业务层->数据访问层
- function: 在JSP中使用各种函数,字符串函数
使用核心标签
taglib指令:用来在JSP页面上使用标签库
- 核心标签库:core,作用:用于代码的流程控制
- 使用标签的语法: <c:标签名>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSTL | prefix前缀 | URI 标识 | 作用 |
---|---|---|---|
核心标签库 | c | 这个标签唯一标识,固定写法 | 用于页面上代码的流程控制 |
JSTL的标签:if标签
jsp的if标签没有else
<c:if test="${param.age >=18 }">
你已经成年,可以访问本网站<br/>
<a href="https://blog.csdn.net/RookiexiaoMu_a">点开有惊喜</a>
</c:if>
JSTL的标签:choose标签
<form action="demo08.jsp" method="get">
请输入分数:
<input type="text" name="score" value="${param.score}">
<input type="submit" value="评级">
</form>
<c:choose>
<%--test是一个判断条件,使用EL--%>
<c:when test="${param.score >=80 && param.score<=100}">
优秀
</c:when>
<c:when test="${param.score >=60 && param.score<80}">
及格
</c:when>
<c:when test="${param.score >=0 && param.score<60}">
不及格
</c:when>
<c:otherwise>
<script>
alert("分数有误");
</script>
</c:otherwise>
</c:choose>
</body>
JSTL的标签:forEach标签
因为EL没有遍历的功能,使用forEach标签对作用域中集合或数组进行遍历的操作
varStatus属性:varStatus属性是一个对象,它也有属性: