因此在某种程度上来讲,一个 JSP 页面只是用另外一种方式来写 servlet,而不须要成为一个 Java 编程奇才。除了翻译阶段,处理 JSP 页面彻底就像处理一个普通的 servlet 同样。php
能够认为是一个语法糖,能够类比react之中的jsx,实际上就是一个js函数。html
理解 JSP 的低级功能的关键是理解它们遵循的简单的生命周期。前端
JSP 生命周期能够被定义为从建立到销毁的整个过程,这相似于一个 servlet 的生命周期与一个额外的步骤,该步骤将一个 JSP 编译成 servlet。vue
当浏览器请求一个 JSP,JSP 引擎首先检查是否须要编译页面。若是页面从未被编译,或者 JSP 自上次编译后被修改了,那么 JSP 引擎就会编译页面。java
scriptlet 能够包含任意数量的 JAVA语言语句,变量或方法声明,或者咋页面的脚本语言中有效的表达式。下面是scriptlet的语法。react
<% code fragment %> <jsp:scriptlet> code fragment <jsp:scriptlet>
任何文本、html标签或编写的jsp元素必须在scriptlet以外。下面是jsp的第一个简单的例子:web
<html> <head><title> Hello world </title></head> <body> Hello world ! <br/> <% out.printIn("your IP address is " + request.getRemoteAddr()) %> </body> </html>
在JSP文件中使用变量或方法以前,必须声明。jsp声明能够同时声明一个或多个,方法以下:express
<%! declaration;[ declaration; ]+ ... %> <jsp:declaration> code fragment </jsp:declaration>
如下是JSP声明的一些简单的例子:编程
<%! int i = 0 ; %> <%! int a , b , c; %> <%! Circle a = new Circle(2.0); %>
JSP 表达式元素包含一个脚本语言表达式,该表达式被赋值,转换成一个字符串,并插入到表达式出如今JSP文件中的位置。
由于表达式的值转换为一个字符串,你能够在JSP文件中的文本的一行使用一个表达式,不管该文本是不是HTML标签标记。
根据JAVA语言规范,表达式元素能够包含任何有效的表达式,但你不能使用分号来结束一个表达式。
JSP表达式的语法以下:浏览器
<%= expression %> <jsp:expression> expression </jsp:expression>
例子:
<html> <head><title> A comment Test </title></head> <body> <p> Today's data: <%= (new java.util.Date()).toLocaleString() %> </p> </body> </html>
JSP 注释指的式 JSP容器应该忽略的文本或语句。当你想要隐藏或注释掉JSP页面的一份分时,JSP注释很是有用。语法以下:
<%-- This is a JSP commnet --%>
JSP指令影响servlet类的整体结构。一般形式以下:
<%@ directive attribute="value" %>
JSP指令为容器提供方向和指导,告诉它如何处理JSP过程的某些方面。
三种指令标签:
指令 | 描述 |
---|---|
<%@ page ... %> | 定义page-dependent属性,好比脚本语言,错误页面和缓冲要求。 |
<%@ include ... %> | 包含转换阶段的一个文件。 |
<%@ taglib ... %> | 声明一个在页面中使用的标签库,包含自定义操做。 |
页面指令用于为属于当前JSP页面的容器提供指示。你能够在JSP页面的任何地方编写页面指令代码。能够将整个页面当成一个对象,page指令就是设置当前页面的一些属性。
按照惯例,一般在JSP页面的顶部编写页面指令代码。下面是页面指令的基本语法:
<%@ page attribute="value" %> <jsp:directive.page attribute="value" />
包含指令用于在转换阶段包含一个文件。这个指令告诉容器在转换阶段将其余外部文件的内容与当前JSP合并。可在JSP页面中的任何位置编写include指令。
功能相似于模块化。
通常使用这个指令的形式以下:
<%@ include file="relative url" %> <jsp:directive.include file="relative url" />
JSP API 允许用户定义自定义的JSP标签,看起来像HTML或XML标签,且标签库是一组用户定义的标签,可以实现自定义的行为。
很是相似于react、vue中的组件封装。
uri 属性值解析为容器理解的一个位置,prefix 属性通知容器什么标记是自定义操做。语法以下:
<%@ taglib uri ="uri" prefix="prefixOfTag"%> <jsp:directive.taglib uri="uri" prefix="preOfTag">
用例以下:
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> <public:loop> </public:loop>
JSP 操做 使用XML 语法结构来控制servlet引擎的行为。能够动态地插入一个文件,重用javabean组件,将用户转到另外一个页面,或为java插件生成HTML。
语法:
<jsp:action_name attribute="value" />
操做元素基本上是预约义的函数。
JSP支持9个自动定义的变量,这也成为隐式对象,相似于php之中的魔术变量。目前JSP只涉及v部分,不考虑这些。
JSP 提供了强有力的 Java 工具来嵌入到你的 web 应用程序中。你能够在 JSP 编程中使用全部的 API 和 Jave 构建块,包括决策语句、循环等。(就是流程、循环等模板语法)
if...else 像普通的scriptlet 同样开始,但scriptlet结束于scriptlet标签间的html文本每一行。
<%! int day = 3; %> <html> <head><title>IF ...ELSE ...</title></head> <body> <% if(day ==1 | day == 7) { %> <p> Today is weekend </p> <% }else{ %> <p> Today is not weekend </p> <% } %> </body> </html>
switch ...case
<%! int day = 3; %> <html> <head><title>switch ...case ...</title></head> <body> <% switch(day){ case 0: out.printIn("It\'s Sunday."); break; case 1: out.printIn("It\'s Sunday."); break; case 1: out.printIn("It\'s Sunday."); break; } %> </body> </html>
三种基本类型来实现JSP编程:for,while和do...while
<%! int fontSize; %> <html> <head><title>FOR LOOP Example</title></head> <body> <% for(fontSize = 1; fontSize <= 3; fontSize++ >){ %> <font color="green" size="<%= fontSize %>"> 字体逐渐增长 </font><br/> <% } %> </body> </html>
<%! int fontSize; %> <html> <head><title>WHILE LOOP Example</title></head> <body> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> 字体逐渐增长 </font><br /> <%fontSize++;%> <%}%> </body> </html>
JSP支持全部的java支持的逻辑和算术运算符。