一.JSP注释
1、显式注释
在客户端可以看到的注释
1、继承HTML风格的注释 <!-- HTML注释 --> <!-- 这是HTML注释 -->
2、隐式注释
在客户端不可以看到的注释
1、JSP自己的注释 <%-- JSP注释-- % > <%-- 这是JSP注释 --%>
2、继承Java风格的注释 // 单行注释 /*多行注释*/
二.scriptlet
Scriptlet(脚本小程序),所有嵌入在 HTML 代码中的 Java 程序。
在 JSP 中一共有三种 Scriptlet 代码:都必须使用 Scriptlet 标记出来
1、java脚本段
语法:<% // java脚本段 %>
特点:可以定义局部变量,编写java语句;被编译之后会生成在service方法体中
2、声明
语法:<%! // 声明全局变量 %>
特点:可以声明全局变量,方法等;被编译之后生成在servlet类体中
3、输出
语法:<%= %>
特点:可以输出变量、表达式或字面量;被编译之后生成在service方法体中;相当于out.print()输出
三.page指令
格式:<%@page 属性="属性值" 属性="属性值" %>
常用属性:
language:支持的语言,当前只支持java
contentType:响应类型及编码格式
pageEncoding:编码
import:导包,只有import这个属性可以多次设置,其他属性只能设置一次
isErrorPage:当前页面是否是处理报错的页面,默认是false
errorPage:当页面报错时该跳转到什么页面
注:JSP页面的编码以contentType中的charset的值为准,如果未设置charset值,则以pageEncoding的属性值为准;如果都没有,则默认ISO-8859-1
四.include
1.include 静态包含
格式:<%@include file="文件的路径" %>
特点:相当于将包含的页面中的内容直接直接非复制粘贴;最终只会生成一个java文件;不能有同名变量。
优缺点:运行效率高一点点。耦合性较高,不够灵活。
2.include动态包含
无参:
格式:<jsp:include page="包含的页面路径"></jsp:include>
有参
<jsp:include page="包含的页面路径">
<jsp:param value="参数值" name="参数名"/>
</jsp:include>
特点:相当于方法的调用,会生成多个java文件;可以出现同名变量
注:
1、<jsp:include>双标签中不能包含任何内容,包括换行和空格,除非有参数
2、<jsp:param>的value属性值支持表达式,name属性值不支持
The name attribute of the jsp:param standard action does not accept any expressions
五.九大内置对象
request:用于获取请求信息,比如请求参数及客户端信息。
response:用于响应客户端请求。
out:用于输出响应信息。
session:代表浏览器与服务器的一次会话。HTTP协议是无状态协议,响应结束后,会话终断,不会保存会话信息,session
就是为了保存会话信息产生的。
application:代表应用程序,主要用于保存整个应用层面的信息。
page:代表当前页面。
pageContext:页面上下文,通过该对象可以获取其他对象,比如request/session/application等。
config:用于获取服务器的配置信息,初始化Servlet。
exception:用于获取页面的错误信息。
1.JSP四大域对象
pageContext.setAttribute("uname", "zhangsan");
request.setAttribute("uname", "lisi");
session.setAttribute("uname", "wangwu");
application.setAttribute("uname", "zhaoliu");
2.两个输出对象
out.print("Hello");
response.getWriter().write("Hello!");
3. 配置对象
out.print(config.getServletName());
// 当前jsp本身
//page
// 异常信息对象 (只有jsp页面设置属性isErrorPage="true"才能使用)
out.print(exception.getMessage());
六.EL表达式
语法:${域对象的key值}
注意:
1、el表达式一般操作的是域对象中的值,无法操作局部变量
2、el的取值范围有4个:pageContext、request、session、application,分别代表当前页、一次请求、一次会话、整个应用程序
3、el表达式默认从小范围到大范围取值,如果取到值则显示,未取到则继续往大范围找,找到即止;如果最终未找到,则显示空字符串""
4、获取指定域对象范围的值,可以通过pageScope、requestScope、sessionScope、applicationScope
5、el表达式获取JavaBean中的属性时,属性需要提供get方法(javax.el.PropertyNotFoundException: Property 'uname' not readable on type com.shsxt.po.User)
七.jstl
1.jstl的使用
1、导入jstl标签库所需要的jar包 (jstl.jar、standard.jar)
2、在jsp页面引入指定的库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3、使用标签库
<c:标签名 属性名="属性值" ></c:标签名>
2.if 标签
if 标签先对某个条件进行测试,如果该条件运算结果为 true, 则处理它的主体内容.
测试结果保存在一个 Boolean 对象中,并创建一个限域变量来引用 Boolean 对象。
可以利用 var 属性设置限域变量名,利用 scope 属性来指定其作用范围。
if 的语法有两种形式:
没有主体内容
<c:if test="返回boolean类型的条件" var="设置限域变量名的,用来接收返回值的" scope="限域对象的范围"></c:if>
有主体内容
<c:if test="返回boolean类型的条件" var="设置限域变量名的,用来接收返回值的" scope="限域对象的范围">
要执行的代码
</c:if>
常用属性:
test:返回boolean类型的条件,一般操作的都是域对象中的值
var:用来定义接收返回值的变量,但是该变量是存在域对象中的
scope:var设置的变量名所存放的域范围page\request\session\application
注:在jstl中没有else标签,如果出现需要else的情况,可以使用两个if,设置相反的;两个条件来实现
3. choose、when 和 otherwise 标签
1、choose标签中至少包含一个when标签,可以没有otherwise标签 (Illegal "choose" without child "when" tag)
2、choose标签中只能有when标签和otherwise标签(Illegal child tag in "c:choose" tag: "c:if" tag)
3、when标签和otherwise标签可以包含其他标签
4、choose标签和otherwise标签没有属性,when标签必须有test属性
5、otherwise标签必须放在最后一个when标签之后 (Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.)
6、当所有的when标签的条件不成立时,才会执行otherwise标签
4.forEach标签
1、遍历主体内容多次
<c:forEach begin="开始的数" end="结束的数" var="接收当前被循环的成员" step="循环的间隔数"></c:forEach>
2、遍历集合、map等
<c:forEach items="被循环的对象" var="接收当前被循环的成员" varStatus="当前成员的相关信息"></c:forEach>
常用属性:
items:需要被遍历的对象(可以是集合、map等,都是存放在域对象中的数据)
var:限域变量名,用来每次被遍历到的成员
5.formatNumber 标签
formatNumber 标签 该标签用指定的格式或精度来格式化数字.
<fmt:formatNumber>标签有如下属性:
使用该标签时,有两种语法:
无主体内容
<fmt:formatNumber value="要被格式化的数值" type="被格式化的类型"/> <br>
常用属性:
value:要被格式化的数值
type:被格式化的类型
number数值型
percent百分比类型
currency货币类型
var:限域变量名,用来接收格式化好的返回值;如果设置var属性,则值不会再输出,需要使用el表达式输出var设置的值
6.formatDate 标签
使用指定的风格或模式格式化日期和时间,<fmt:formatDate>标签有如下属性:
<fmt:formatDate value="${mydate }"/><br>
<fmt:formatDate value="${mydate }" type="date"/><br>
<fmt:formatDate value="${mydate }" type="time"/><br>
<fmt:formatDate value="${mydate }" type="both"/><br>
<fmt:formatDate value="${mydate }" type="both" dateStyle="long" timeStyle="full"/><br>
<fmt:formatDate value="${mydate }" pattern="yyyy/MM/dd HH:mm:ss"/><br>
<fmt:formatDate value="${mydate }" pattern="HH:mm:ss yyyy/MM/dd" var="date1"/>${date1 }<br>
7.parseDate 标签
此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期或时间的字 符串。两种形式:
<fmt:parseDate value="${date3 }"></fmt:parseDate><br>
<fmt:parseDate value="${date1 }" type="both"></fmt:parseDate><br>
<fmt:parseDate value="${date2 }" pattern="dd-MM-yyyy"></fmt:parseDate><br>
<fmt:parseDate value="${date3 }" pattern="yyyy-MM-dd"></fmt:parseDate><br>
8.parseNumber 标签
利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环 境的数字。即解析一个代表着数字,货币或百分比的字符串。两种语法形式:
<fmt:parseNumber value="¥100.00" type="currency"></fmt:parseNumber> <br>
<fmt:parseNumber value="100%" type="percent"></fmt:parseNumber> <br>