01-JSP原理和指令

1. JSP概念

JSP,java server page,本质就是一个 servlet,可以使用 jsp 代替 servlet 来处理请求,显示数据。
即 jsp 可以理解为在 html 页面中写 java 代码,或 一个可以获取 java 数据的 html 文件。

JSP 为什么本质是一个 Servlet?
testjsp.jsp 继承自 testjsp.java/testjsp.class 继承自 HttpJspPage 继承自 JspPage 继承自 Servlet。
Tomcat 镜像中将 jsp 文件转义为了 java 文件和编译后的 class 字节码文件:
C:\Users\Administrator.IntelliJIdea2019.3\system\tomcat\ Tomcat_8_5_53_demo61 \work\Catalina\localhost\ demo \org\apache\jsp\ demo.java

查看生成java文件的文件头注释:

1
2
3
4
5
6
7
8
9
10
11
/*
* Generated by the Jasper component of Apache Tomcat
* 由Apache Tomcat的Jasper组件生成
* Version: Apache Tomcat/8.5.53
* 版本:Apache Tomcat/8.5.53
* Generated at: 2020-04-26 07:19:38 UTC
* 生成时间: 2020-04-26 07:19:38 UTC
* Note: The last modified time of this file was set to the last modified time of the source file
* after generation to assist with modification tracking.
* 注意:此文件的最后修改时间设置为生成后源文件的最后修改时间,以帮助跟踪修改。
*/

2. JSP原理

img

① 当在浏览器上输入 http://localhost:8080/demo/index.jsp
② 服务器 tomcat 得到请示,会通过 JspServlet 将后缀名是 .jsp 的请求处理
③ 会将 index.jsp 翻译成 index_jsp.java 文件
④ 再将 index_jsp.java 文件编译成 index_jsp.class 文件
⑤ jvm 将 .class 加载运行
⑥ 服务器生成响应,响应信息中就包含了 jsp 页面上的 html 代码

3. JSP脚本和注释

脚本:可以在页面上写java代码

分类:
声明脚本<%! Java代码 %>
在jsp对应的java类中生成一个成员变量
片段脚本<% Java代码 %>
在jsp对应的java类的_jspService方法中,生成一个局部变量
输出脚本<%= Java代码 %>
向浏览器输出内容,相当于 response.getWriter().write(Java代码)
在 jsp 对应的 java 类的 out.prinln() 中

注释:jsp 文件中可以有 jsp + html + java 代码,即 可以使用上述三种语言的注释标签。

jsp注释<%-- 注释 --%>
jsp注释不会生成到 jsp 对应的 java 文件中
html注释<!-- 注释 -->
java注释/* 注释1 */// 注释2
html、java 注释均会生成到 jsp 对应的 java 文件中

4. JSP三大指令

JSP指令,用于指示 jsp 执行某些操作或特性行为/效果。

语法:

1
<%@ 指令名称 属性1="值1" 属性2="值2" %>
  • page 指令
    设置jsp页面的基本属性。
    • contentType=”…” 相当于 response.setContentType(“…”) 设置编解码方式
    • language=”java” jsp脚本上可以使用的语言,一般不用,默认java
    • import=”java.util.List” 页面上导入java包,多个包使用逗号分隔(IDEA可以导入包,默认导入jsp页面顶部-为单独的page指令导包)
    • isELgnored=”false” 是否忽略el表达式,默认false是不忽略
    • errorPage=”error.jsp” 用于指定错误页面,当前页面发生错误后,会跳转到指定的错误页面
    • isErrorPage=”true” 为 true 时可以在当前页面直接使用 jsp 内置对象 exception,即 <%= exception.toString() %> 或 ${exception} 页面输出错误信息
    • extends=”org.apache.jasper.runtime.HttpJspBase” 默认继承自HttpJspBase类,不动
1
<%@ page contentType="text/html;charset=UTF‐8" language="java" import="java.util.List" isELIgnored="false" session="false"%>
  • taglib 指令

在当前jsp页面导入 jstl 标签库(JSP标准标签库是由JCP所制定的标准规范)。

依赖库:jstl.jar & standard.jar

1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

  • include 指令

嵌套其他jsp文件的jsp代码(其他jsp代码可以只是所需部分)。

第一种 include指令:通过file属性来指定被包含的页面,当JSP转换成Servlet时引入指定文件,一般不需要写头

编译阶段执行。

1
2
3
4
<%@ pagecontentType="text/html;charset=GB2312" language="java"errorPage=""%>
<%@ include file="head.jsp"%>
<%@ include file="body.jsp"%>
<%@ include file="tail.jsp"%>

第二种 jsp:include 动作元素:通过page属性来指定被包含的页面,当JSP页面被请求时引入指定文件,需要写头
可以用 jsp:param 来向所包含页传递参数。

请求处理阶段执行。

1
2
3
4
5
6
7
<%@ page contentType="text/html; charset=GB2312"language="java" errorPage=""%>
<jsp:include page="head.jsp"/>
<jsp:param name="uid"value="username"/>
<jsp:param name="pwd"value="password"/>
</jsp:include>
<jsp:include page="body.jsp"/>
<jsp:include page="tail.jsp"/>

01-JSP原理和指令
https://janycode.github.io/2017/05/29/04_网页技术/05_JSP/01-JSP原理和指令/
作者
Jerry(姜源)
发布于
2017年5月29日
许可协议