Java服务器页面:JSP

目录

1.JSP技术的基础概念

1.1 什么是 JSP?

1.2 什么是JSP的主要作用?

1.3 为什么使用JSP? 

1.3 如何创建一个 jsp 动态页面程序 ?

2.jsp 的运行原理(要求知道)

3.jsp 的三种语法(重点掌握)

3.1 jsp 头部的 page 指令

3.2 jsp 中的三种常用脚本

3.3 jsp 中的三种注释 

4.jsp 九大内置对象

5.jsp 四大域对象

6.jsp 中 out 输出流 和 response.getwriter()输出流

7.jsp 的常用标签(***重点****)

7.1 jsp 静态包含

7.2 jsp 动态包含 

7.3 jsp 标签-转发

练习题

练习一:在 jsp 页面中输出九九乘法口诀表

练习二:jsp 输出一个表格,里面有 10 个学生信息。


1.JSP技术的基础概念

1.1 什么是 JSP

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

1.2 什么是JSP的主要作用?

JSP的主要作用是代替Servlet程序回传html页面的数据。

1.3 为什么使用JSP? 

因为Servlet程序回传html页面数据是一件非常繁琐的事情。开发成本和维护成本都比较高。

 

1.3 如何创建一个 jsp 动态页面程序 ?

      创建过程(略),放置于web目录下,访问方式跟html类似。

2.jsp 的运行原理(要求知道)

jsp 的本质 ,其实是一个 Servlet 程序。 

        首先我们去找到我们 Tomcat 的目录下的 work\Catalina\localhost 目录。当我们发布 08_jsp 工程。并启动 Tomcat 服务器后。我们发现
work\Catalina\localhost 目录下多出来一个 08_jsp   目录。

         然后,定位到部署地址,发现 work\Catalina\localhost 目录下多出来一个08_jsp 目录,且08_jsp内部是空的,但是访问pringHtml.jsp文件后,08_jsp下马上会生成 org\apache\jsp 目录。 并且在会中有两个文件。

注意:如果已经部署过的项目,需要先定位至部署地址删除原有缓存文件,以便观察。 

 pringHtml _jsp.class 文件很明显是 index_jsp.java 源文件编译后的字节码文件。
 那么 pringHtml _jsp.java 是个什么内容呢 ?
 生成的 java 文件名,是以原来的文件名加上 _jsp 得到。 xxxx_jsp.java 文件的名字
我们打开 pringHtml _jsp.java 文件查看里面的内容:
发现,生成的类继承于 HttpJspBase 类。这是一个 jsp 文件生成 Servlet 程序要继承的基类!

        于是,我们关联源代码。去查看一下 HttpJspBase 类的内容。从源码的类注释说明中,我们发现。 HttpJspBase 这个类就是所有 jsp 文件生成 Servlet 程序需要去继承的基类。并且这个 HttpJspBase 类继承于 HttpServlet 类。所以 jsp 也是一个 Servlet 小程序。

总结:通过翻译的java源代码我们就可以得到结果:JSP就是Servlet程序。
大家也可以通过去观察翻译出来的Servlet程序员的源代码,不难发现。其底层实现,也是通过输出流。把HTML页面数据回传给客户端。
/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/9.0.58
 * Generated at: 2022-04-29 11:53:59 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class pringHtml_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值