JSP简介
- JSP全称是Java Server Pages,它和Servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术
- JSP这门技术的最大的特点在于,写JSP就像写html,但:
- 相比html而言,(html只能为用户提供静态数据)JSP技术允许在页面中嵌套java代码,为用户提供动态数据。
- 相比servlet而言,jsp更容易对数据进行排版
- Servlet和jsp都是动态网页技术
- Servlet:代码+网页 servlet更多的是实现java部分功能
- Jsp: 代码+网页 jsp更多的是负责页面展示
Jsp本质上就是servlet,Jsp源文件的后缀名是.jsp
Jsp基础语法
Jsp基础语法:
- 1.脚本元素
- 2.指令元素
- 3.动作元素
1. 脚本元素
Jsp的脚本元素包括: 1.声明脚本 2.普通脚本 3.表达式脚本
声明脚本:声明成员变量和成员方法在声明脚本中进行定义
语法: <%! %>
<%!
int c;
public int sum(int a,int b){
return a+b;
}
%>
等价于Servlet中:
public class servletDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
//成员变量
int c;
public int sum(int a,int b) {
return a+b;
}
...
}
普通脚本 (不可定义方法)
声明局部变量和方法调用
语法: <% %>
<%
int m=100;
int result=sum(8,8);
//out是JSP的内置对象之一
out.print("result:"+result+"<br/>");
%>
等价于Servlet中:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int m=100;
int result=sum(8, 8 );
response.getWriter().print(result+"<br/>");
}
表达式脚本
用来计算和显示表达式的结果
语法:<%=表达式 %>
<%--表达式脚本:用来计算和表达式结果的显示 --%>
c=<%=c%>
result=<%=sum(8,9) %>
2.指令元素
- JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
- Jsp页面所有的指令元素都是以<%@ 开头 %>结束
JSP指令的基本语法格式:
<%@指令 属性名="值" %>
常见的指令元素包括:
- 1.page指令
- 2.include指令
- 3.taglib指令
1.page指令
作用:用来设置当前JSP页面的相关属性和配置信息
语法:<%@page 属性名=“属性值”%>
例:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.List" errorPage="error.jsp"%>
- language:当前jsp文件用何种语言进行解析,赋值java说明当前jsp由java语言来负责解析。
- contentType:设置jsp页面的上下文类型,主要是设置响应文件类型和字符集。
- import:在当前页面引入其他类
- errorPage:设置当前页面出现异常后,处理异常的页面
- isErrorPage:当前页面是否是处理异常或者错误的页面,取值true和false ,true表示当前页面是负责处理异常的页面 false表示当前页面不是处理异常的页面。默认值是false
当isError为true时我们可以使用exception来获取异常消息。当isErrorPage是false时,页面不能使用exception
例:当访问页面出现问题时
问题页面:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" errorPage="error.jsp"%>
......
<%
int m=100;
int num=10/0;
int result=sum(8,8);
//out是JSP的内置对象之一
out.print("result:"+result+"<br/>");
%>
......
异常处理页面:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" isErrorPage="true"%>
......
<body>
<%=exception.getMessage()%>
页面异常!
</body>
......
页面显示:
/ by zero 页面异常!
2.include指令
作用:在当前页面包含另一个页面
语法:<%@include file=“地址” %>
@include包含也叫静态包含,在一个页面将另外一个页面的代码完整的包含进来。静态包含在编译后产生1个class文件
原理: include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入
其实就是相当于把两个JSP中的内容翻译到一个servlet中从生成的jspServlet文件中可以看出其实相当于把所有的信息原封不动的拿了过来。这就有可能导致当定义两个相同名称的变量是会出现错误
3.taglib指令
语法:<%@ taglib uri=" " prefix=" "%>
uri:表示标签库的地址
prefix:表示标签的前缀
-
使用标签库之前要先添加标签库的jar包
- jstl.jar
- standard.jar
-
在页面使用taglib指令引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
......
<fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss"/><br/>
3.动作元素
Jsp动作元素:1.动态包含 2.请求转发
- 动态包含
作用:在当前页面将另一个页面也包含进来(只包含结果)
语法:<jsp:include page="地址"></jsp:include>
动态包含编译后会产生多个class文件
静态包含和动态包含区别?
- 静态包含源代码 编译后产生1个class文件
- 动态包含包含结果 编译后产生多个class文件
```<jsp:include page=“a.jsp”/>``
注意: 前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候
- 请求转发
jsp:forward动作把请求转到另外的页面
语法:<jsp:forward page="相对 URL 地址" />
例:以下实例我们使用了两个文件,分别是: date.jsp 和 main.jsp
date.jsp 文件代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p>
main.jsp文件代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>
<h2>forward 动作实例</h2><jsp:forward page="date.jsp" /></body></html>
现在将以上两个文件放在服务器的根目录下,访问main.jsp文件。显示结果如下:
今天的日期是: 2016-6-25 14:37:25
Jsp页面的几种注释
Jsp页面注释:1.java注释 2.html注释 3.jsp注释
- java注释 :单行注释 、多行注释、文档注释
- Html注释:
- Jsp注释: <%-- --%>
Html和jsp注释区别?
Html注释的内容会被编译、jsp注释的内容不会被编译
JSP执行过程
.jsp—> 翻译—.java---->编译----->class---->执行class文件
-
a)浏览器访问JSP页面,tomcat扫描到JSP文件,在%tomcat%/work把jsp文件翻译成java源文件(翻译)
-
b)Tomcat服务器把java源文件编译成class字节码文件(编译)
-
c)Tomcat服务器构造该jsp对象
-
d)Tomcat服务器调用该jsp类中的方法,返回内容显示到浏览器
注意:
只在第一次访问时需要 a,b ,c,d四步骤
第二次到n次只需要执行 d步骤。当jsp文件修改或零时文件被删除了需要重新走翻译(a)和编译(b)的过程。
JSP的生命周期(重点)
Servlet的生命周期:
1)构造方法(第1次访问)
2)init方法(第1次访问)
3)service方法
4)destroy方法
Jsp的生命周期
1)翻译: jsp->java文件
2)编译: java文件->class文件(servlet程序)
3)构造方法(第1次访问)
4)init方法(第1次访问):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
Jsp的9大内置对象(记住)
request 表示请求对象 作用域对象
response 表示响应对象
pageContext 表示当前页面的上下文,作用域对象之一,通过pageContext可以获取其他内置对象
注意 pageContext对象的类型是PageContext,叫jsp的上下文对象
session 表示会话对象
application 表示WEB应用,作用域对象
out 表示输出流对象
config 表示jsp页面配置对象
exception 表示异常对象
page 表示当前页面,相当于java中的this的关键字
详细:https://blog.csdn.net/qq_26676207/article/details/53484515