第八章 JSP 动态网页技术

创作日期:2021-12-27


8.1 JSP 介绍

        JSP(全称JavaServer Pages)是一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成 HTML,XML 或其他格式文档的Web 网页,然后返回给请求者。JSP 技术以 Java 语言作为脚本语言,为用户的 HTTP 请求提供服务,并能与服务器上的其它 Java 程序共同处理复杂的业务需求。

8.1.1 JSP 的作用

        JSP 的主要作用是代替 Servlet 程序回传 html 页面的数据,因为 Servlet 程序回传 html 页面数据是一件非常繁琐的事情,开发成本和维护成本都极高

8.1.2 JSP 的本质

JSP 本质就是一个 Servlet 程序


8.2 JSP 的三种语法

8.2.1 JSP 头部的 page 指令

Jsp 的 page 指令可以修改 jsp 页面中一些重要的属性或者行为

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • language 属性:表示 JSP 翻译后的语言文件格式,暂时只支持 java
  • contenType 属性:JSP 返回的数据类型,也是 response.setContentType() 参数值
  • pageEncoding 属性:JSP 页面文件本身的字符集
  • import 属性:跟 java 源代码中一样,用于导包,导类 
  • autoFlush 属性:设置当 out 输出缓冲区满了,是否自动刷新冲级区,默认为 true
  • buffer 属性:设置 out 缓存区的大小,默认 8kb
  • errorPage 属性:设置当 JSP 页面运行时出错,自动跳转页面的路径
  • isErrorPage 属性:设置当前 JSP 页面是否是错误信息页面,默认是 false
  • session 属性:设置访问当前 JSP 页面,是否会创建 HttpServlet 对象,默认是 true
  • extends 属性:设置 JSP 底层 Servlet 程序默认继承的类

8.2.2 JSP 中的常用脚本

  • 声明脚本

    • 格式:<%! 声明 java 代码 %> 
    • 作用:可以给 JSP 翻译出来的 Java 类定义属性和方法,内部类和静态代码块等
    • 练习:
<%@ page import="java.util.List" %>
<%@ page import="java.util.LinkedList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%-- 声明类属性 --%>
<%!private String userName;private int usrAge;private boolean usrSex;private static List<String> userHobbysList;
%>
<%-- 声明 static 静态代码块 --%>
<%!static {userHobbysList = new LinkedList<>();userHobbysList.add("lmq");userHobbysList.add("yxg");userHobbysList.add("ljh");}
%>
<%-- 声明类方法 --%>
<%!public void userEatKind(){System.out.println("eatDinner!");}public String userPlayKind(String playKind){return playKind;}
%>
<%-- 声明内部类 --%>
<%!public static class userSchoolTeacher{private String userTeacherName;private int usrTeacherAge;private boolean usrTeacherSex;private static List<String> userTeacherHobbysList;}
%>
</body>
</html>
  • 表达式脚本:

    • 格式:<%= 表达式脚本 %>
    • 作用:在 JSP 页面上输出数据
    • 特点:
      • 所有表达式脚本都会被翻译到 _jspService() 方法中
      • 表达式脚本都会被翻译成为 out.print() 输出到页面上
      • _jspService() 方法中的对象都可以直接使用
      • 表达式脚本中的表达式不能以分号结束
    • 练习:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%!public static class User {private String userName = "lmq";}
%>
<%-- 输出整型 --%>
<%= 12 %><br>
<%-- 输出浮点型 --%>
<%= 3.1415926 %><br>
<%-- 输出字符串 --%>
<%= "中华人民共和国" %><br>
<%-- 输出对象 --%>
<%= new User().userName %>
</body>
</html>
  • 代码脚本:

    • 格式:<% java 语句 %>
    • 作用:在 JSP 页面中,编写我们自己需要的需求功能
    • 特点:
      • 代码脚本翻译之后都在 _jspService() 方法中
      • 代码脚本由于翻译到 _jspService() 方法中,所以 _jspService() 方法中的现有对象都可以直接使用
      • 可以由多个代码脚本块组合完成一个完成的 java 语句
      • 代码脚本可以和表达式脚本还有 HTML 语言交互使用
    • 练习:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%-- if 语句 --%>
<%Integer nextData = 1;if (nextData == 1) {System.out.println("Yes");} else {System.out.println("No");}
%>
<%-- for 循环语句 --%>
<table border="1" cellspacing="0"><%for (int i = 0; i < 10; i++) {
%><tr><td><%= "第" + (i + 1) + "行"%><br></td></tr><%System.out.println("第"+i+1+"行");}
%>
</body>
</html>

8.2.3 JSP 中的三种注释

  • HTML 注释
  • JAVA 注释
  • JSP 注释 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<!-- this is html 注释 -->
<%//this is java 单行注释
/* this is java 多行注释 */
%>
<%-- this is jsp 注释--%>
</body>
</html>

8.2.4 练习

在 JSP 页面中输出九九乘法口诀表

<%-- PrintHtml.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 align="center">九九乘法口诀表</h1><table align="center" border="1" cellspacing="0"><% for (int i = 1; i < 10; i++) { %><tr><% for (int j = 1; j < i + 1; j++) { %><td><%= j + "*" + i + "=" + i * j + " " %></td><% } %></tr><% } %></table>
</body>
</html>


8.3 JSP 的对象

8.3.1 九大内置对象

  • request:请求对象
  • response:响应对象
  • session:会话对象
  • pageConetext:JSP 的上下文对象
  • application:ServletContext 对象
  • config:ServletConfig 对象
  • out:jsp 输出流对象
  • page:指向当前的 jsp 的对象
  • exception:异常对象

8.3.2 四大域对象

        域对象是可以像 Map 一样存取数据的对象,四个域对象功能一样,不同的是它们对数据的存取范围有区别

  • PageContextImpl 类:pageContext 对象,当前 JSP 页面范围内有效
  • HttpServletRequest 类:request 对象,一次请求内有效
  • HttpSession 类:session 对象,一个会话范围内有效
  • ServletContext 类:application 对象,整个 web 工程范围内都有效

application => session=> request => pageContext


8.3.3 JSP 中的 out 输出和 response.getWriter

  • response.getWriter 输出
  • out 输出 
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%response.getWriter().write("response 输出 <br>");out.write("out 输出");%>
</body>
</html>
  • 执行 out.flush() 操作,会把 out 缓冲区中的数据追加写入到 response 缓冲区末尾
  • 执行 response 的刷新操作,把全部数据写给客户端
  • 可以使用 out.print() 来进行输出

8.4 JSP 的常用标签

8.4.1 JSP 静态包含

  • 静态包含,就是把包含 JSP 页面内的代码拷贝到所包含的位置执行输出
  • <%@ include file=""%> 就是静态包含,file 属性指定你要包含的 JSP 页面的路径
<%-- PrintHtml.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
jsp 页面1<br>
jsp 页面2<br>
<%@include file="PrintHtml2.jsp"%>
</body>
</html>// 通过include方法标签设置连接页面进行组合显示
<%-- PrintHtml2.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
jsp 页面3<br>
</body>
</html>


8.4.2 JSP 动态包含

  • 动态包含,就是把包含 JSP 页面内的代码拷贝到所包含的位置执行输出
  • 动态包含支持传递参数
  • <jsp:include page=""></jsp:include>,page 属性指定你要包含的 JSP 页面的路径
<%-- PrintHtml.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
jsp 页面1<br>
jsp 页面2<br>
<jsp:include page="PrintHtml2.jsp"></jsp:include>
</body>
</html>// 通过include方法标签设置连接页面进行组合显示
<%-- PrintHtml2.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
jsp 页面3<br>
</body>
</html>


8.4.3 JSP 标签-转发

  • <jsp:forward page=""></jsp:forward> 是请求转发标签
  • page 属性设置请求转发的网址路径
<%-- PrintHtml.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
jsp 页面1<br>
jsp 页面2<br>
<jsp:forward page="PrintHtml2.jsp"></jsp:forward>
</body>
</html>

8.5 Listener 监听器

8.5.1 Listener 监听器的概念

  • Listener 监听器它是 JavaWeb 的三大组件之一,JavaWeb 的三大组件分别是:Servlet 程序,Filter 过滤器,Listener 监听器
  • Listener 它是 JavaEE 的规范,就是接口,监听器的作用是监听某种事务的变化,然后通过回调函数,反馈给客户程序去做一些相应的处理

8.5.2 SerContextListener 监听器

  • ServletContextListenter  可以监听 ServletContext 对象的创建和销毁
  • ServletContext 对象在 web 工程启动的时候创建,在 web 工程停止的时候销毁
  • 监听到创建和销毁之后都分别会调用 ServletContextListenter 监听器的方法反馈

使用 ServletContextListenter 监听  ServletContext 对象

  • 编写类来实现 ServletContextListenter 接口 调用其两个回调方法
/* ServletContextListenerImpl.java */
package com.jsp.Listener;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;/*** @Description: ServletContext 监听器* @author: XFDQ.lmq* @create: 2022-08-11 16:36*/
public class ServletContextListenerImpl implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("ServletContext 对象被创建");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("ServletContext 对象被销毁");}
}
  • 在 web.xml 中进行配置监听器
 <listener><listener-class>ServletContextListenerImpl 路径</listener-class>
</listener>


上一节:

下一节:

【JavaWeb - 网页编程】八 JSP 动态网页技术相关推荐

  1. php网页编程,学习掌握动态网页PHP的编程语句

    1 简单的语句 每行至多包含一条语句,例如: argv++; // 正确的 argc--; // 正确的 argv++; argc--; // 错误的 2 复合语句 复合语句是包含在大括号中的语句序列 ...

  2. 【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)

    <JAVA与JSP动态网页编程与应用>作业 一.单选题 1.以下哪项都是关键字( ) A.package privati protect throw B. false final fina ...

  3. JSP动态网页技术基本知识点总结

    今天学习了JSP动态网页技术的基本用法 1. 动态页面技术(  jsp )    what is jsp?  java server page   java服务器页面技术.        jsp包括了 ...

  4. web实验报告——JSP动态网页编程

    实验报告 一. 基本思路及实验结果(记录各种运行情况或页面的运行效果): 1.使用TOMCAT服务器配置jsp应用 1)打开TOMCAT/webapps子目录,创建一web应用(如myweb),将ex ...

  5. python实现监控电脑打开网页_Python轻松实现动态网页爬虫(附详细源码)

    AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变. 所谓的动态网页,是指跟静态网页相对的一种网页编程技术.静态网页,随着html代码的生成 ...

  6. JSP动态网页开发技术

    一.学习目标 1.JSP概述 2.JSP指令 3. JSP 隐式对象 二.重点知识 1.JSP概述:JSP是什么? 1)JSP全称Java Server Pages,是一种动态网页开发技术.它使用JS ...

  7. 网页三剑客软件测试自学,动态网页制作技术实验指导书.doc

    PAGE 动态网页制作技术实验指导书 Computer Science and Technology西南科技大学(SouthWest University of Science and Technol ...

  8. php动态网页学生作品,基于php动态网页技术的办公网站的设计

    建立一个基于php动态网页技术的网络办公平台,主要用于信息的分享与办公的直接化方便化.用户可以用此网站及时的不限地点的对自己工作任务进行了解,工作资料的下载,工作问题进行讨论. 1.课题任务 (1) ...

  9. 论文 计算机动态网页的制作,毕业论文 动态网页制作学习网站的设计与实现

    内容介绍 动态网页制作学习网站的设计与实现 摘要 在Internet飞速发展的今天,电子数字计算机是20世纪重大科技发明之一而互联网成为人们快速获取.发布和传递信息的重要渠道,它在人们政治.经济生活等 ...

最新文章

  1. C# 批处理制作静默安装程序包
  2. 第五届全国大学生计算机系统能力培养大赛 | 赠书
  3. EID:宏基因组测序在新发腹泻病毒鉴定中的应用
  4. 获取当前屏幕显示的viewcontroller
  5. 如何看期权是实值还是虚值?
  6. 构造函数的执行序列(读书笔记)
  7. padding 后尺寸变化 设置_padding margin border 和元素大小
  8. 【Kafka】kafka命令kafka-console-consumer.sh
  9. CUDA零拷贝内存(zerocopy memory)
  10. java零基础自学教程视频,详细说明
  11. 当前linux的ks文件,高手请进!请教linux自动安装文件ks.cfg
  12. 电驴无限制 服务器,全球最大电驴服务器eDonkeyServer No2消失
  13. python设置字体_python操作word设置字体
  14. 常用机器视觉软件介绍
  15. 7-3 求最小码距 (10 分)
  16. ed302安兔兔版main.31.com.antutu.ABenchMark.fix23下载安装使用教程
  17. 微积分精简版复习提纲
  18. 目标跟踪数据集GOT-10k的配置
  19. 【智能制造】周宏仁:通俗易懂讲清楚制造业“数字化起步,网络化崛起,智能化发展”;任泽平:解码“德国制造”的七大基因
  20. SiamFC代码配置复现 matlab版本

热门文章

  1. Wifi 输入密码连接
  2. 网站关键词排名下降怎么办?
  3. 程序员们,保护身体,不要成为一个药罐子!
  4. python 常用函数库
  5. [Garmin]小米2成功运行v大GARMIN2.14,详细总结
  6. 快速排序归并排序—时间复杂度分析
  7. matplotlib画图问题:Y轴数据不按大小排列
  8. 关于如何使用Linux模拟器编写.sh程序
  9. 微信推出QQ小程序,吞并or反奶?【乐搏TestPRO】
  10. 电话信用标记数据的爬虫