第六章、jsp

1、什么是jsp

  1. jsp:java server pages,java的服务器页面

  2. 作用:代替Servlet回传HTML页面的数据

    1. 因为Servlet程序回传HTML页面的数据很繁琐,开发成本和维护成本都极高

      public class PrintHtml extends HttpServlet {//验证:"Servlet 程序回传 html 页面数据是一件非常繁锁的事情"
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      resp.setContentType("text/html; charset=UTF-8");
      PrintWriter writer = resp.getWriter();
      writer.write("<!DOCTYPE html>\r\n");
      writer.write(" <html lang=\"en\">\r\n");
      writer.write(" <head>\r\n");
      writer.write(" <meta charset=\"UTF-8\">\r\n");
      writer.write(" <title>Title</title>\r\n");
      writer.write(" </head>\r\n");
      writer.write(" <body>\r\n");
      writer.write(" 这是html页面数据 \r\n");
      writer.write(" </body>\r\n");
      writer.write("</html>\r\n");
      writer.write("\r\n");
      }
      }
    2. jsp 回传 html 页面简单

      • 新建:和html一样,也是在web目录下新建 jsp文件
      • 访问:运行后,浏览器输入:http://ip:port/工程路径/a.jsp
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>Title</title>
      </head>
      <body>
      this is a html page!
      </body>
      </html>

2、jsp本质

1、jsp本质是一个Servlet程序

  1. 在控制台的输出信息中找到:
  • CATALINA_BASE:/Users/liuzhixian/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/_JavaWeb,这就是运行此工程时产生的时产生的文件

  • 验证是运行时产生的方法是:work/Catalina/localhost/下的文件删除后,重新启动项目会产生新的文件,且和刚才删除的一样

  • 从中找到a.java就是Tomcat 服务器帮我们把 jsp 页面翻译成为的 java 源文件。

  • 打开a.java后发现:jsp继承了HttpJspBase类,HttpJspBase类继承了HttpServlet类。

  • 也就是说。jsp 翻译出来的 java 类,它间接了继 承了 HttpServlet 类。也就是说,翻译出来的是一个 Servlet 程序。

3、jsp的三种语法

3.1、jsp头部的 page指令

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

  2. page中各种属性的含义或作用

    language 作用
    language 表示 jsp 翻译后是什么语言文件。暂时只支持 java
    contextType 表示 jsp 返回的数据类型是什么。也是源码中 response.setContentType()参数值:response.setContentType("text/html;charset=UTF-8");
    pageEncoding jsp 页面文件本身的字符集
    import 跟 java 源代码中一样。用于导包,导类
    autoFlush 设置当 out 输出流缓冲区满了之后,是否自动刷新缓冲区。默认值是 true
    buffer 设置 out 缓冲区的大小。默认是 8kb
    errorPage 设置当 jsp 页面运行时出错,自动跳转去的错误页面路径
    isErrorPage 设置当前 jsp 页面是否是错误信息页面。默认是 false。如果是 true 可以获取异常信息
    session 设置访问当前 jsp 页面,是否会创建 HttpSession 对象。默认是 true
    extends 设置 jsp 翻译出来的 java 类默认继承谁

3.2、jsp中常用脚本

  1. 声明脚本(极少使用)
  • 声明脚本的格式: <%! 声明 java代码 %>

  • 作用:可以给 jsp 翻译出来的 java 类定义属性、方法、静态代码块、内部类等。

  1. 表达式脚本(常用)
  • 格式:<%=表达式%>

  • 作用:jsp 页面上输出数据(整型、浮点型、字符串、对象)

  • 特点

    • 所有的表达式脚本都会被翻译到_jspService() 方法中

    • 表达式脚本都会被翻译成为 out.print()输出到页面上

    • 由于表达式脚本翻译的内容都在\_jspService() 方法中,所以\_jspService()方法中的对象都可以直接使用

    • 表达式脚本中的表达式不能以分号结束

  1. 代码脚本
  • 格式:<%java代码%>
  • 作用:可以在 jsp 页面中,用java代码,编写我们自己需要的功能
  • 特点
    • 代码脚本翻译之后都在_jspService 方法中
    • 代码脚本由于翻译到\_jspService()方法中, 所以在_jspService()方法中的现有对象都可以直接使用
    • 还可以由多个代码脚本块组合完成一个完整的 java 语句
    • 代码脚本还可以和表达式脚本一起组合使用, 在 jsp 页面上输出数据

3.3、jsp中三种注释

  1. html注释:
  • html

    注释会被翻译到

    java

    源代码中。在_jspService 方法里,以 out.writer 输出到客户端

  1. Java注释
  • <%

    //单行注释

    /*多行注释*/

    %>

  1. jsp注释
  • <%-- 这是 jsp 注释 --%>
  • jsp 注释可以注掉jsp 页面中所有代码

4、jsp九大内置对象

内置对象 说明
request 请求对象
response 响应对象
pageContext jsp上下文对象
session 会话对象
application ServletContext对象
config ServletConfig对象
out jsp输出流对象
page 指向当前jsp的对象
exception 异常对象

5、jsp四大域对象

对象 所属类 说明
pageContext PageContextImpl类 当前jsp页面范围内有效
request HttpServletRequest类 一次请求有效
session HttpSession类 一个会话范围内有效(打开到关闭浏览器)
application ServletContext类 整个Web工程有效(只要Web工程不停止,数据都在)
  • 使用的优先顺序:越小越好(可以尽快释放资源,优化性能)

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

  • 相同点:两者都是用于设置返回给客户端的内容

  • 不同点:执行顺序不同( jsp 翻译之后,底层源代码都是使用 out 来进行输出)

    • 示意图

    • 使用原则:jsp 页面中统一使用 out 来进行输出。避 免打乱页面输出内容的顺序。

  • 对于out的说明

    • out.write() 输出字符串
    • out.print() 输出任意数据(转换成为字符串后调用的 write 输出)
  • 使用原则:在 jsp 页面中,可以统一使用 out.print()来进行输出

7、jsp常用标签

7.1、jsp静态包含

  • 格式:<%@ include file="要包含的jsp页面的路径"%>

    • 地址中第一个斜杠 / 表示为 http://ip:port/工程路径/,映射到代码的 web 目录
  • 特点
    • 静态包含不会翻译被包含的 jsp 页面
    • 静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出
  • 使用情况:开发时常用

7.2、jsp动态包含

  • 格式:<jsp:include page=""></jsp:include>

    • page 属性是指定要包含的 jsp 页面的路径
  • 特点

    • 动态包含会把包含的 jsp 页面也翻译成为 java 代码

    • 动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。

      JspRuntimeLibrary.include(request, response, "/include/footer.jsp", out, false);
    • 动态包含可以传递参数

      <jsp:include page="/include/footer.jsp">
      <jsp:param name="username" value="bbj"/>
      <jsp:param name="password" value="root"/>
      </jsp:include>
  • 常用的网页格式

  • 动态包含的底层原理

7.3、jsp转发标签(功能就是请求转发)

  • 格式:<jsp:forward page=""></jsp:forward>

8、练习题

8.1、输出九九乘法表

8.2、jsp 输出一个表格,里面有 10 个学生信息

9、监听器

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

10、ServletContextListener监听器

  1. 作用:监听ServletContext的创建和销毁(ServletContext对象在 web 工程启动的时候创建,在 web 工程停止的时候销毁),

  2. 使用:

    1. 监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈

    2. 代码实现

      1. 编写一个类去实现ServletContextListener
      2. 实现两个回调方法
      3. web.xml中配置监听器
      public class MyServletContextListenerImpl implements ServletContextListener {
      
      	@Override
      public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext 对象被创建了");
      } @Override
      public void contextDestroyed(ServletContextEvent sce) {
      System.out.println("ServletContext 对象被销毁了");
      }
      }
      <listener>
      <listener-class>
      com.atguigu.listener.MyServletContextListenerImpl
      </listener-class>
      </listener>

JavaWeb学习笔记(六)jsp的更多相关文章

  1. JavaWeb学习笔记六 JSP

    JSP技术 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java s ...

  2. JavaWeb学习笔记之JSP(一)

    1. JSP: 1.1. 为什么需要 JSP ? 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,但是其中的静态网页内容也需要程序员使用Java语言来进行输出,这就造成了大量代码的冗余 ...

  3. JavaWeb学习笔记之JSP(二)

    1.1.  JSP的指令: 1.   什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...

  4. JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象

    目录: 一.指令 1.1 page指令 :page指令有13种属性 1.2 include指令:include指令有1种属性,为file.(注意<%@ include%>和<jsp: ...

  5. JavaWeb学习 (十六)————JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  6. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  7. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  8. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  10. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. Git裸仓库的分支(Active Branch)切换

    Git裸仓库的Active Branch切换方法 在服务器上通过init --bare创建了一个裸仓库作为远程仓库使用,并且存在三个分支(master/kid/develop),但在使用中发现代码虽然 ...

  2. 趣图:当我修复一个隐藏Bug之后

    当我修复一个隐藏Bug时 然后,陷入了死循环中....   扩展阅读 趣图:大佬如何解决bug的 趣图:快下班了,剩一个bug,修复一下再走 趣图:当我给老板展示我修复了那个 bug 时 趣图:当同事 ...

  3. axios之post提交

    axios官网地址:https://github.com/axios/axios post提交到后台需要做相对应的处理 使用URLSearchParams可以让post 数据提交到后台 对应gitHu ...

  4. C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)

    利用头插法实现逆置 下面简单介绍一下,算法思想结合图示看 算法思想:"删除"头结点与链表其他结点的原有联系(即将头结点的指针置空),再逐个插入逆置链表的表头(即"头插&q ...

  5. 怎么摆脱又臭又长的 Git 命令?

    在使用 Git 的时候,虽然大部分时候我们用的是图形客户端,但图形客户端不能解决所有的操作,所以,也少不了要需要使用命令行的时候. 但有些 Git 命令和参数确实又不好记,甚至有的命令每次要用的时候需 ...

  6. 神奇的字符串匹配:扩展KMP算法

    引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...

  7. 实验 3:Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定;初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 h ...

  8. 【字符串算法】字典树(Trie树)

    什么是字典树 基本概念 字典树,又称为单词查找树或Tire树,是一种树形结构,它是一种哈希树的变种,用于存储字符串及其相关信息. 基本性质 1.根节点不包含字符,除根节点外的每一个子节点都包含一个字符 ...

  9. c中_tmain()和main()区别

    来源参考:https://www.cnblogs.com/lucyjiayou/archive/2011/05/07/2039621.html tchar.h>可以找到,如#define _tm ...

  10. C语言中 malloc

    参考:https://blog.csdn.net/kokodudu/article/details/11760863 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: ...