Jsp授课
2.1 JSP基础
2.1.1 JSP简介
JSP全称是Java Server Page,是一种动态网页技术标准。它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。
JSP部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态生成 Html,Xml或其它格式文档的Web网页,然后在响应给客户端。
2.1.2 JSP和HTML以及Servlet的适用场景
| 类别 | 适用场景 |
|---|---|
| css | 美化页面 |
| javaScript | 给网页添加一些动态效果 |
| HTML |
只能开发静态资源,不能包含java代码,无法添加动态数据。 |
| Servlet | 写java代码,可以输出页面内容,但是很不方便,开发效率极低。 |
| JSP | 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。 |
2.1.3 JSP简单入门
创建JavaWeb工程
1.创建一个web项目
2.在web目录下创建一个index.jsp文件
3.在文件中写一句内容为:这是我的第一个jsp
4.部署并启动项目
5.通过浏览器测试

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP的入门</title>
</head>
<body>
这是第一个JSP页面
</body>
</html>
部署项目
沿用会话管理工程的部署方式即可。
测试运行

JSP的执行过程

JSP文件内容介绍
Tomcat中的HttpJspBase类声明

这张图一出场,就表明我们写的JSP它本质就是一个HttpServlet了。

同时,我们在index_jsp.java文件中找到了输出页面的代码,并且在浏览器端查看源文件,看到的内容是一样的。这也就是说明,我们的浏览器上的内容,在通过jsp展示时,本质都是用out.write()输出出来的。
讲到这里,我们应该清楚的认识到,JSP它是一个特殊的Servlet,主要是用于展示动态数据。它展示的方式是用流把数据输出出来,而我们在使用JSP时,涉及HTML的部分,都与HTML的用法一致,这部分称为jsp中的模板元素,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。
2.2 JSP应用
2.2.1 JSP语法
4)JSP注释
在使用JSP时,它有自己的注释,形式为:<%--注释--%>
需要注意的是:
在Jsp中可以使用html的注释,但是只能注释html元素,不能注释java程序片段和表达式。同时,被html注释部分会参与翻译,并且会在浏览器上显示
jsp的注释不仅可以注释java程序片段,也可以注释html元素,并且被jsp注释的部分不会参与翻译成.java文件,也不会在浏览器上显示。
示例:
<%--JSP注释--%> <!--HTML注释-->
1)Java代码块
在jsp中,可以使用java脚本代码。形式为:<% 此处写java代码 %>
但是,在实际开发中,极少使用此种形式编写java代码。同时需要注意的是:
<% 在里面写java程序脚本需要注意:这里面的内容由tomcat负责翻译,翻译之后是service方法的成员变量 %>
<!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/>
2)JSP表达式
在jsp中,可以使用特定表达式语法,形式为:<%=表达式%>
jsp在翻译完后是out.print(表达式内容);
所以:<%out.print("当前时间);%>和<%="当前时间"%>是一样的。
在实际开发中,这种表达式语法用的也很少使用。
示例:
<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>
3)JSP声明
在JSP中也可以声明一些变量,方法,静态方法,形式为:<%! 声明的内容 %>
使用JSP声明需要注意:
<%! 需要注意的是: 写在里面的内容将会被tomcat翻译成全局的属性或者类方法。
如果加! 代表的是声明的是成员变量
如果不加! 代表的是局部变量
%>
示例:
<!--JSP声明--> <%! String str = "声明语法格式";%> <%=str%>
5)语法的示例
JSP语法完整示例代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP语法</title>
</head>
<body>
<!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/>
<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>
<hr/>
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%>
<hr/>
<%--JSP注释--%>
<!--HTML注释-->
</body>
</html>

JSP指令
page指令
<%@ page 属性名=属性值 属性名=属性值...%>
| 属性名 | 作用 |
| contentType | 响应正文支持的类型和设置编码格式 |
| language | 使用的语言,默认是java |
| errorPage | 当前页面出现异常后跳转的页面 |
| isErrorPage | 是否抓住异常,如果为true则页面中就可以使用异常对象,默认是false |
| import | 导包import="java.util.ArrayList" |
| session | 是否创建HttpSession对象,默认是true |
| buffer | 设定JspWriter输出jsp内容缓存的大小,默认是8kb |
| pageEncoding | 翻译jsp时所用的编码格式 |
| isElgnored | 是否忽略EL表达式,默认是false |
include指令
include指令:可以包含其他页面
<%@include file="" %>该指令是包含外部页面。
属性:file,以/开头,就代表当前应用。
<%--
1.page指令
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp"%>
<%@ page import="java.util.ArrayList" %>
<%--
2.include指令
--%>
<%@ include file="/include.jsp"%>
<html>
<head>
<title>jsp指令</title>
</head>
<body>
<%--<%int result=1/0;%>--%>
<%ArrayList list=new ArrayList();%>
<%=s%>
</body>
</html>

taglib指令:可以引入外部标签库
语法格式:<%taglib uri="" prefix=""%>
作用:该指令用于引入外部标签库。html标签和jsp标签不用引入。
属性:
uri:外部标签的URI地址。
prefix:使用标签时的前缀。
2.2.3 JSP细节
1)九大隐式对象
什么是隐式对象呢?它指的是在jsp中,可以不声明就直接使用的对象。它只存在于jsp中,因为java类中的变量必须要先声明再使用。其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的。所以我们在jsp中可以直接使用。
九大隐式对象
| 类型 | 备注 | |
|---|---|---|
| request | javax.servlet.http.HttpServletRequest | |
| response | javax.servlet.http.HttpServletResponse | |
| session | javax.servlet.http.HttpSession | Page指令可以控制开关 |
| application | javax.servlet.ServletContext | |
| page | Java.lang.Object | 当前jsp对应的servlet引用实例 |
| config | javax.servlet.ServletConfig | |
| exception | java.lang.Throwable | page指令有开关 |
| out | javax.servlet.jsp.JspWriter | 字符输出流,相当于printwriter |
| pageContext | javax.servlet.jsp.PageContext |
简介
它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。
生命周期
它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。
常用方法

在上图中,同学们发现没有页面域操作的方法,其实是定义在了PageContext的父类JspContext中,如下图所示:

| 范围 | 级别 | 备注 | |
|---|---|---|---|
| PageContext | 页面范围 | 最小,只能在当前页面用 | 因范围太小,开发中用的很少 |
| ServletRequest | 请求范围 | 一次请求或当期请求转发用 | 当请求转发之后,再次转发时请求域丢失 |
| HttpSession | 会话范围 | 多次请求数据共享时使用 | 多次请求共享数据,但不同的客户端不能共享 |
| ServletContext | 应用范围 | 最大,整个应用都可以使用 |
2.2.4 JSP最佳实战-MVC模型
M:model ,通常用于封装数据,封装的是数据模型。
V:view ,通常用于展示数据。动态展示用jsp页面,静态数据展示用html。
C:controller ,通常用于处理请求和响应。一般指的是Servlet。
Servlet:擅长处理业务逻辑,不擅长输出显示界面。在web开发中多用于控制程序逻辑(流程)。所以我们称之为:控制器。
JSP:擅长显示界面,不擅长处理程序逻辑。在web开发中多用于展示动态界面。所以我们称之为:视图。
例如:


浙公网安备 33010602011771号