jsp

什么是jsp?

JSP(全称 Java Server Pages)是由 Sun 公司专门为了解决动态生成 HTML 文档的技术。

补充: Servlet 程序输出 html 页面

为什么要学习jsp技术?

如何创建一个jsp动态页面

1)选中 WebContent 目录,右键创建一个 jsp文件
...略

注意事项:
1、jsp 页面是一个类似于 html 的一个页面。 jsp 直接存放到 WebContent 目录下,和 html 一样
访问 jsp 的时候,也和访问 html 一样
2、jsp 的默认编码集是 iso-8859-1 修改 jsp

jsp的本质是什么

jsp 的本质 ,其实是一个 Servlet 程序。
具体细节就不详细展示了(随后再补充)

jsp的三种语法(重点)

a)jsp头部的page指令

i.language 属性

值只能是 java。 表示翻译的得到的是 java 语言的

ii. contentType 属性

设置响应头 contentType 的内容

iii. pageEncoding 属性

 设置当前 jsp 页面的编码

iv. import 属性

给当前 jsp 页面导入需要使用的类

v. autoFlush 属性

设置是否自动刷新 out 的缓冲区,默认为 true

vi. buffer 属性

设置 out 的缓冲区大小。默认为 8KB

vii. errorPage 属性

设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息

viii. isErrorPage 属性

 设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异常对象

ix. session 属性

设置当前 jsp 页面是否获取 session 对象,默认为 true

x. extends 属性

给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类

b) jsp 中的三种脚本

i. 声明脚本

声明脚本格式如下:
<%!
java 代码
%>
在声明脚本块中,我们可以干 4 件事情
1.我们可以定义全局变量。
2.定义 static 静态代码块
3.定义方法
4.定义内部类	
几乎可以写在类的内部写的代码,都可以通过声明脚本来实现

ii. 表达式脚本(重点)

表达式脚本格式如下:
	<%=表达式 %>
	表达式脚本 用于向页面输出内容。
	表达式脚本 翻译到 Servlet 程序的 service 方法中 以 out.print() 打印输出
	out 是 jsp 的一个内置对象,用于生成 html 的源代码
	注意:表达式不要以分号结尾,否则会报错
	表达式脚本可以输出任意类型。
比如:
1.输出整型
2.输出浮点型
3.输出字符串
4.输出对象

iii. 代码脚本(重点)

代码脚本如下:
<% java 代码 %>
代码脚本里可以书写任意的 java 语句。
代码脚本的内容都会被翻译到 service 方法中。
所以 service 方法中可以写的 java 代码,都可以书写到代码脚本中
1. 代码脚本----if 语句
2. 代码脚本----for 循环语句
3. 翻译后 java 文件中_jspService 方法内的代码都可以写

c) jsp 中的三种注释

i. html 注释

ii. java 注释

iii. jsp 注

// 单行 java 注释
/* 多行 java 代码注释
*/
单行注释和多行注释能在翻译后的 java 源代码中看见。
<%-- jsp 注释 --%>
jsp 注释在翻译的时候会直接被忽略掉
<!-- html 注释 -->
html 的注释会被翻译到 java 代码中输出到 html 页面中查看

7. jsp 九大内置对象

request 对象                  	  	请求对象,可以获取请求信息
response 对象 					  响应对象。可以设置响应信息
pageContext 对象				 当前页面上下文对象。可以在当前上下文保存属性信息
session 对象 						会话对象。可以获取会话信息。
exception 对象 					异常对象只有在 jsp 页面的 page 指令中设置 isErrorPage="true" 的时候才会存在
application 对象 					ServletContext 对象实例,可以获取整个工程的一些信息。
config 对象 							ServletConfig 对象实例,可以获取 Servlet 的配置信息
out 对象 								输出流。
page 对象 							表示当前 Servlet 对象实例(无用,用它不如使用 this 对象)。

九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对
象。

8. jsp 四大域对象

四大域对象经常用来保存数据信息。
	pageContext 可以保存数据在同一个 jsp 页面中使用
	request 可以保存数据在同一个 request 对象中使用。经常用于在转发的时候传递数据
	session 可以保存在一个会话中使用
	application(ServletContext) 就是 ServletContext 对象

测试 pageContext 作用域步骤:
直接访问 context1.jsp 文件

在这里插入图片描述

测试 request 作用域步骤:
1.在 context1.jsp 文件中添加转发到 context2.jsp(有数据)
2.直接访问 context2.jsp 文件 (没有数据)

在这里插入图片描述

在context1.jsp当中加入下列测试代码

// 测试 request 作用域
 request.getRequestDispatcher("/context2.jsp").forward(request, response);

测试 session 作用域步骤:
1.访问完 context1.jsp 文件
2.关闭浏览器。但是要保持服务器一直开着
3.打开浏览器,直接访问 context2.jsp 文件

在这里插入图片描述
在这里插入图片描述

测试 application 作用域步骤:
1.访问完 context1.jsp 文件,然后关闭浏览器
2.停止服务器。再启动服务器。
3.打开浏览器访问 context2.jsp 文件

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	这是 context1 页面<br/>
<%
//设置 page 域的数据
pageContext.setAttribute("key", "pageContext-value");
//设置 request 域的数据
request.setAttribute("key", "request-value");
//设置 session 域的数据
session.setAttribute("key", "session-value");
//设置 application 域的数据
application.setAttribute("key", "application-value");
%>
<%-- 测试当前页面作用域 --%>
<%=pageContext.getAttribute("key") %><br/>
<%=request.getAttribute("key") %><br/>
<%=session.getAttribute("key") %><br/>
<%=application.getAttribute("key") %><br/>
<%
// 测试 request 作用域
 request.getRequestDispatcher("/context2.jsp").forward(request, response);
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
这是 context2 页面 <br/>
<%=pageContext.getAttribute("key") %><br/>
<%=request.getAttribute("key") %><br/>
<%=session.getAttribute("key") %><br/>
<%=application.getAttribute("key") %><br/>
</body>
</html>

9. jsp 中的 out 输出和 response.getWriter 输出的区别

1) jsp 中 out 和 response 的 writer 的区别演示
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
// out 输出
	out.write("这是 out 的第一次输出<br/>");
// out flush 之后。会把输出的内容写入 writer 的缓冲区中
	out.flush();
// 最后一次的输出,由于没有手动 flush,会在整个页面输出到客户端的时候,自动写入到 writer缓冲区
	out.write("这是 out 的第二次输出<br/>");
	
// writer 的输出
response.getWriter().write("这是 writer 的第一次输出<br/>");
response.getWriter().write("这是 writer 的第二次输出<br/>");
%>
</body>
</html>

效果展示
在这里插入图片描述
图解out流和write流的两个缓冲区是如何工作的
在这里插入图片描述

10. jsp 的常用标签(重点)

a) jsp 静态包含(很常用)

<%@ include file="" %>

静态包含是把包含的页面内容原封装不动的输出到包含的位置。

b) jsp 标签-动态包含(很少用)

<jsp:include page=""></jsp:include>
动态包含会把包含的 jsp 页面单独翻译成 servlet 文件,然后在执行到时候再调用翻译的 servlet 程序。并把
计算的结果返回。
动态包含是在执行的时候,才会加载。所以叫动态包含。

c) jsp 标签-转发(常用)

<jsp:forward page=""></jsp:forward>
<jsp:forward 转发功能相当于
request.getRequestDispatcher("/xxxx.jsp").forward(request, response); 的功能。

11. 静态包含和动态包含的区别

在这里插入图片描述

	在这里需要补充说明一点:我们在工作中,几乎都是使用静态包含。理由很简单。因为 jsp 页面虽然可以写 java 代
码,做其他的功能操作。但是由于 jsp 在开发过程中被定位为专门用来展示页面的技术。也就是说。jsp 页面中,基
本上只有 html,css,js。还有一些简单的 EL,表达式脚本等输出语句。所以我们都使用静态包含。

12、什么是 Listener 监听器?

什么是监听器?监听器就是实时监视一些事物状态的程序,我们称为监听器。
就好像朝阳群众?朝阳区只要有哪个明星有什么不好的事,他们都会知道,然后举报。
那么朝阳群众就是监听器,明星就是被监视的事物,举报就是响应的内容。
又或者说是,电动车的报警器。当报警器锁上的时候。我们去碰电动车,电动车就会报警。
报警器,就是监听器,电动车就是被监视的对象。报警就是响应的内容。

12.1、ServletContextListener 监听器

监听器的使用步骤。
	第一步:我们需要定义一个类。然后去继承生命周期的监听器接口。
	第二步:然后在 Web.xml 文件中配置。
注:ServletContextListener 监听器,一定要在 web.xml 文件中配置之后才会生效
//web.xml配置文件当中
<listener>
<listener-class>全类名</listener-class>
</listener>
生命周期监听器两个方法:
public void contextInitialized(ServletContextEvent sce) 是 ServletContext 对象的创建回调
public void contextDestroyed(ServletContextEvent sce) 是 ServletContext 对象的销毁回调

1)创建一个 ServletContextListenerImpl 类实现 ServletContextListener 接口。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServletContextListenerImpl implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("ServletContext 对象被创建了");
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext 对象被销毁了");
	}	
}

2)在 web.xml 文件中的配置如下

	<listener>
		<listener-class>
		com.atguigu.listener.RequestListener.ServletContextListenerImpl
		</listener-class>
	</listener>

3)这个时候,启动 web 工程和正常停止 web 工程,后台都会如下打印:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值