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. A brief introduction to per-cpu variables

    墙外通道:http://thinkiii.blogspot.com/2014/05/a-brief-introduction-to-per-cpu.html per-cpu variables are ...

  2. javascript变量提升详解

    js变量提升 对于大多数js开发者来说,变量提升可以说是一个非常常见的问题,但是可能很多人对其不是特别的了解.所以在此,我想来讲一讲. 先从一个简单的例子来入门: a = 2; var a; cons ...

  3. 详解@EnableWebMvc

    最近看了<Spring in Action>的开头,就被Spring注解开发(完全不写web.xml)惊叹了,也第一次知道了@EnableWebMvc是SpringMVC的注解 @Enab ...

  4. C++基础知识小记

    最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸 ...

  5. SqlServer主键

    *主键 作用:唯一标识表中的一条记录. *特点: 1不能重复的列. 2主键不能为null. *同名时如何处理:王洋(大) 王洋(小) *主键有两种选用策略: 业务主键和逻辑主键. 业务主键是使用有业务 ...

  6. Java中的集合迭代器

    集合的迭代器 任何集合都有迭代器. 任何集合类,都必须能以某种方式存取元素,否则这个集合容器就没有任何意义. 迭代器,也是一种模式(也叫迭代器模式).在java中它是一个对象,其目的是遍历并选中其中的 ...

  7. mac 上运行httpserver的问题

    如果你的系统是window 我建议你安装http-server 非常好用, 如果是mac,系统自带的就有httpserver 服务,没有必要在安装 按照我说的来操作 首先 sudo apachectl ...

  8. canvas-3linearGradient.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 在EXT框架中,使用JS文件设置UEditor文本框,出现新增内容很多,页面变型,不出现滚动条,导致无法进行操作。

    找到UEditor的配置文件:ueditor.config.js(这是我的项目的UEditor的配置文件名) 找到参数设置 autoHeightEnabled 是否自动增长参数,默认为TRUE 当默认 ...

  10. 【CSS学习】--- 背景

    一.前言 元素的背景区域包括:元素的内容.内边距和边框区域. CSS中用于设置背景的属性有: background-color 设置背景颜色 background-image 设置背景图片 backg ...