文章目录
JSP简介
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导建立的一种动态网页技术标准。 JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
Servlet和JSP都是动态网页技术,Servle更多的是实现java部分功能,而JSP更多的是负责页面展示。JSP本质上就是Servlet,但是JSP源文件的后缀名是.jsp。
JSP基础语法
基础语法分为三个部分:
- 脚本元素
- 指令元素
- 动作元素
脚本元素
JSP的脚本元素包括:
- 声明脚本
- 普通脚本
- 表达式脚本
声明脚本
声明成员变量和成员方法。语法格式:
<%! %>
比如:
<%!
int a = 1;
int b = 2;
public static int sum(int num1,int num2){
return num1+num2;
}
%>
相当于我们在java类中的:
public class TestServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
// 定义成员变量
private int a = 1;
private int b = 2;
// 声明sum方法
public static int sum(int num1,int num2){
return num1+num2;
}
}
普通脚本
普通脚本有两个作用:
- 声明局部变量
- 调用方法
语法格式:
<% %>
注意:普通脚本中不能定义方法。
比如:
<%
// 声明局部变量
int c = 1;
int d = 1;
// 调用方法
int result = sum(c,d);
// out是jsp的内置对象之一,调用方法打印结果到浏览器
out.println("result="+result);
%>
相当于Servlet中的:
protected void doGet(HttpServletRequest request,HttpServeltResponse response){
int c = 1;
int d = 1;
int result = sum(c,d);
response.getWriter().println("result="+result);
}
表达式脚本
用来计算和显示结果。语法格式:
<%= %>
比如
result= <%=b%> <br/>
1+1= <%=1+1%> <br/>
1+2= <%=sum(1,2)%> <br/>
name: <%=request.getAttribute("name")%>
指令元素
JSP所有的指令元素都是<%@ %> 的格式。
常见的指令元素包括:
- page指令
- include指令
- taglib指令
page指令
语法:
<%@ page 属性名=属性值 %>
作用:用来设置当前JSP页面相关属性和配置信息:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
常见的属性名:
Language:当前jsp文件用何种语言进行解析,赋值java说明当前jsp用java语言解析。
contenType:设置jsp页面的上下文类型,主要是设置响应文件类型和字符集。
Import:同java中import同理
errorPage:设置当前页面出现异常后指定的负责处理异常的页面。
isErrorpage:当前页面是否是处理异常或者错误的页面,可以赋两个值,true或者false
如果你是处理异常的页面,jsp会提供一个内置对象:exception调用方法exception.getMessage()可以拿到异常信息。如果你不是处理异常的页面,那么拿不到这个对象。
include指令
语法:
<%@ include file = "地址" %>
作用:在当前页面包含另外一个页面
注意,include也叫做静态包含,即在该页面把指定页面的代码完整的拷贝进来。静态包含在编译后只产生一个class文件
taglib指令
语法:
<%@ taglib uri = "标签库地址" prefix="标签的前缀"%>
使用标签库之前要先添加标签库的jar包。
比如:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
格式化日期:
<fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss"/>
动作元素
JSP动作元素:
- 动态包含
- 请求转发
动态包含
<jsp:include page="被包含页面" flush="true"></jsp:include>
动态包含编译后会产生多个class文件。
静态包含与动态包含的区别
JSP中有两种包含:
静态包含:<%@ include file="被包含页面"%>
动态包含:<jsp:include page="被包含页面" flush="true">
JSP在WEB服务器中都要转换成一个java文件,java文件再编译成一个class文件。当请求JSP页面的时候,实际上运行的是这个class文件。
从这个方面来说:
静态包含发生在:JSP---->java文件阶段。
动态包含发生在:执行class文件阶段。动态加入。
静态包含:只生成一个java文件
动态包含:生成多个class文件。
无论是动态包含还是静态包含,其request对象都是相同的。也就是同一个request对象。
请求转发
<jsp:forword page="转发页面"></jsp:forword>
类似于我们在Servelt中的转发:
request.getRequestDispatcher("转发页面").forword(request,response);
JSP页面的注释
可分为三种:
- java注释:单行注释
//
、多行注释/* */
、文档注释/** */
- HTML注释:
<!-- -->
- JSP注释:
<%-- --%>
- 区别:Html注释的内容会被编译,jsp注释的内容不会被编译。
JSP生命周期
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。 以下是JSP生命周期中所走过的几个阶段:
- 编译阶段:servlet容器编译servlet源文件,生成servlet类。
- 初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法。
- 执行阶段:调用与JSP对应的servlet实例的服务方法。
- 销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例 。
1)JSP编译
浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件,步骤如下:
- 解析JSP文件。
- 将JSP文件转为servlet。
- 编译servlet。
2)JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了。
一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。
3)JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。 当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,
jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。
4)JSP清理
SP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等。
JSP九大内置对象
request——请求对象
response——响应对象
pageContext——表示当前页面的上下文。作用域对象之一(存的键值对只在当前页面有效)。通过pageContext可以获取其他内置对象。
session——会话对象
application——web应用。作用域对象
out——输出流对象
config——表示jsp页面配置对象
exception——异常。isisErrorpage是true才会有这个对象
page——代表当前页面