Jsp生命周期、Jsp的使用、JSP隐式对象、EL表达式、JSTL
jsp
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束
JSP 网页几乎可以被当成一个普通的 Servlet
JSP 生命周期
编译阶段:servlet容器编译servlet源文件,生成servlet类,并编译该类
初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:调用与JSP对应的servlet实例的服务方法
销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
语法格式:<% 代码片段 %> <%= 表达式 %>
<% 代码片段 %>,或编写与其等价的XML语句:<jsp:scriptlet>代码片段</jsp:scriptlet>
任何文本、HTML标签、JSP元素必须写在脚本程序的外面。
中文编码问题
如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
JSP声明
<%! declaration; [ declaration; ]+ ... %>
例如:
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
或者编写与其等价的XML语句:
<jsp:declaration>
代码片段
</jsp:declaration>
JSP表达式
<%= 表达式 %>
表达式先被转化成String,然后插入到表达式出现的地方
表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式
JSP注释
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
// 单行注释
/*
* 多行注释
*/
<!-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容
JSP指令
<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求、导入包等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签
JSP隐式对象
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象
JSP 字面量
JSP语言定义了以下几个字面量:
布尔值(boolean):true 和 false;
整型(int): 与 Java 中的一样;
浮点型(float): 与 Java 中的一样;
字符串(string):以单引号或双引号开始和结束;
Null: null。
EL表达式
EL表达式可以从pageContext,request,session,application四个作用域中取到值
如果4个作用域都有name属性,EL会按照从高到低的优先级顺序获取:
pageContext>request>session>application
输出name的值:${name},值后后面一定注意不要有空格,例如:“${name} ”不等于“${name}”
一般获取Bean层Hero类的hero对象name属性,需要hero.getName
用EL表达式写法:$(hero.name)
获取url传递过来的参数:http://127.0.0.1/jstl.jsp?name=abc
用EL表达式写法:${param.name}
条件判断
eq相等 ne、neq不相等,
gt大于, lt小于
gt大于, lt小于
gte、ge大于等于
lte、le 小于等于
not非 mod求模
is [not] div by是否能被某数整除
is [not] even是否为偶数
is [not] odd是否为奇
例子:
${killNumber ge 10? "超神":"还没超神" }杀人数是否大于等于10
JSTL
JSP Standard Tag Library 标准标签库
需要两个jar包,分别是jstl.jar 和standard.jar
作用域可以是pageContext, request, session, application
在jsp页面中使用JSTL需要在通过指令进行设置
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
输出值
<c:out value="${name}" /> 相当于 <%=request.getAttribute("name")%>
forEach循环:
方式一:
<c:forEach var="i" begin="1" end="10" step="1">
<c:out value="${i}" />
</c:forEach>
step每次自增数值,相对于java的for(int i=1;i<=10;i++){}
方式二:
<c:forEach items="${heros}" var="hero" varStatus="st" >
<tr>
<td><c:out value="${st.count}" /></td>
<td><c:out value="${hero}" /></td>
</tr>
</c:forEach>