JSP基础_file用到了jsp引擎?-程序员宅基地

技术标签: Java学习  # Javaweb  jsp  

什么是jsp?
    JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
    JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
    JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。
为什么使用jsp?
性能更加优越,JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。
JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API。
jsp处的位置

image-20210219104945712

JSP处理流程
  1. 浏览器发送一个 HTTP 请求给服务器。
  2. Web 服务器识别出这是一个对 JSP 网页的请求,并且将该请求传递给 JSP 引擎。
  3. JSP 引擎从磁盘中载入 JSP 文件,然后将它们转化为 Servlet。
  4. JSP 引擎将 Servlet 编译成可执行类,并且将原始请求传递给 Servlet 引擎。
  5. Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器。
  6. Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到浏览器中。
  7. Web 浏览器处理 HTTP response 中动态产生的HTML网页。

img

JSP生命周期

JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet.

image-20210219105739027

  1. JSP编译

    当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

  2. JSP初始化

    容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,重写jspInit()方法就行。

  3. JSP执行

    这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。

    当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

    void _jspService(HttpServletRequest request,HttpServletResponse response){
         
          
       // Todo
    }
    
  4. JSP销毁

    JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法。

    public void jspDestroy(){
         
          
       //清理
    }
    
  5. JSP生命周期代码测试:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>jsp生命周期</title>
    </head>
    <body>
    	<%! 
    	//声明变量
    		private int initCnt = 0;
    		private int serviceCnt = 0;
    		private int destroyCnt = 0;
    	%>
    	<%!
    	//初始化方法
      	public void jspInit(){
    		initCnt++;
        	System.out.println("jspInit(): JSP被初始化了"+initCnt+"次");
      	}
    	//销毁方法
      	public void jspDestroy(){
      		destroyCnt++;
        	System.out.println("JSP被销毁了"+destroyCnt+"次");
      	}
    	%>
    	<%
    		serviceCnt++;
    		System.out.println("Jsp响应了"+serviceCnt+"次");
    		String initString="初始化次数 : "+initCnt;
    		String serviceString="响应客户请求次数 : "+serviceCnt;
    		String destroyString ="销毁次数 : "+destroyCnt;
    	%>
    	<h1>结果如下:</h1>
    	<p><%= initString%></p>
    	<p><%= serviceString%></p>
    	<p><%= destroyString%></p>
    </body>
    </body>
    </html>
    
    结果如下:(Tomcat 9.0 + jdk1.8)

    初始化次数 : 1

    响应客户请求次数 : 1

    销毁次数 : 0

jsp相关语法:
1.<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法,但是不能在Service中再定义其他的方法,也就是我们可以在<%%>中定义局部变量或者调用方法,但不能定义方法。在jsp页面可以有多个脚本片段,但是多个脚本片段之间要保证结构完整。
2.<%!%>称作声明,其中写的内容将来会直接翻译在Servlet类中,因为我们可以在类中定义方法和属性以及全局变量,所以我们可以在<%!%>中声明方法、属性、全局变量。
3.<%=%>称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面。
4.直接写在jsp页面<body></body>中的代码称作模板元素,将来会Servlet的Service方法out.write("___")中,作为输出内容。
编写与其等价的XML语句<jsp:scriptlet>代码片段</jsp:scriptlet>。
<%-- jsp注释 --%>注释内容不会被发送
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40624026/article/details/113866531

智能推荐

《吴恩达机器学习》12 支持向量机_svm普遍使用的准则描述不正确的是:( )(n为特征数,m为训练样本数。)-程序员宅基地

文章浏览阅读553次。支持向量机前言一、优化目标二、大间隔分类器1、直观理解2、数学原理三、核函数四、使用SVM总结前言到目前为止,我们已经见过一系列不同的学习算法。在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法 A 还是学习算法 B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平。比如:你为学习算法所设计的特征量的选择,以及如何选择正则..._svm普遍使用的准则描述不正确的是:( )(n为特征数,m为训练样本数。)

allegro 自动批量创建device文件_allegro 自动批量生成device文件脚本-程序员宅基地

文章浏览阅读4.5k次。学习allegro,画一块板子时,老师给了个封装库,可惜里面没有device文件,导入第三方网标时却必须有。老师让一个一个的创建,太麻烦,随想办法搞了个自动创建的脚本。思路如下:一、allegro 中录制创建device文件的脚本;file -> script ; record; 开始录制脚本file -> Create Device;创建device文件ctrl + s 保存_allegro 自动批量生成device文件脚本

LVS三种工作模式及原理详解-程序员宅基地

文章浏览阅读6.1k次,点赞9次,收藏55次。什么是 LVS?LVS 是 Linux Virtual Server 的简写,也就是 Linux 虚拟服务器,是一个虚拟的服务器集群系统,本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。官方网站:http://www.linuxvirtualserver.org,LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了高效的解决方法,现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标_lvs

第五讲 相关系数_线性相关系数举例-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏25次。相关系数总体 ——所要考察对象的全部个体叫做总体.我们总是希望得到总体数据的一些特征(例如均值方差等)样本 ——从总体中所抽取的一部分个体叫做总体的一个样本.计算这些抽取的样本的统计量来估计总体的统计量:例如使用样本均值、样本标准差来估计总体的均值(平均水平)和总体的标准差(偏离程度)。例子:我国10年进行一次的人口普查得到的数据就是总体数据。大家自己在QQ群发问卷叫同学帮忙填写得到的数据就是样本数据这里的相关系数只是用来衡量两个变量线性相关程度的指标;也就是说,你必须先确认这两个_线性相关系数举例

Python零基础之基本概念-程序员宅基地

文章浏览阅读391次。Python 语言1. 基本概念简介,快速,门槛低Python的创始人为吉多*范罗苏姆 (Gudio van Rossum)吉多 龟书 大神Python的起源可以追溯到1989年12月,由Guido van Rossum(Python社区的仁慈独裁者)创建,作为一个在圣诞节期间工作的爱好项目,Python的名字不是取义于大蟒蛇,而是来自于英国喜剧团Monty Python。Python诞生于ABC语言,是van Rossum工作的荷兰CWI研究所的终止项目,van Rossum也在研究叫Amoe

[转载]个人认为最好的BERT讲解博客(上)_!test -d bertviz_repo && echo-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏14次。這是一篇 BERT 科普文,帶你直觀理解並實際運用現在 NLP 領域的巨人之力。 如果你還有印象,在自然語言處理(NLP)與深度學習入門指南裡我使用了 LSTM 以及 Google 的語言代表模型 BERT 來分類中文假新聞。而最後因為 BERT 本身的強大,我不費吹灰之力就..._!test -d bertviz_repo && echo

随便推点

python的ORM技术:使用sqlalchemy操作mysql数据库_python里sqlalchemy如何操作mysql数据库-程序员宅基地

文章浏览阅读664次。#!/usr/bin/env python# -*- coding: utf-8 -*-from sqlalchemy import Column, String, create_engine, Integer, Date, Float, ForeignKeyfrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalch..._python里sqlalchemy如何操作mysql数据库

JNI层 C如何掉用java接口-程序员宅基地

文章浏览阅读1.1k次。JNIEXPORT jboolean JNICALL Java_com_company_BossLi_registerCallback (JNIEnv *env, jobject obj){ BOOL bRet = FALSE; bRet = CModuleAddCallBack(hMoudle, postCallBack); return

【吴恩达深度学习编程作业】4.4特殊应用——人脸识别和神经风格转换(问题未解决)_吴恩达 人脸识别 数据database出错-程序员宅基地

文章浏览阅读896次,点赞2次,收藏8次。参考文章:1.人脸识别与神经风格转换 2.神经风格转换编程作业神经网络风格中遇到的问题已经解决了并将解决方案写在了备注里面,但是人脸识别那里运行到database就出错了,目前仍没有找到解决方案,报错信息:Traceback (most recent call last): File "G:/Project/PYTHON/Demo01/Deep_Learning/test4_4/人脸识别.py", line 108, in <module> database["daniel_吴恩达 人脸识别 数据database出错

hadoop 8088端口网页无法打开的原因分析_hadoop 为什么8088访问不了-程序员宅基地

文章浏览阅读4.7w次,点赞5次,收藏27次。首先master和slaves的节点正常http://server71:50070 (HDFS管理界面)正常可以打开http:// server71:8088 yarn管理界面打不开Master(server71)Slaves(server72,73,74)[root@server71 bin]# jps2271 NameNode_hadoop 为什么8088访问不了

谈一下如何设计Oracle 分区表_如何设计分区表-程序员宅基地

文章浏览阅读3k次。在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念:表空间:表空间是一个或多个数据文件的集合,所有数据对象都存放在指定的表空间中,但主要存放表,故称表空间。分区表:分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。一旦分区被定义,SQL语句就可以访问的操作某一个分区而不是整个表,因而提高管理的效率。分区对于数据仓_如何设计分区表

PHP多张图片拼接成长图_php 图片合成-程序员宅基地

文章浏览阅读205次。将多张图片,按照规格合成一张图片。_php 图片合成