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支持的逻辑和算术运算符。

posted @ 2017-09-08 18:42  lake.hu  阅读(264)  评论(0编辑  收藏  举报