Servlet 生命周期
加载类
1、创建实例 : 构造方法
2、初始化 : init( ServletConfig )
3、提供服务 : service( ServletRequest , ServletResposne )
4、销毁 : destory()
卸载类
JSP 本质就是 Servlet
JSP生命周期
1、将 .jsp 文件 “翻译” 成 .java ( 由 JSP 源码 转换成 相应的 Servlet 源码 ( Tomcat ) )
index.jsp ----> index_jsp.java
2、将 .java 文件编译成 .class 文件 ( 编译 转换好的 Servlet ( Tomcat ) )
index_jsp.java ----> index_jsp.class
3、加载 Servlet 类 ( jsp 对应的 Servlet 类 )
4、创建实例: 容器 调用构造方法
5、初始化: init --> _jspInit()
6、提供服务: service --> _jspService
7、销毁: destory —> _jspDestory()
8、卸载 Servlet 类
JSP内置对象:
-
request : HttpServletRequest 、response : HttpServletResponse
-
pageContext : PageContext
-
session : HttpSession
-
application : ServletContext
-
config : ServletConfig
-
out : JspWriter ( JspWriter 类 直接继承 java.io.Writer 类 )
-
page : Object [ final java.lang.Object page = this ; ]
-
exception : Throwable
Eclipse :
mytomcat —> C:/mytomcat/work/Catalina/localhost/jsp
org/apache/jsp/index_jsp.java
JSP 文件的构成:
1、HTML
2、CSS
3、JavaScript
4、JSP指令 ( directive ) : 由JSP程序员向JSP容器下达的命令
<%@ 指令名称 属性名称="属性值" 属性名称="属性值" .......... %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
一个指令可以多次使用:
<%@ page language="java" %>
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
JSP中有三个指令: page 、taglib 、include
5、JSP声明 ( declaration ) : 用于在 JSP 对应的 Servlet 类中声明 字段(属性) 和 方法
<%! 声明字段 或 方法 ; %>
声明字段:
<%! public String name = "张丽霞" ; %>
声明方法:
<%! public void show(){
System.out.println( this.name ) ;
}
%>
6、JSP表达式 ( expression ) : 用于 统计 某个 表达式 的计算结果 ,并将这个结果 输出 或 赋值
<%= 表达式 %>
比如:
<%= 250 *2+ 100 %>
<%= request.getContextPath() %>
7、JSP注释 : 仅仅存在于 JSP 文件中的注释 ( 由 .jsp 翻译后的 .java 中都没有这部分内容 )
<%-- 注释内容 --%>
8、JSP脚本 ( scriptlet ) : 用来在JSP文件上嵌入Java代码
<% Java 代码片段 %>
这个代码是 _jspService 方法内部的一部分代码
思考题
既然 JSP 本质是个 Servlet , 那么这个 Servlet 什么时候注册给 Tomcat 的 ?
既然 JSP 本质是个 Servlet , 那么这个 Servlet 对应的 url-pattern 是什么 ?
如果新创建一个 JSP 文件 或 修改某个JSP文件,是否需要 重新 “翻译” 、编译、加载 ?