JSP
java server page
实质:是servlet
jsp------>转成java文件-------->编译成class文件--------->类加载器加载-------->_jspInit()------->_jspService()-------->_jspDestroy()
jsp文件就是在html中嵌入java代码
jsp和servlet区别:servlet用java代码编写,适合做控制器;jsp有html代码,适合做动态页面
- 基本语法
1.1 表达式
<%=“hello” %> 等价于输出语句 <% out.write(“hello”); %>
1.2 语句块
<% 写符合java语法的代码 %>
1.3 声明
<%! int x; %> 声明为类的成员
1.4 注释
<%-- <%=10 %> --%> jsp注释,页面不显示,被注释的代码不会被解析执行
<! – <%=10 %> – > html注释,页面不显示,被注释的代码会被解析执行
<% //int i = 10; %> java注释 - 指令
静态指令:<%@ page <%@ include <%@ taglib
动态指令:<jsp:include <jsp:forward <jsp:param
2.1 <%@ page
定义页面的整体结构
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8” import=“cn.tedu.bean.User”%>
2.2 <%@ include
包含
<%@ include file=“a.jsp” %> 在转成java文件时,把a.jsp的内容包含进来,生成一个文件,a.jsp不生成java文件
2.3 <%@ taglib
2.4 <jsp:include
相当于request.getRequestDispatcher(“a.jsp”).include(request, response);
< jsp:include page=“a.jsp”>< /jsp:include> 在发送请求时,把a.jsp的内容包含进来,生成两个文件
< jsp:include page=“a.jsp”>
< jsp:param value=“admin” name=“name”/>
< /jsp:include>
通过< jsp:param 给a.jsp传值
2.5 <jsp:forward
相当于request.getRequestDispatcher(“a.jsp”).forward(request, response);
< jsp:forward page=“a.jsp”>
< jsp:param value=“admin” name=“name”/>
< /jsp:forward>
通过< jsp:param 给a.jsp传值
2.6 <jsp:param
用来传值 - 九大内置对象
都定义在_jspService()中,只能在该方法中使用
3.1 PageContext pageContext
存储数据,数据默认在当前页面有效
3.2 HttpServletRequest request
3.3 HttpSession session
3.4 ServletContext application
3.5 HttpServletResponse response
3.6 JspWriter out
3.7 Throwable exception
3.8 Object page
3.9 ServletConfig config
配置jsp初始化参数
<servlet>
<servlet-name>demo</servlet-name>
<jsp-file>/jsp7.jsp</jsp-file>
<init-param>
<param-name>name</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/jsp7.html</url-pattern>
</servlet-mapping>
- EL表达式
简化页面输出
4.1 语法:$ {表达式}
字符串 ------ $ { “hello” }
对象 ------- $ { stu.name } ------- $ { 键名.属性名.属性名… }
数组 ------- $ { attr[0] }
list集合 --------$ { list[0].name } ------- $ { 键名[角标] }
map集合 ---------$ { map.email } -------- $ { 键名.map集合存储的键名 }
4.2 作用域查找顺序
pageContext —> request —> session —> application
注意:每次查找都是从小到大查找,找到了则获取,不再继续找了;找不到什么都不做,也不报错。
4.3 逻辑运算
${逻辑表达式}
${算数表达式}
${关系表达式}
注意:+是算术运算,不是字符链接,EL表达式进行字符链接会报错。
4.4 EL表达式的空值判断
${empty s}
4.5 EL的11个内置变量
4.5.1 和范围相关的4个变量
pageScope、requestScope、sessionScope、applicationScope
指定查找:
$ {pageScope.键名} — $ {requestScope.键名} — $ {sessionScope.键名} — $ {applicationScope.键名}
4.5.2 和表单相关
param、paramValues
$ { param.name } 相当于 out.write(request.getParameter(“name”));
$ { paramValues.like[0] } 相当于 out.write(request.getParameterValues(“like”)[0]);
4.5.3 和header相关
header、headerValues
${ header }返回所有请求头数据,相当于 out.write(request.getHeader());
${ header[“accept-language”] }返回指定键名的请求头数据,相当于 out.write(request.getHeader(“accept-language”));
${ headerValues[“accept-language”] }返回指定键名(同键不同值)的值的数组,相当于 out.write(request.getHeaders(“accept-language”));
4.5.4 和Cookie相关
cookie
${cookie }返回所有存储了Cookie对象的Map集合
${cookie.JSESSIONID }返回指定的Cookie对象
${cookie.JSESSIONID.name }返回指定的Cookie对象存储数据的键名
${cookie.JSESSIONID.value }返回指定的Cookie对象存储数据的值
4.5.5 其它
initParam
$ { initParam.fileName } 相当于 out.write(application.getInitParameter(“fileName”));
pageContext
${ pageContext.session.id }