JSP:动态页面技术
1.jsp脚本和注释:jsp可以在html中嵌入java代码 通过将脚本语法去嵌入java代码
jsp脚本:
1)<%java代码%>----java代码会被翻译到servlelt中service方法内部
2)<%=java变量或表达式>----被翻译成out.print(变量或表达式)
3)<%!java代码%>----翻译到servlet的成员位置
jsp注释:
1)Html注释:<!--注释内容--> jsp源码可见,翻译后servlet可见,html源码可见
2)java注释://单行注释 /*多行注释*/ jsp源码可见,翻译后servlet可见
3)jsp注释:<%--注释内容--%> 只在jsp源码可见
2.jsp运行原理:
jsp本质是servlet
jsp何时被翻译:当访问的jsp与tomcat中work下的servlet内部不一致 就翻译
jsp在第一次被访问时会被Web容器(Tomcat)翻译成servlet,再执行
过程:
客户端访问jsp---->*.jsp对应的servlet----->找work下对用servlet
没找到对应的servlet------>翻译成servlet
找到对用的servlet
内容没变:直接使用翻译后servlet
内容改变:重新翻译servlet
其实所有的访问都是servlet负责响应的
3.jsp指令
jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:
1)page指令
属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
常用属性如下:
pageEncoding
contentType
import
errorPage
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
2)include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
格式:<%@ include file="被包含的文件地址"%>
3)taglib指令
在jsp页面中引入标签库
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
4.jsp内置/隐式对象(9个
jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp脚本中可以直接使用这9个对象
名称 类型 描述
out javax.servlet.jsp.JspWriter 用于页面输出
request javax.servlet.http.HttpServletRequest 得到用户请求信息,
response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
session javax.servlet.http.HttpSession 用来保存用户的信息
application javax.servlet.ServletContext 所有用户的共享信息
page java.lang.Object 指当前页面转换后的Servlet类的实例
pageContext javax.servlet.jsp.PageContext JSP的页面容器
exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用
EL:作用是获得四大域中的数据,格式${EL表达式}
1.EL 表达式概述
EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写。
2.EL从域中取出数据
EL最主要的作用是获得四大域中的数据,格式${EL表达式}
EL获得pageContext域中的值:$(pageContextScope.key);
EL获得request域中的值:$(request.key);
EL获得session域中的值:$(session.key);
EL获得application域中的值:$(application.key);
EL从四个域中获得某个值$(key);
---同样是依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("str", 123);
ArrayList<String> list = new ArrayList();
list.add("111");
list.add("222");
request.setAttribute("list", list);
HashMap<String,Object> map = new HashMap();
map.put("key", "value");
request.setAttribute("map", map);
%>
${str}
${list[0]}
${map.key}
</body>
</html>
JSTL:完成逻辑判断,及流程控制
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
ArrayList<String> list = new ArrayList();
list.add("111");
list.add("222");
request.setAttribute("list", list);
%>
<c:if test="${1<2 }">
1111
</c:if>
<c:forEach begin="0" end="5" var="i">
${i }
</c:forEach>
<c:forEach items="${list }" var="str">
${str }
</c:forEach>
</body>
</html>