JSP入门到精通

本文详细介绍了JSP的基本概念、创建过程、执行原理以及与Servlet的关系。通过实例解析了JSP的组成部分、核心指令、动作、内置对象、作用域、EL表达式以及JSTL标签库的使用,旨在帮助读者从入门到精通掌握JSP技术。
摘要由CSDN通过智能技术生成

JSP

一、Jsp简介

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

jsp 的本质是Servlet; 主要用于数据的呈现.

二、 创建一个JSP页面

如下图所示:点击后 输入页面名字即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0Hl69dF-1651660782261)(img/image-20210627221130019.png)]

三、jsp的执行原理

第一次访问jsp的执行原理:

在第一次访问jsp页面时,会先将jsp翻译成jsp名_jsp.java 的源文件,然后再将其编译成字节码文件,在交给jvm来运行,然后输出其中静态内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YQjtfFd-1651660782262)(img/img1.png)]

注意: 将jsp翻译成java文件的过程是由服务器完成的,用户是没法干涉的。

第二次访问jsp运行原理

第二次执行会跳过翻译和编译两个过程,直接执行字节码文件,输出响应内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0T0oDZEs-1651660782263)(img/img2.png)]

jsp的本质是一个servlet的原因是在编译成java文件之后,生成的java文件和servlet类基本是一致的,其中静态内容是有servlet 中响应对象输出去的,可以在虚拟工作空间查看。

jsp和servlet之间的联系和区别

jsp生成的java文件的继承关系图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLeh2nOY-1651660782263)(img/img3.png)]

联系:

​ jsp : jsp -> HttpJspBase -> HttpServlet

​ 自定义servlet servlet -> HttpServlet

通过继承关系图可知,继承或者实现的接口都是一样的,只是具体的实现会有些不同。

区别:(记)
  1. jsp 主要数据的呈现而servlet ,主要数据的处理以对页面跳转的控制。
  2. jsp 是简化的servlet,是需要服务器来动态的生成java类的,servlet 本身就是一个java类。
  3. jsp是html作为模板的,其中包含前端静态的内容,而servlet 就是java是没办法包含前端静态内容的。
  4. jsp主要负责将前端内容利用servlet特性动态生成页面,而servlet负责servlet的所有功能,相对来说更全面。
  5. jsp中有九大内置对象,而servlet 中没有内置对象的概念。

四、jsp的组成

  1. 前端内容,包含html、css、javaScript
  2. java代码
  3. jsp中指令
  4. 动态标签
  5. 注释 <%-- 注释内容 – %>

五、java代码

jsp是以java作为脚本语言的,因此jsp 中是可以编写java代码的,在jsp中就java代码有三种存在形式。分别是java声明、java脚本、java表达式。

1. java声明

java的声明是在jsp 的方法外,类中创建的成员变量或者是方法。

语法: <%! java 声明 %>

2.jsp中的java脚本:

jsp 中的java脚本本质就是jsp中编写的java代码片段,java脚本的位置对应jsp生成的java代码中的service方法中。

语法: <% java脚本; %>

3.jsp中java表达式:

jsp 中的java表达式用于输出内容到页面,表达式的位置在service方法,和print()方法中的参数是一个位置。

语法: <%=表达式 %>

注意: 变量或者表达式的后面不需要加分号。

实例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

  hello world!!!
<%--    对于jsp中的java声明,相当于在 类中成员变量的位置写代码, 主要用于声明全局变量 , 创建方法 --%>
    <%!
        public int num = 10; // 全局变量
        // 声明一个方法
        public void method(){
            System.out.println(num);
        }
    %>
    <%!
        int sum = 10 + 20;
    %>

    <%-- jsp 中的java脚本, 相当在service 方法中写代码  --%>
    <%
        response.getWriter().print(sum);
        method();
    %>
    <%
        int a = 10;
        int b = 20;
    %>
    <%
        int su = a + b;
        System.out.println("两个数的和是: a + b : " + su);
    %>

<%--    jsp中java表达式相当于在service方法中调用  response.getWriter().print(sum); 方法是print 方法中的参数--%>
<%=su%>
<%="我是java表达式"%>
</body>
</html>

jsp 中源码:

/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/9.0.53
 * Generated at: 2021-09-16 08:27:06 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 first_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {
   


        public int num = 10; // 全局变量
        // 声明一个方法
        public void method(){
   
            System.out.println(num);
        }
    

        int sum = 10 + 20;
    
  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 还允许 OPTIONS");
        return;
      }
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang
JSP程序设计从入门到精通》电子书   第1篇 入门篇 7   第1章 Jsp概述 技术分析 7    1.1 Jsp简介与历史背景 7    1.1.1 日新月异的Web技术 7    1.1.2 什么是JSP 8    1.1.3 JSP技术有以下几个显著的优点 9    1.1.4 JSP和其他类似或相关技术的一个简单比较 10    1.2 JSP环境安装配置 12    1.2.1Tomcat下JSP环境的配置 12    1.2.1建立自己的Jsp工作目录 13    1.3 JSP语法介绍 14    1.3.1 JSP页面中的元素 14    1.3.2 JSP语法概要 15    1.3.3关于模板文本(静态HTML) 16    1.4 运行第一个Jsp程序 16    1. 5本章小结 20   第2章Jsp 基础学习 20    2.1 JSP基本语法 20    2.1.1 JSP 语法之声明 21    2.1.2 JSP 语法之表达式 21    2.1.3 JSP 语法之Scriptlet 21    2.2 JSP的指令 22    2.2.1 page指令(Directive) 22    2.2.2 include指令(Directive) 24    2.3 JSP的动作 25    2.3.1 jsp:include动作 25    2.3.2 jsp:useBean动作 27    2.3.3 jsp:setProperty动作 29    2.3.4 jsp:getProperty动作 30    2.3.5 jsp: forward动作 31    2.3.6 jsp: plugin动作 31    2.3.7注释 31    2.4 JSP 9种基本内置组件 31    2.5 JSP中Session的使用 34    2.6 JSP中forward的使用 36    2.7 JSP运行时错误处理与应该注意的六个常见问题 37    2.8 JSP小实例 38    2.8.1实例1(在JSP中定义函数) 38    2.8.2实例2(获取各种CGI环境变量) 39    2.8.3实例3(JSP里request变量列表) 42    2. 9本章小结 44   第3章JavaBean组件 44    3.1 什么是JavaBeans 45    3.1.1 JavaBeans 简介 45    3.1.2 JavaBeans 属性 45    3.1.3 JavaBeans 的事件 50    3.2 在Jsp中使用JavaBeans 55    3.3 JavaBeans的scope属性 57    3.4 JavaBeans应用实例 59    3.4.1 实例1(HelloWord.java) 59    3.4.2 实例2(People.java) 60    3.4.3实例子3数组应用 (Example2_3.java) 60    3.4.4实例子4运算符、表达式应用 (Example3_1.java) 61    3.5 本章小结 62   第4章Jsp与Servlet 62    4.1 什么是Servlets 63    4.1.1 JavaServlet的解释 63    4.1.2 什么是Jsp 65    4.1.3 得到一个Servlets和JSP的运行环境 66    4.1.4 实现第一个JSP和SERVELT 67    4.2 Servlet规范定义的Servlet 生命周期 70    4.3 JSP/Servlet的重定向技术综述 72    4.3.1 RequestDispatcher.forward() 72    4.3.2 response.sendRedirect() 73    4.4 理解会话 74    4.4.1 会话状态跟踪API 75    4.4.2 在会话对象中保存数据 76    4.4.3实例:显示会话信息 76    4.5 用Java Servlets代替CGI 78    4.6 JSP/Servlet 中的汉字编码问题 80    4.7 图解Eclipse+Tomcat集成开发Servlet 84    4.8 Servlets/JSP开发技术问答 93    4.9 Servlet小实例 97    4.5.1实例1(输出) 98    4.5.2实例2(获取表单参数) 99    4.5.3实例3(获取jsp各种参数) 101    4.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值