JSP笔记
JSP
1、JSP简介
Java Server Page
1)、JSP本质是一个Servlet
2)、JSP能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
3)、JSP必须运行在服务器中
2、运行原理
1)、我们发现index.jsp页面被翻译成了一个index_jsp.java --->index_jsp.class
2)、我们发现HttpJspBase继承HttpServlet,所以index_jsp就是一个Servlet
3)、每次请求都调用_jspService()
index.jsp ---> index_jsp.java ---> index_jsp.class
index.jsp(a,h1,...)
----> JspServlet(*.jsp)
----> index_jsp.class
----> _jspservice();
----> jsp这个servlet,out.write()
服务器/work/.....
3、JSP基本语法
1)、模板元素
HTML元素都叫模板元素 --- > out.write("<h1>标题</h1>")
2)、jsp表达式
在页面输出表达式中的内容
<%=new Date() %> ---> out.print(new Date());
3)、JSP脚本片段
在页面编写java代码
<%
//java代码
%>
这些java代码都被放在jspservice()这个方法中
所以方法中可以写什么,这里就可以写什么
public void test(){}; //xxx
private String name; //xxx
脚本片段可以有多个,但是合起来必须完整
4)、JSP声明
jsp声明的内容都在jspservice方法之外
<%! %>,可以声明变量 private String name;
可以写方法 public void test(){}
....
一般不采用
5)、JSP注释
HTML注释: <!-- --> 浏览器解析的时候就忽略了
JSP注释: <%-- --%> 在翻译成java文件时被忽略
java注释: // /**/ jvm运行.class文件的时候忽略
6)、JSP指令
<%@指令名 属性=值 %>
page: 定义页面如何被服务器翻译解析
age指令属性
1)import:用来在页面导包
2)pageEncoding:指定页面使用的字符集,也是告诉jsp引擎使用指定的编码翻译
3)contentType:设置响应头,页面如何响应给浏览器
4)errorPage:指定页面发生错误去向的页面
5)isErrorPage:表示当前页面是一个错误页面。
6)session:默认session="true",当前页面是否参与会话,是否可以使用session对象
7)isELIgnored:是否忽略el表达式,默认false代表不忽略, 设置为true-忽略
8)info:定义页面的信息(描述)
include: 静态包含
<%@include file="文件路径"%> 可以包含WEB-INF下的页面
静态包含,要包含的文件是不用翻译和编译的
被包含的页面内容基本固定的情况下使用静态包含
taglib: 引入标签库
7)、JSP标签
<jsp:forward></jsp:forward> 进行页面转发
<jsp:forward page="要转发去的页面">
<jsp:param value="root" name="username"/>
</jsp:forward>
<jsp:include page="要包含的页面"></jsp:include>
动态包含,要包含的文件是需要翻译和编译的
被包含的页面内容经常更新的情况下使用动态包含
4、JSP隐含对象
隐含对象:是我们在页面直接可以使用的对象
PageContext pageContext = null; 代表当前页面
HttpSession session = null; 代表会话对象
Throwable exception = null; 代表捕获到的异常对象
ServletContext application; 代表整个web应用
ServletConfig config = null; 代表servlet配置信息
JspWriter out = null; 代表可以在页面输出数据的out对象
Object page = this; 代表当前的jsp
HttpServletRequest request 代表封装档次请求详细信息的对象
HttpServletResponse response 代表当次响应的对象
五大常规对象:
Throwable exception = null; 代表捕获异常对象
ServletConfig config = null; 代表servlet配置信息
servlet--》 jsp页面对应的servlet
config jsp页面对应的servlet的配置信息
config.getServletName();
JspWriter out = null; 代表可以在页面输出数据的out对象
out.write();
Object page = this; 代表当前jsp
还没this实用
HttpServletResponse response 代表当次响应的对象
response
四大域对象:域对象用来在其他资源共享数据
PageContext pageContext = null; 代表当前页面对象
1、获取其它隐含对象 pageContext.getXX();
2、作为域对象共享数据。只能在当前页面共享数据,离开页面就无法共享
String key ,Object value
通过调用域对象.setAttribute(key,value),给相应的域中设置内容
域对象.getAttribute(key) 获取域中的内容
HttpServletRequest request, 代表封装当次请求详细信息的对象
1、在同一个请求对象中共享数据,只要是同一次请求,就可以共享数据
HttpSession session = null; 代表会话对象
1、同一次会话共享数据 浏览器打开-开始会话 浏览器关闭-结束会话
会话就是和web应用沟通,所以不同web应用就是不同会话
ServletContext application = null; 代表整个web应用
1、application代表当前web应用。
只要在同一个web应用中都可以共享数据。
web应用只要不卸载都可以访问
域对象 作用范围 起始时间 结束时间
pageContext 当前JSP页面 页面加载 离开页面
request 同一个请求 收到请求 响应
session 同一个会话 开始会话 结束会话
application 当前Web应用 Web应用加载 Web应用卸载
隐含对象:在JSP页面直接可以使用的9个对象
4个域对象:
域对象:在其他资源之间共享数据
域对象.setAttribute(key,value);在域中设置要共享的数据
域对象.getAttribute(key);取出与域中的数据
域对象.removeAttribute(key);移除域中的数据
PageContext pageContext
1)、作为page域对象:离开页面后域中的内容就失效了
2)、获取其他的隐含对象
HttpServletRequest request
1)、作为request域对象:同一个请求可以共享
2)、request其他用法
HttpSession session
1)、作为session域对象: 同一次会话可以共享数据:浏览器打开--》浏览器关闭
不同浏览器也是不同的会话。
ServletContext application
1)、作为application域对象: 同一个Web应用,只要web应用不卸载。
在世界各地都能获取到。
5个其他对象:
HttpServletResponse response:响应
ServletConfig config :servlet配置信息
config.getName();//jsp
Throwable exception
页面捕获到的异常
JspWriter out
向页面输出数据
Object page
Object page = this; 基本没用
JSP运行原理图解