一、JSP简介
1、JSP=HTML+Java
2、JSP的原理(重点):记住JSP中的内容与Servlet的对应关系
JSP就是Servlet,容器会把JSP翻译成Servlet,并编译Servlet源码,执行Servlet。
3、JSP&Servlet
Servlet:作为控制器来用(尽量不要输出内容到界面上)
JSP:显示结果数据(尽量不要写Java脚本)
一、JSP的基本语法(必须理解;实际开发中不用)
1、JSP模版元素:指JSP中的HTML的内容,主要目的:输出排版
2、JSP脚本表达式:
作用:把数据输出到页面上
语法:<%=表达式%>
3、JSP脚本片段:
作用:在JSP中输出Java逻辑代码
语法:<%
语句1;
语句2;
%>
对应Servlet:原封不动的出现在_jspService()方法中
小练习:
4、JSP声明
作用:定义一些类成员(实例变量、静态变量、实例方法、静态方法、静态代码块)
语法:<%!
你的定义
%>
5、JSP注释
作用:注释
语法:<%--这是注释--%>
特点:服务器根本不会把注释掉的内容翻译到对应的Servlet代码中
注意:与HTML注释的区别
二、JSP的指令(一般)
1、指令的作用是什么?
是为JSP引擎(服务器)而设计的,指示服务器该如何处理JSP页面中的内容的。
2、有哪些指令?
page、taglib、include
语法:<%@指令名称 指令属性1=”值1” 指令属性2=”值2” 。。。%>
3、每个指令的具体细节有哪些?
3.1page指令:
作用:定义JSP页面的各种属性
属性:
l import:导入JSP页面中java脚本需要用到的类或包。
<%@page import=”java.util.Date,java.util.UUID”%>
或者
<%@page import=”java.util.Date”%>
<%@page import=”java.util.UUID”%>
注意:服务器会自动导入
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
l session:指示是否产生HttpSession对象。默认值是true。
l buffer:JSP中的HTML的输出都是用的JspWriter的字符输出流。该属性指定输出流的缓存大小。默认8Kb
l errorPage:指定当JSP出现异常时转向(请求转发)的页面地址。该地址如果以”/”开头,“/”代表着当前应用;如果不是以”/”开头,表示的是相对路径。
另外一种方式:配置全局错误提示页面。
修改web.xml
l isErrorPage:指示是否产生exception内置对象。默认值是false
l contentType:和响应消息头Content-Type作用一样。HttpServletResponse.setContentType(); text/html;charset=UTF-8
l pageEncoding:指示服务器在翻译JSP时采用的编码
特点:还有contentType的作用
l isELIgnored:是否忽略EL表达式。默认是false(不忽略)
小技巧:更改JSP采用的默认编码
taglib指令:
作用:引入外部的标签库(JSTL)
属性:
uri:外部标签的名称空间
prefix:前缀
<%@ tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
include指令:
作用:包含。静态包含
属性:
file:被包含的页面的地址。”/”表示当前应用。不以”/”开头,表示相对路径
能用静的不用动的
静态包含:
动态包含: <jsp:includepage="/08.jsp"></jsp:include>
三、JSP的动作元素(了解)
1、动作元素就是JSP内置的标签
2、jsp:include:实现动态包含
page:指定被包含的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
3、jsp:forward:实现请求转发
page:指定转发的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
4、jsp:param:包含或转发时传递请求参数
四、JSP的九大隐式对象(很重要)
1、JSP对应的Servlet的service方法中的局部变量
2、JSP的九大隐式对象(注意与EL隐式对象的区别)
引用名称 | 代表的类型 | 备注 |
request | javax.servlet.http.HttpServletRequest |
|
response | javax.servlet.http.HttpServletResponse |
|
session | javax.servlet.http.HttpSession | 如果page指令的session=”false”则没有该对象 |
application | javax.servlet.ServletContext |
|
config | javax.servlet.ServletConfig |
|
page | 当前的Servlet对象 |
|
exception | java.lang.Throwable | 如果page指令的isErrorPage=”false”则没有该对象 |
out | javax.servlet.jsp.JspWriter | 和PrintWriter作用一样 |
pageContext | javax.servlet.jsp.PageContext |
|
3、out内置对象简介(了解)
作用和PrintWriterpw = HttpServletResponse.getWriter()作用一样,都是向客户端输出请求正文数据。
注意:这个流有缓存
4、pageContext隐式对象详解(特别重要)
三大作用:
a、本身是一个域对象(页面范围),还能操作其他三个(ServletRequest HttpSession ServletContext)域对象中的数据
voidsetAttribute(String key,Object value)
voidremoveAttribute(String key)
ObjectgetAttribute(String key)
pageContext页面域(作用域)范围。pageContext.setAttribute("p", "ppp");//只能本页中能取出来
voidsetAttribute(String key,Object value,int scope)
voidremoveAttribute(String key,int scope)
Object getAttribute(Stringkey,int scope)
int Scope:是常量。
PageContext.PAGE_SCOPE.表示页面范围
PageContext.REQUEST_SCOPE.表示请求范围
PageContext.SESSION_SCOPE.表示会话范围
PageContext.APPLICATION_SCOPE.表示应用范围
注意:
<%
pageContext.setAttribute(“p”,”ap”,PageContext.APPLICATION_SCOPE);
//application.setAttribute(“p”,”ap”);和以上代码等价
%>
ObjectfindAttribute(String key):依次从页面、请求、会话、应用范围查找指定名称的数据。找到为止。
b、获取其他八个JSP隐式对象
ServletRequest request =pageContext.getRequest()
....
c、提供了包含和转发的简易方法
pageContext.forward("/1.jsp");
pageContext.include(“/1.jsp”);
五、四大域对象(很重要)
1、四大域对象
PageContext:存放的数据只能当前页面中才能取出来
ServletRequest:存放的数据只能在一次请求中才能取出来
HttpSession:存放的数据只能在一次会话中才能取出来
ServletContext:存放的数据在当前应用中才能取出来(线程安全)
2、作用:在不同的资源之间传递数据
六、EL表达式(特别重要)
1、EL的主要作用:向界面输出数据。替换JSP中的java表达式(<%=%>)
2、基本的语法形式:
${EL表达式}
3、EL能从哪里获得数据呢?
四大域对象中
4、EL具体功能详解
a、获取数据:
a.1运算符:
l 点运算符。就是调用对象的getter方法
l 中括号运算符。[]就是调用对象的getter方法
${p.name}=${p['name']}=${p["name"]}
a.2获取普通Java类的属性的值、List中的元素、Map中的value
b、进行数学或逻辑运算
empty运算符:判断一个对象是否为null,字符串是否为””,还能判断一个集合中是否有元素。
c、11个隐式对象(难点,注意与JSP隐式对象的区别)
EL隐式对象 | 类型 | 对应的JSP隐式对象 | 备注 |
pageContext | javax.servlet.jsp.PageContext | pageContext | 一样 |
pageScope | java.util.Map | 没有 | 表示页面范围数据 |
requestScope | java.util.Map | 没有 | 表示请求范围数据 |
sessionScope | java.util.Map | 没有 | 表示会话范围数据 |
applicationScope | java.util.Map | 没有 | 表示应用范围数据 |
param | java.util.Map | 没有 | 单个请求参数。key是名称,value是值 |
paramValues | java.util.Map | 没有 | 重名请求参数。key是名称,value是String[] |
header | java.util.Map | 没有 | 单个请求消息头。key是头名,value是头值 |
headerValues | java.util.Map | 没有 | 重名请求消息头。key是头名,value是String[] |
initParam | java.util.Map | 没有 | web.xml中配置的全局参数 |
cookie | java.util.Map | 没有 | 代表是一个Map。key是cookie对象的name,value是cookie对象 |
d、EL函数