JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
- 简化的 Servlet
- JSP = HTML + JAVA + JSP tag
JSP vs Servlet
-
侧重点
- JSP 侧重试图
- Servlet 侧重逻辑控制
-
内置对象
- JSP 有内置对象供选择
- Servlet 没有
本质
JSP 是对 Servlet 的简化。
使用 JSP 只需要开发完成需要输出到客户端的内容;JSP 中的 Java 脚本如何内嵌到类中是由 JSP 容器完成的;
Servlet 是一个完整的 Java 类。
JSP 处理流程
Tomcat 既是一个 Servlet 容器,也是一个 JSP 容器。
- 客户端发送 JSP 请求到 JSP 容器 ->
- 请求对应的 JSP 文件 ->
- JSP容器载入对应的 JSP 文件,并转为对应的 Servlet 文件 ->
- JSP 容器将 Servlet 文件编译为可执行的类(.class) ->
- 将原始请求传递给 Servlet 容器 ->
- web 服务器组件调用 Servlet 容器,载入 Servlet 实例 ->
- Servlet 容器产出 html 页面输出到 HttpResponse 中交给 web 服务器 ->
- web 服务器以静态页面的形式将 response 返回给客户端

JSP 基本语法
JSP 语法主要包含JSP元素和模板数据两类。
模板数据
JSP 引擎不处理的地方,如 html 页面。
主要为:静态内容
JSP 元素
主要为: 指令、注释、表达式、声明、脚本
JSP 声明
参数变量声明
- 一个声明语句可声明一个或多个变量、方法,供后面的 Java 代码使用
书写格式:
<%! declaration;[declaration;]+ ... %>
实例:
<%! int a, b, c; %>
JSP 表达式
包含了脚本语言的表达式,先转换为 String,然后被插入在表达式出现的地方;所以可以在文本行中使用表达式,不用管是否是 html 标签
- 表达式元素中可以包含任何符合 Java 语言规范的表达式,但是不能使用分号来结束表达式
书写格式:
<%= 表达式 %>
实例:
<p> Today's date: <%= ( new java.util.Date()).toLocaleString()%></p>
嵌入到 html 标签的表达式
JSP 脚本
- 可以是任意量的 Java 语句、变量、方法或表达式
书写格式:
<% 代码片段 %>
实例:
<%= out.println("your ip address is" + request.getRemoteAddr());%>
JSP 注释
- 主要为代码作注释以及将某段代码注释
书写格式:
<%-- 注释内容 --%>
JSP 指令
设置 JSP 页面相关属性,不会有可见的相关输出
- page 指令
- 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
- import、 errorPage 指令
- include 指令
- 向当前页面插入一个静态的文件内容
- taglib 指令
- 引入自定义标签库,并可指定前缀
JSP 内置对象
JSP 对每个页面提供的 Java 对象;开发者可以直接使用,而不用先进行显式声明。
亦称为预定义变量;
对象 | 描述 |
---|---|
request | HttpServletRequest 类的实例 |
response | HttpServletResponse 类的实例 |
out | printWriter 类的实例,用于把结果输出至网页 |
session | HttpSession 类的实例 |
application | ServletContext 类的实例,与应用上下文有关 |
Config | ServletConfig 类的实例 |
page | 类似于 Java 类中的 this 关键字 |
pageContext | PageContext 类的实例,提供对 JSP 页面所有对象以及命名空间的访问 |
Exception | Exception 类的对象,代表发生错误的 JSP 页面中对用的异常对象 |
创建一个 JSP 项目
1.创建 maven web 项目
- 手动创建五个文件夹

2.选中 web app 右键创建 JSP 文件。
<%--
Created by IntelliJ IDEA.
User: fuyiweng
Date: 2019-03-21
Time: 10:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- JSP page 配置指令 --%>
<html>
<head>
<title>hello JSP</title>
</head>
<body>
<%! String name; %>
<!-- 变量声明 -->
request uri is <%=request.getRequestURI() %>
<!-- 内置对象的使用 -->
</br>
<%
name = "abc";
out.println("name is " + name);
%>
<!-- JSP 脚本 -->
</body>
</html>
在使用内置对象的时候,发现没有引用内置对象的方法;
原因是没有引用 Tomcat 目录下的servlet-api.jar
,jsp-api.jar
和 tomcat-api.jar
依赖。
引入依赖包
- File->
- Project Structure->
- Libraries ->
- 点加号,选择 java ->
- 将Tomcat安装路径下lib文件夹下的servlet-api, jsp-api, tomcat-api 包导入
JSP 编译后的 Java 文件位置
一般来说,编译后的 java 文件位置是在 Tomcat 目录下的
/apache-tomcat-8.5.37/work/Catalina/localhost
但我找不到我的编译文件。
网友评论