jsp 一点点
jsp学习
jsp -处理
- 作为正常的页面,你的浏览器发送一个http请求道web服务器。
- web 服务器承认一个JSP页面的HTTP请求,并将其转发给一个JSP引擎。
- JSP引擎从磁盘加载JSP页面并将其转换为一个servlet的内容。将所有的模板文本转换为printIn()语句,所有JSP元素转化为JAVA代码实现页面的相应的动态行为。(这种行为类似前端模板,基于字符串的模板引擎的实现,如将模板写入<script>标签之中。)
- JSP 引擎编译servlet到一个可执行的类中,并将原始请求转发给一个servlet引擎(相对于php而言,多了一个引擎的处理)。
- 调用servlet引擎的web服务器的一部分加载到Servlet类并执行它。执行期间,Servlet产生一个Html格式的输出,servlet引擎将该输出传递到http响应内的web服务器中。
- web服务器将http响应以静态html内容的形式转发到客户端的浏览器中。
- 最后web浏览器处理Http响应中的动态生成的html页面,就好像它是一个静态页面。
所以在某种程度上来说,一个 JSP 页面只是用另一种方式来写 servlet,而不需要成为一个 Java 编程奇才。除了翻译阶段,处理 JSP 页面完全就像处理一个普通的 servlet 一样。
可以认为是一个语法糖,可以类比react之中的jsx,实际上就是一个js函数。
jsp -生命周期
理解 JSP 的低级功能的关键是理解它们遵循的简单的生命周期。
JSP 生命周期可以被定义为从创建到销毁的整个过程,这类似于一个 servlet 的生命周期与一个额外的步骤,该步骤将一个 JSP 编译成 servlet。
当浏览器请求一个 JSP,JSP 引擎首先检查是否需要编译页面。如果页面从未被编译,或者 JSP 自上次编译后被修改了,那么 JSP 引擎就会编译页面。
jsp -语法
jsp - scriptlet
scriptlet 可以包含任意数量的 JAVA语言语句,变量或方法声明,或者咋页面的脚本语言中有效的表达式。下面是scriptlet的语法。
<% code fragment %>
<jsp:scriptlet>
code fragment
<jsp:scriptlet>
任何文本、html标签或编写的jsp元素必须在scriptlet之外。下面是jsp的第一个简单的例子:
<html>
<head><title> Hello world </title></head>
<body>
Hello world ! <br/>
<%
out.printIn("your IP address is " + request.getRemoteAddr())
%>
</body>
</html>
JSP 声明
在JSP文件中使用变量或方法之前,必须声明。jsp声明可以同时声明一个或多个,方法如下:
<%! 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文件中的位置。
因为表达式的值转换为一个字符串,你可以在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页面的一份分时,JSP注释非常有用。语法如下:
<%-- This is a JSP commnet --%>
JSP 指令
JSP指令影响servlet类的总体结构。通常形式如下:
<%@ directive attribute="value" %>
JSP指令为容器提供方向和指导,告诉它如何处理JSP过程的某些方面。
三种指令标签:
指令 | 描述 |
---|---|
<%@ page ... %> | 定义page-dependent属性,比如脚本语言,错误页面和缓冲要求。 |
<%@ include ... %> | 包含转换阶段的一个文件。 |
<%@ taglib ... %> | 声明一个在页面中使用的标签库,包含自定义操作。 |
页面指令 page
页面指令用于为属于当前JSP页面的容器提供指示。你可以在JSP页面的任何地方编写页面指令代码。可以将整个页面当成一个对象,page指令就是设置当前页面的一些属性。
按照惯例,通常在JSP页面的顶部编写页面指令代码。下面是页面指令的基本语法:
<%@ page attribute="value" %>
<jsp:directive.page attribute="value" />
包含指令 include
包含指令用于在转换阶段包含一个文件。这个指令告诉容器在转换阶段将其他外部文件的内容与当前JSP合并。可在JSP页面中的任何位置编写include指令。
功能类似于模块化。
一般使用这个指令的形式如下:
<%@ include file="relative url" %>
<jsp:directive.include file="relative url" />
taglib 指令 taglib
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操作
JSP 操作 使用XML 语法结构来控制servlet引擎的行为。可以动态地插入一个文件,重用javabean组件,将用户转到另一个页面,或为java插件生成HTML。
语法:
<jsp:action_name attribute="value" />
操作元素基本上是预定义的函数。
JSP隐式对象
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
for
<%! 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>
while
<%! 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 运算符
JSP支持所有的java支持的逻辑和算术运算符。