当前位置: 首页 > news >正文

【JavaWeb】Jsp基本教程

目录

  • JSP概述
    • 作用
    • 一个简单的案例:使用JSP页面输出当前日期
  • JSP处理过程
  • JSP 生命周期
    • 编译阶段
    • 初始化阶段
    • 执行阶段
    • 销毁阶段
    • 案例
  • JSP页面的元素
    • JSP指令
      • JSP中的page指令
      • Include指令
        • 示例
      • taglib指令
    • JSP中的小脚本与表达式
    • JSP中的声明
    • JSP中的注释
      • HTML的注释
      • JSP注释
    • JSP行为

JSP概述

  • JSP(全称Java Server Pages)是一种动态网页开发技术。是由 Sun公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
  • JSP 技术是以 Java 语言作为脚本语言的,使用HTML嵌套Java代码实现,运行在服务器端的Java页面。
  • JSP文件后缀名为 *.jsp 。
  • JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows上。

作用

  • 替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
  • 就是显示网页的,和HTML有什么区别?就是我们的jsp页面可以嵌套java代码
  • 可以和Servlet完美的契合

一个简单的案例:使用JSP页面输出当前日期

<%@ page language="java" import="java.util.*,java.text.*" contentType= "text/html; charset=utf-8" %>
<html><head><title>输出当前日期</title></head><body>你好,今天是<% SimpleDateFormat formater =new SimpleDateFormat("yyyy年 MM月dd日");String strCurrentTime = formater.format(new Date()); %>	<%=strCurrentTime %></body>
</html>

在这里插入图片描述

JSP处理过程

在这里插入图片描述
第一次请求之后,Web容器可以重用已经编译好的字节码文件
在这里插入图片描述
如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译

以下步骤表明了Web服务器是如何使用JSP来创建网页的:

  1. 就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。
  2. Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
  3. JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
  4. JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
  5. Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
  6. Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
  7. 最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。

一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改日期早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。这使得整个流程与其他脚本语言(比如PHP)相比要高效快捷一些。

总的来说,JSP网页就是用另一种方式来编写servlet而不用成为Java编程高手。除了解释阶段外,JSP网页几乎可以被当成一个普通的servlet来对待。

JSP 生命周期

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

以下是JSP生命周期中所走过的几个阶段:

编译阶段

servlet容器编译jsp源文件,生成servlet类
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:

  • 解析JSP文件。
  • 将JSP文件转为servlet。
  • 编译servlet。

初始化阶段

加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:

public void jspInit(){// 初始化代码
}

以般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。

执行阶段

调用与JSP对应的servlet实例的服务方法
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。

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

_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:

void _jspService(HttpServletRequest request,HttpServletResponse response)
{// 服务端处理代码
}

_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

销毁阶段

调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

jspDestroy()方法的格式如下:

public void jspDestroy()
{// 清理代码
}

案例

创建一个index.jsp 将下面的 代码 复制到 jsp页面中 然后运行Tomcat

访问http://localhost:9090/kgcSmbms/index.jsp 看看 控制台打印效果 已经页面显示的内容
在这里插入图片描述

在这里插入图片描述
关闭tomcat
在这里插入图片描述

JSP页面的元素

在这里插入图片描述

JSP指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

JSP指令语法格式:<%@ directive attribute="value" %>
指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开。

JSP中的三种指令标签:

指令描述
<%@ page … %>定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %>包含其他文件
<%@ taglib … %>引入标签库的定义

JSP中的page指令

作用:通过设置内部的多个属性定义整个页面的属性

属性描述
buffer指定out对象使用缓冲区的大小
autoFlush控制out对象的 缓存区
contentType指定当前JSP页面的MIME类型和字符编码
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends指定servlet从哪一个类继承
import导入要使用的Java类
info定义JSP页面的描述信息
isThreadSafe指定对JSP页面的访问是否为线程安全
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session
isELIgnored指定是否执行EL表达式 (默认true)
isScriptingEnabled确定脚本元素能否被使用
pageEncoding当前页面的编码格式

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。最后会被整合 成一个 Servlet .class

注意: 使用 include 指令是以静态方式包含文件 简单来说就是合二为一 ,原封不动地附加到当前文件中 所以要避免重复的代码 和变量 等逻辑。

例如:里面不要包含 … 这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。

但是也是有好处的 就是 js 和jsp … 变量方法等共享 你可以在 Include指令 后面修改包含页面内 变量的内容 从而改变包含页面的状态

为了避嫌 html 和jsp 中文乱码的情况 在项目的web.xml中添加

  <jsp-config><jsp-property-group><url-pattern>*.html</url-pattern><url-pattern>*.jsp</url-pattern><page-encoding>UTF-8</page-encoding></jsp-property-group></jsp-config>

语法:<%@ include file=“url” %>

示例
<%@ page language="java" contentType="text/html; charset=UTF-8"  isELIgnored="true" pageEncoding="UTF-8" %>
<html>
<head><title>index</title>
</head>
<body>
<%@ include file="index1.html" %>
<%@ include file="index1.jsp" %>
<h1>index.jsp</h1></body>
</html>

taglib指令

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”

Taglib指令的语法:<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性确定标签库的位置,prefix属性指定标签库的前缀。

比如引入JSTL标签库<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

JSP中的小脚本与表达式

在JSP页面中计算两个数的和,将结果输出显示

<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8" %>
<html><head><title>计算求和</title></head><body>两个数的求和结果为:<%int numA = 4, numB = 5 ;int result = numA+numB;%><%=result %></body>
</html>

JSP中的声明

作用:JSP页面中定义方法
语法:<%! Java代码%>

<%@ page language="java" import="java.util.*,java.text.*"  contentType="text/html; charset=utf-8"%>
<html>
<%!String formatDate(Date d){SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日");
return formater.format(d); }
%>你好,今天是
<%=formatDate(new Date()) %>
</body>
</html>

JSP中的注释

HTML的注释

F12查看页面源码可见

<!-- html注释-->

JSP注释

F12查看页面源码不可见

<%-- JSP注释--%><% //单行注释 %> 
<%  /*多行注释 */ %>

JSP行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

行为标签只有一种语法格式,它严格遵守XML标准:<jsp:action_name attribute="value" />
行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:

语法描述
jsp:include用于在当前页面中包含静态或动态资源
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值 配合 jsp:useBean使用
jsp:getProperty输出某个JavaBean的属性。 配合 jsp:useBean 使用
jsp:forward把请求转到一个新的页面 (转发)
http://www.lryc.cn/news/335647.html

相关文章:

  • 外包干了25天,技术退步明显.......
  • C++(14): STL条件变量std::condition_variable
  • Harmony与Android项目结构对比
  • langchain 学习笔记-FunctionCalling三种方式
  • CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?
  • Cohere推出全新升级版RAG大型AI模型:支持中文,搭载1040亿参数,现开源其权重!
  • 搭建前后端的链接(java)
  • Java多路查找树(含面试大厂题和源码)
  • day6 | 哈希表 part-2 | 454 四数相加II 、383. 赎金信、15. 三数之和、18. 四数之和
  • Redis常见数据类型(2)
  • SparkBug解决:Type mismatch; found : org.apache.spark.sql.Column required: Double
  • MQ之————如何保证消息的可靠性
  • TrollInstallerX官方一键安装巨魔商店
  • 生成随机图片验证码
  • 【0280】《数据库系统概论》阅读总结(附xmind思维导图)
  • 数据结构(二)----线性表(顺序表,链表)
  • 为什么你选择成为一名程序员?
  • 【Android】系统启动流程分析 —— SystemServer 处理过程
  • Web前端—属性描述符
  • SpringBoot及其特性
  • 「JavaEE」初识进程
  • 计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理
  • The “from“ argument must be of type string. Received undefined——vue报错记录
  • 汽车4S行业的信息化特点与BI建设挑战
  • JSX 和 HTML 之间的区别
  • AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火
  • IDEA 宝贝插件
  • [C语言][数据结构][链表] 单链表的从零实现!
  • oracle rac打补丁后sqlplus / as sysdba ora-12537
  • TCP-IP详解卷一:协议——阅读总结