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-dependent属性,比如脚本语言,错误页面和缓冲要求。
包含转换阶段的一个文件。
声明一个在页面中使用的标签库,包含自定义操作。

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

jsp 一点点的更多相关文章

  1. J2EE之DAO设计模式及简单实现

    JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端: 客户 ...

  2. JSP EL表达式

    1 EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  3. 将html页改成jsp的两种方式

    将html页改成jsp的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-08-13 将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件.下面为大 ...

  4. 重拾C,一天一点点_4_随想

    刚才顺便又把二分默写了一遍,还好,这次比较顺利.算法这一块,一直是自己一块痛处,有时感觉自己的脑瓜子怎么就这么笨,后一想觉得肯定是锈逗了,确实啊,这么长时间不思考的脑子能机灵到哪呢?早就意识到这个问题 ...

  5. JSP三大指令 /9大内置对象 /Javabean / EL

    一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info="xxx". ...

  6. Spring MVC 遇到的一点点问题(转)

    今天下午下班之前看了看凯歌给的Spring Training的教程的lab篇,我之前有跟着做没有遇到什么问题,但是到了跟Spring MVC integrating的时候,遇到一点点有趣的事情. 这个 ...

  7. 深入JSP学习

    常规JSP JSP页面最终会由容器来生成Servlet类的,比如Tomcat容器生成JSP的Servlet类放在work目录里.因此在JSP里可以用很多简化的语法供容器使用,这篇就来整理一下. JSP ...

  8. JSP和El表达式和JSTL标签库使用

    核心标签库: <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...

  9. Struts2.5 利用Ajax将json数据传值到JSP

    AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

随机推荐

  1. NIO Channel和Buffer

    Java NIO 由以下几个核心部分组成: Buffer Channel Selector 传统的IO操作面向数据流,意味着每次从流中读一个或多个字节,直至完成,数据没有被缓存在任何地方.NIO操作面 ...

  2. Maven教程3(依赖管理)

    Maven教程2(Eclipse配置及maven项目) Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象.这些对 象通过一个名为项目对象模型(Project Object Mo ...

  3. netty源码解解析(4.0)-7 线程模型-IO线程EventLoopGroup和NIO实现(二)

    把NIO事件转换成对channel unsafe的调用或NioTask的调用 processSelectedKeys()方法是处理NIO事件的入口: private void processSelec ...

  4. 数据分析之numpy模块

    numpy(numerical python)是python语言的一个扩展程序库,支持大量的维度数组和矩阵运算,此外也针对数组提供大量的数学函数库. 一.创建数组 1 使用array()创建 impo ...

  5. [转]Angular 4 *ngIf/Else

    本文转自:http://tylerscode.com/2017/03/angular-4-ngifelse/ As you may know it wasn’t that many months ag ...

  6. Mybatis 3 配置 Log4j

    Mybatis与Log4j 最常用的日志输出是Log4j,将相应的jar包和配置文件放到相应的位置,Mybatis就可以通过Log4j将SQL语句打印出来. 配置Log4j.properties 将l ...

  7. .net 服务端 访问共享文件夹

    共享文件夹所在电脑为A服务器,网站部署在B服务器 A,B服务器上拥有同名账户,且密码也要相同.如账户名share,密码123. A服务器上,共享文件夹设置share账户有读写权限 B服务器上,IIS中 ...

  8. jQuery合并同一列中相同文本的相邻单元格

    一.效果图 二.在html的head中引入jQuery <script language="javascript" src="${pageContext.reque ...

  9. Python3 系列之 环境配置篇

    以下所有操作是基于 Windows10 和 Python3.6 来进行的,其它平台和 python 版本请自行百度. 高效使用 Visual Studio Code 系列 环境安装 1.Python ...

  10. Linux常用基本命令:三剑客命令之-awk内置函数用法

    awk的内置函数大致可以分类为算数函数.字符串函数.时间函数.其他函数等 算数函数 最常用的算数函数有rand函数.srand函数.int函数. 可以使用rand函数生成随机数,但是使用rand函数时 ...