一、JSP
jsp是可以在传统 HTML页面插入java代码
1.JSP原理
(1)当用户访问一个JSP页面时,回想一个Servlet容器(Tomcat)发出请求;
(2)如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;
(3)JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:formprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;
(4)容器执行字节码文件(包括调用的servlet:formprocessor.java字节吗),并将其结果返回到客户端;(返回的最终方式是有servlet输出html格式的文件流)
2.JSP组成
(1)静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同.
(2)动态部分:Java程序控制的内容,这些内容由Java程序来动态生成。
二、JSP的基本语法
1.JSP脚本表达式:
语法<%=表达式%>
例如:<%=new Date().toLocaleString()%>
作用:在网页上输出数据
2.JSP脚本片段:
语法<% 代码1;代码2 ....%>
对应Servlet 出现在JspServlet()中
作用:在JSP中输出java代码
3.JSP声明
作用:定义一些类成员(变量 )
语法 <%! 定义的变量 、方法 %>
4、JSP注释
语法<%--内容--%>
与html注释不同他不会把注释的内容翻译到Servlet中
三、JSP的指令
指令是为了致使服务器如何处理JSP页面的内容
1.指令
page taglib include
语法<%@指令名称 指令属性="值" ....%>
2.指令作用
1.page指令 定义JSP页面的属性
属性 import:导入JSP页面中java脚本
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.*;
session:指示是否产生HttpSession对象。默认值是true。
buffer:JSP中的HTML的输出都是用的JspWriter的字符输出流。该属性指定输出流的缓存大小。默认8Kb
errorPage:指定当JSP出现异常时转向(请求转发)的页面地址。该地址如果以”/”开头,“/”代表着当前应用;如果不是以”/”开头,表示的是相对路径。
另外一种方式:配置全局错误提示页面。
修改web.xml
isErrorPage:指示是否产生exception内置对象。默认值是false
contentType:和响应消息头Content-Type作用一样。HttpServletResponse.setContentType(); text/html;charset=UTF-8
pageEncoding:指示服务器在翻译JSP时采用的编码
特点:还有contentType的作用
isELIgnored:是否忽略EL表达式。默认是false(不忽略)
2.taglib指令:
作用:引入外部的标签库(JSTL)
属性:
uri:外部标签的名称空间
prefix:前缀
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3.include指令:
作用:包含。静态包含
属性:
file:被包含的页面的地址。”/”表示当前应用。不以”/”开头,表示相对路径
四、JSP的动作元素
动作元素就是JSP内置标签
jsp:include:实现动态包含
page:指定被包含的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
jsp:forward:实现请求转发
page:指定转发的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
jsp:param:包含或转发时传递请求参数
五、JSP的九大隐式对象
1.JSP对应Servlet的service的局部变量
2.JSP的就九大隐式对象
(1) HttpSession类的session对象 如果Page指令的session属性是false就没有这个对象
作用:主要用于来分别保存每个用户信息,与请求关联的会话;
会话状态维持是Web应用开发者必须面对的问题。
(2) HttpServletRequest类的request对象
作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。
(3) HttpServletResponse类的respone对象
作用:代表响应对象,主要用于向客户端发送数据
(4) JspWriter类的out对象
作用:主要用于向客户端输出数据;
Out的基类是JspWriter
(5) ServletContex类的application对象
作用:主要用于保存用户信息,代码片段的运行环境;
它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.
(6) PageContext类的pageContext对象
作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。
(7) ServletConfig类的config对象
作用:代码片段配置对象,表示Servlet的配置。
(8) Object类的page(相当于this)对象
作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。
(9)Exception 如果page指令的isErrorpage属性是false就没有这对象
作用:处理JSP文件执行时发生的错误和异常
3.pageContext隐式对象作用
是一个页面范围的域对象,能操作其他三个域对象的数据(ServletRequest ServletSession ServletContext)
方法
void setAttribute(String key,Object value)
void removeAttribute(String key)
Object getAttribute(String key)
pageContext页面域(作用域)范围。pageContext.setAttribute("p", "ppp");//只能本页中能取出来
void setAttribute(String key,Object value,int scope)
void removeAttribute(String key,int scope)
Object getAttribute(String key,int scope)
int Scope:是一个常量
PageContext.PAGE_SCOPE表示页面范围
PageContext.REQUEST_SCOPE表示请求范围
PageContext.SESSION_SCOPE表示回话范围
PageContext.APPLICATION SCOPE表示应用范围
注意:
<%
pageContext.setAttribute(“g”,”gg”,PageContext.APPLICATION_SCOPE);
//application.setAttribute(“g”,”gg”); 功能和上面一样
%>
Object findAttribute(String key):依次从页面、请求、会话、应用范围查找指定名称的数据。找到为止。
PageContext可以获取其他八个JSP隐式对象
ServletRequest request = pageContext.getRequest()
提供了包含和转发的简单方式
pageContext.forward("/demo.jsp");
pageContext.include("/demo.jsp");
六:四大域对象
PageContext:存放的数据只能在当页中取出
ServletRequest:存放的数据在一次会话请求中取出
ServletSession:存放的数据只能在一次回话中取出
ServletContext:存放的数据在当前应用中取出
七:EL表达式
1.EL主要作用:向界面输出数据 替换JSP中的表达式<%= %>
基本语法形式
${11}
和<%=11%>效果一样
要先把数据存放到四大域 然后再获取
El表达式能从四大域对象中获取数据
1.获取数据
中括号运算符。[]就是调用对象的getter方法
${p.name}
${p['name']}
${p["name"]}
三个效果一样
数学或逻辑运算
empty运算符 判断一个对象是否为null 字符串是否为"" 集合是否有元素
11个隐式对象
JSP隐式对象类中只有一个EL隐式对象,这就是pageContext隐式对象。这与同名的JSP隐式对象实际上就是同一个对象。余下的EL隐式对象都是Java映射(map),他们只是提供了更容易的途径来访问pageContext隐式对象的某些性质。
共有4个作用域隐式对象,分别为pageScope, requestScope, sessionScope和applicationScope. 这些隐式对象都是映射,利用他们可以很容易的访问作用域属性。例如:附加到request作用域的username属性可以通过EL表达式${ requestScope.username}来直接访问。
有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即param和paramValues. param 是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。
有3个首部访问隐式对象,可以用于访问HTTP首部,分别是header, headerValues和cookie。如果想以原始的方式访问HTTP首部或cookie, 这些映射就很有用。
另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在web.xml中设置。
EL11个隐式对象
jsp是可以在传统 HTML页面插入java代码
1.JSP原理
(1)当用户访问一个JSP页面时,回想一个Servlet容器(Tomcat)发出请求;
(2)如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;
(3)JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:formprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;
(4)容器执行字节码文件(包括调用的servlet:formprocessor.java字节吗),并将其结果返回到客户端;(返回的最终方式是有servlet输出html格式的文件流)
2.JSP组成
(1)静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同.
(2)动态部分:Java程序控制的内容,这些内容由Java程序来动态生成。
二、JSP的基本语法
1.JSP脚本表达式:
语法<%=表达式%>
例如:<%=new Date().toLocaleString()%>
作用:在网页上输出数据
2.JSP脚本片段:
语法<% 代码1;代码2 ....%>
对应Servlet 出现在JspServlet()中
作用:在JSP中输出java代码
3.JSP声明
作用:定义一些类成员(变量 )
语法 <%! 定义的变量 、方法 %>
4、JSP注释
语法<%--内容--%>
与html注释不同他不会把注释的内容翻译到Servlet中
三、JSP的指令
指令是为了致使服务器如何处理JSP页面的内容
1.指令
page taglib include
语法<%@指令名称 指令属性="值" ....%>
2.指令作用
1.page指令 定义JSP页面的属性
属性 import:导入JSP页面中java脚本
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.*;
session:指示是否产生HttpSession对象。默认值是true。
buffer:JSP中的HTML的输出都是用的JspWriter的字符输出流。该属性指定输出流的缓存大小。默认8Kb
errorPage:指定当JSP出现异常时转向(请求转发)的页面地址。该地址如果以”/”开头,“/”代表着当前应用;如果不是以”/”开头,表示的是相对路径。
另外一种方式:配置全局错误提示页面。
修改web.xml
isErrorPage:指示是否产生exception内置对象。默认值是false
contentType:和响应消息头Content-Type作用一样。HttpServletResponse.setContentType(); text/html;charset=UTF-8
pageEncoding:指示服务器在翻译JSP时采用的编码
特点:还有contentType的作用
isELIgnored:是否忽略EL表达式。默认是false(不忽略)
2.taglib指令:
作用:引入外部的标签库(JSTL)
属性:
uri:外部标签的名称空间
prefix:前缀
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3.include指令:
作用:包含。静态包含
属性:
file:被包含的页面的地址。”/”表示当前应用。不以”/”开头,表示相对路径
四、JSP的动作元素
动作元素就是JSP内置标签
jsp:include:实现动态包含
page:指定被包含的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
jsp:forward:实现请求转发
page:指定转发的目标资源的URL地址。如果以”/”,代表着当前应用。否则表示的是相对路径
jsp:param:包含或转发时传递请求参数
五、JSP的九大隐式对象
1.JSP对应Servlet的service的局部变量
2.JSP的就九大隐式对象
(1) HttpSession类的session对象 如果Page指令的session属性是false就没有这个对象
作用:主要用于来分别保存每个用户信息,与请求关联的会话;
会话状态维持是Web应用开发者必须面对的问题。
(2) HttpServletRequest类的request对象
作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。
(3) HttpServletResponse类的respone对象
作用:代表响应对象,主要用于向客户端发送数据
(4) JspWriter类的out对象
作用:主要用于向客户端输出数据;
Out的基类是JspWriter
(5) ServletContex类的application对象
作用:主要用于保存用户信息,代码片段的运行环境;
它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.
(6) PageContext类的pageContext对象
作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。
(7) ServletConfig类的config对象
作用:代码片段配置对象,表示Servlet的配置。
(8) Object类的page(相当于this)对象
作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。
(9)Exception 如果page指令的isErrorpage属性是false就没有这对象
作用:处理JSP文件执行时发生的错误和异常
3.pageContext隐式对象作用
是一个页面范围的域对象,能操作其他三个域对象的数据(ServletRequest ServletSession ServletContext)
方法
void setAttribute(String key,Object value)
void removeAttribute(String key)
Object getAttribute(String key)
pageContext页面域(作用域)范围。pageContext.setAttribute("p", "ppp");//只能本页中能取出来
void setAttribute(String key,Object value,int scope)
void removeAttribute(String key,int scope)
Object getAttribute(String key,int scope)
int Scope:是一个常量
PageContext.PAGE_SCOPE表示页面范围
PageContext.REQUEST_SCOPE表示请求范围
PageContext.SESSION_SCOPE表示回话范围
PageContext.APPLICATION SCOPE表示应用范围
注意:
<%
pageContext.setAttribute(“g”,”gg”,PageContext.APPLICATION_SCOPE);
//application.setAttribute(“g”,”gg”); 功能和上面一样
%>
Object findAttribute(String key):依次从页面、请求、会话、应用范围查找指定名称的数据。找到为止。
PageContext可以获取其他八个JSP隐式对象
ServletRequest request = pageContext.getRequest()
提供了包含和转发的简单方式
pageContext.forward("/demo.jsp");
pageContext.include("/demo.jsp");
六:四大域对象
PageContext:存放的数据只能在当页中取出
ServletRequest:存放的数据在一次会话请求中取出
ServletSession:存放的数据只能在一次回话中取出
ServletContext:存放的数据在当前应用中取出
七:EL表达式
1.EL主要作用:向界面输出数据 替换JSP中的表达式<%= %>
基本语法形式
${11}
和<%=11%>效果一样
要先把数据存放到四大域 然后再获取
El表达式能从四大域对象中获取数据
1.获取数据
运算符
点运算符。就是调用对象的getter方法 例如 一个方式是getName 只需要p.name "."就是get中括号运算符。[]就是调用对象的getter方法
${p.name}
${p['name']}
${p["name"]}
三个效果一样
数学或逻辑运算
empty运算符 判断一个对象是否为null 字符串是否为"" 集合是否有元素
11个隐式对象
JSP隐式对象类中只有一个EL隐式对象,这就是pageContext隐式对象。这与同名的JSP隐式对象实际上就是同一个对象。余下的EL隐式对象都是Java映射(map),他们只是提供了更容易的途径来访问pageContext隐式对象的某些性质。
共有4个作用域隐式对象,分别为pageScope, requestScope, sessionScope和applicationScope. 这些隐式对象都是映射,利用他们可以很容易的访问作用域属性。例如:附加到request作用域的username属性可以通过EL表达式${ requestScope.username}来直接访问。
有两个参数访问隐式对象,可以用来访问HTTP请求参数(表单提交参数),即param和paramValues. param 是一个用于访问单值参数的映射, paramValues则可用于访问可能包含多个值的参数。接下来的实验会展示这将如何处理。
有3个首部访问隐式对象,可以用于访问HTTP首部,分别是header, headerValues和cookie。如果想以原始的方式访问HTTP首部或cookie, 这些映射就很有用。
另外还有一个初始化参数访问隐式对象:initParm。这个映射可以用于访问初始化参数的值,初始化参数的值一般都在web.xml中设置。
EL11个隐式对象
类别
|
标识符
|
表示 |
JSP
|
pageContext
|
PageContext 实例对应于当前页面的处理
|
作用域
|
pageScope
|
表示请求范围数据
|
requestScope
|
表示请求范围数据
| |
sessionScope
|
表示会话范围数据
| |
applicationScope
|
表示应用范围数据
| |
请求参数
|
param
|
单个请求参数
|
paramValues
|
重名请求参数
| |
请求头
|
header
|
单个请求消息头
|
headerValues
|
重名请求消息头
| |
Cookie
|
cookie
|
代表是一个Map。key是cookie对象的name,value是cookie对象 |
初始化参数
|
initParam
|
按名称存储 Web 应用程序上下文初始化参数的 Map 类
|