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

智能推荐

AHB2APB 同步桥的设计代码(Verilog)_ahb转apb verilog代码-程序员宅基地

文章浏览阅读1w次,点赞18次,收藏155次。????关于AHB2APB的设计请看:AHB2APB设计????关于AHB2APB的验证请看:AHB2APB验证????关于AHB2APB的验证请看:AHB2APB验证数据是否需要寄存一拍的控制信号的产生,如下代码: //------数据寄存------- wire rdata_reg_param; // REGISTER_RDATA,寄存读数据 wire wdata_reg_param; // REGISTER_WD_ahb转apb verilog代码

Spring Data JPA在springboot中的应用-程序员宅基地

文章浏览阅读202次。文章目录一、springboot中spring data jpa的配置pom.xml配置application.yml测试类基础模板二、spring data jpa利用原生sql或者jpql执行数据库操作实体bean三、spring data jpa根据命名规则查询四、specification(规范查询,分页,动态sql)五、多表关联查询一、springboot中spring data jp..._data jpa在springboot中

Win10安装Ansible Python包_windows下载ansible安装包-程序员宅基地

文章浏览阅读3k次。文章目录前言安装步骤1.准备工作2.下载ansible安装包3.安装3.1 修改压缩包3.2 解压缩3.3 安装总结前言此Win10安装ansible方案,只是为了解决win环境下开发python项目时,涉及ansible模块引用报错的问题。如果想在win环境下安装ansible进行客户端管理或playbook开发,本文所述方案不适合!可了解一下Cygwin或Windows Subsystem for Linux。安装步骤在win环境下直接使用pip install ansible安装肯定是会_windows下载ansible安装包

macOS开发,发现webview连接不上网络。。已解决-程序员宅基地

文章浏览阅读1.1k次。今天帮公司搞一个mac的开发项目,就是最简单的用webview套一个网页就可以了。代码就一句话可惜,报了这堆错误,而且webview一片空白。后来在网上终于找到了解决方法,在这里分享给大家。

当软件定义存储(SDS)遇见区块链(BlockChain)-程序员宅基地

文章浏览阅读2.4k次。【编者Peter Ye按】再开始正文之前,先分享我最近思考得出的一段话: 互联网解决了信息随时分享,移动互联网解决了信息随地分享,物联网解决了信息随物分享,而构建在三者基..._软件定义存储的空间

golang使用redis分布式锁_can be used to set the clock drift factor.-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏10次。昨天由于项目需求,需要使用redis分布式锁,在网上找了半天,也没有找到一个简单的教程,经过自己研究,了解简单使用方法,都可以直接拿过来自己用,下面我就发出来给大家分享一下。首先下载 github.com/garyburd/redigo,因为这个分布式锁是根据上面所实现; 下载 gopkg.in/redsync.v1这个就是实现分布式锁的源代码(如果测试需要下载 github.c..._can be used to set the clock drift factor.

随便推点

Windows环境下sublime text 3搭建前端开发环境-程序员宅基地

文章浏览阅读148次。本文转载于:猿2048网站https://www.mk2048.com/blog/blog.php?id=i2bckjb&title=Windows%E7%8E%AF%E5%A2%83%E4%B8%8Bsublime+text+3%E6%90%AD%E5%BB%BA%E5%89%8D%..._windows下sublime搭建前端环境

小白学java日记——接口与匿名内部类的实例_java 接口 匿名类 案例-程序员宅基地

文章浏览阅读88次。班级学生排队,男生按照身高从低到高排一队,女生,按照姓名从小到大排一队(使用接口和匿名内部类)package homework;import java.sql.Connection;import java.util.Arrays;/*班级学生排队,男生按照身高从低到高排一队,女生,按照姓名从小到大排一队(使用接口和匿名内部类)分析:接口,数组,枚举,匿名内部类,Arrrys工具类,String的方法实现过程:1.分组按照性别分成男队和女队2.排序使用接口制定对应的规则分别实._java 接口 匿名类 案例

公有继承基类和派生类之间构造和析构、赋值和拷贝构造函数的关系(上)_公有继承 构造-程序员宅基地

文章浏览阅读251次。公有继承基类和派生类之间构造和析构、赋值和拷贝构造函数的关系(上)1、公有继承基类和派生类之间构造函数的关系如果一个类Text在公有继承了Object类,在创建一个Text对象t时会先调用Object的构造函数,然后再调用Text的构造函数,不论Text的形参列表声明中Object的声明在前在后。代码测试:#include<iostream>using namespace std;class Object{ private: int val; public: Object_公有继承 构造

提升UITableView性能-复杂页面的优化_android uitableview优化-程序员宅基地

文章浏览阅读504次。前言随着App的用户界面的内容越来越丰富,再强的手机可能都无法同时渲染复杂的UI界面和保证流畅的体验。所以,我们这些程序猿=。=在写代码的时候就要注意,如何尽可能提高用户的操作流畅性。之前的做的项目,青桔音乐iOS客户端里面的首页就是一个类似微信朋友圈的“动态”页面,大致如下:青桔动态页面如果是你,你会怎么实现这个页面呢?这还用问,当然是用UITableView+自定义_android uitableview优化

maven 聚合、继承详解_pom resources子模块继承-程序员宅基地

文章浏览阅读348次。文章目录项目Maven聚合rpc 模块创建继承pom 依赖配置relativePath元素可以通过继承的元素有以下这些依赖管理(dependencyManagement)项目github 建个仓库执行 git clone 克隆项目到本地idea 新建项目Maven聚合<modules> <module>模块1</module> ..._pom resources子模块继承

cv2.error: OpenCV(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391-程序员宅基地

文章浏览阅读4.2k次。问题全部为:cv2.error: OpenCV(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391: error: (-215:Assertion failed) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function 'getPerspectiveTransform'出现在使用cv2.getPerspectiveTransfo_cv2.error: opencv(4.2.0) /io/opencv/modules/imgproc/src/imgwarp.cpp:3391: er

推荐文章

热门文章

相关标签