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. Java并发编程笔记之CopyOnWriteArrayList源码分析

    并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝 ...

  2. 面试:C++不可继承类

    面试中可能遇到让设计一个无法被继承的类.最简单的实现是将该类的构造函数设置为私有的,然后通过静态成员函数调用私有构造函数实例化对象,这样的类确实不可继承,但是使用起来非常不方便,必须使用静态成员实例化 ...

  3. Netty源码分析之服务启动

    本节主要分析server的启动过程. Netty是基于Nio实现的,所以也离不开selector.serverSocketChannel.socketChannel和selectKey等,只不过Net ...

  4. rtf格式 C#设置字间距 CharacterSpacing

    richtextbox空间中操作行间距段间距都可以用发送消息解决,但是字间距却鲜有人关注,无法通过PARAFORMAT2消息解决,只能直接操作rtf格式 字间距主要就是要控制 expand expan ...

  5. shiro教程1(HelloWorld)

    shiro简介 官网 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动 ...

  6. 浅谈c#的三个高级参数ref out 和Params

    c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和Params,在这里我们来分别的讲解一下,在这里的我们先不 ...

  7. Extjs 项目中常用的小技巧,也许你用得着(3)

    几天没写了,接着继续, 1.怎么获取表单是否验证通过: form.isValid()//通过验证为true 2.怎样隐藏列,并可勾选: hidden: true, 如果是动态隐藏的话: grid.ge ...

  8. 【RabbitMQ】6、rabbitmq生产者的消息确认

    通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以 ...

  9. html页面字体相关

    <!doctype html> <html> <head> <meta charset="utf-8"/> <title> ...

  10. PHP7.27: object

    http://www.devshed.com/c/a/PHP/PHP-Services-Layers-Data-Mappers/ https://stackoverflow.com/questions ...