J2EE总结(三)——深入理解JSP开发工作原理

一、JSP及其工作原理

1、JSP(JavaServer page)Java服务器页面,从名字上看,它类似于ASP,并且是在服务端编写的一种技术。

2、用于开发动态web页面的技术

为什么它可以用来开发动态web页面呢?这与它在编写时用到的技术有关。它采用HTML来定义页面的结构,但是在jsp中允许编写Java代码,并且允许开发人员在页面中使用request,response,out等对象实现与浏览器的交互,所以jsp也是一种动态web页面开发技术。

举个例子:

输出当前的时间,在html中嵌套Java代码,用<%%>括起来的代码片段

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><html>
	<head>
		<title>jsp中输出当前时间</title>
	</head>
	<body>
		当前的时间:
		<%
			Date date =new Date();  <!--此处实际为Java代码-->
			Out.write(date.toLocateString());
		%>
	</body>
</html>
</span></span>

3、经过上面的一段代码后,你是不是会产生这样的疑问呢?为什么在web页面中既有html存在,又有Java代码存在,那jsp在运行时,服务器是如何调用它的呢?它的工作原理是什么呢?

前一篇文章关于Java servlet中已经介绍了servlet的生命周期,也就是它的工作流程,每当在给客户端响应的时候,都是有server来调用service这个方法来对客户端进行响应,而在这里jsp中写的Java代码也可以给客户端进行响应,那么它们二者之间有没有什么必然的联系呢?

其实,jsp经过编译后,被编译成一个jspServlet,也属于一种servlet。而在这个类中,有一个jspService方法,来对客户端的请求进行处理和响应。就拿上面的例子来说,被服务器翻译后的代码如下:

大家从图中可以看到,所有jsp中的内容都会作为service方法中响应给客户端的内容在jspService中进行翻译。

这样就和前面servlet的工作原理对应起来了,我们可以看到在翻译后的jspService中会把客户端可能用到的对象提前准备好,以备客户端随时调用。这就是为什么我们可以直接在JSP中进行调用request和response等这些隐式对象了。

二、JSP语法

1、模板元素---------HTML

1、JSP页面中的HTML内容称之为模板元素

2、定义了网页的基本骨架,即定义了页面的基本结构和外观

2、脚本表达式

1、用于将程序数据输出到客户端

2、语法<%=变量表达式%>

举例:

<span style="font-family:KaiTi_GB2312;font-size:18px;">当前时间:<%=new Java.util.Date()%></span>

3、JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应的位置用out.print()将数据输给客户端

4、jsp脚本表达式中的变量或表达式后面不能有分号(;)

3、脚本片段

脚本片段即上文中提到的<%%>括起来的Java代码片段,为了与html进行区分,用<%%>进行标识。JSP引擎在翻译Java代码时,会原封不动的讲代码放进jspService方法中,因此,在这里不能出现模板元素的代码。

在这里需要注意的是:

1、一个JSP页面中可以有多个脚本片段,在两个或多个脚本片断直接可以嵌入文本、html标记和其他jsp元素

<span style="font-family:KaiTi_GB2312;font-size:18px;"><%
	Int x=10;
	Out.printIn(x);
%>
<p>这是JSP页面文本</p>
<%
	Int y=20;
	Out.prinln(x);
%>
</span>

2、多个脚本片断的代码可以相互访问,犹如所有的代码放在一对<%%>之中的情况。

3、单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句

<span style="font-family:KaiTi_GB2312;font-size:18px;"><%
	For(int i=1;i<5;i++)
	{
%>
	<H1>www.baidu.com</H1>
<%
	}
%>
</span>

4、不能直接在jsp的Java脚本片段中直接声明一个方法,这样就相当于在service方法中又声明了一个方法,这样在方法中声明方法是不支持的。

但如果想要在jsp中为servlet类再声明一个额外的方法,可以采用如下的语法:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><%! public void run(){}%></span>

4、注释

<%-JSP注释信息-%>

<!--HTML注释信息-->

5、JSP指令(directives)

JSP指令(directive)是为JSP引擎而设计的,他们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。

JSP有三种指令分别是:

1、Page指令

用于定义JSP页面的各种属性,无论Page指令出现在页面的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,一般放在JSP页面的起始位置。

<%@page

[language="java"]

[extends="package.class"]

[import="{package.class}"]

[session="true|false"]

[buffer="none|8kb|sizekb"]

[autoFlush="true|false"]

[isThreadSafe="true|false"]

[info="text"]

[errorPage="relative_url"]

[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]

[pageEncoding="characterSet|ISO-8859-1"]

[isEl Ignored="true|false"]

%>

2、Include指令

在一个页面中包含其他页面的指令

<%@include file="/public/head.jsp"%>

上述为静态包含,会将整个页面都包含在当前页面中,所以使用时应慎重,通常将被包含的页面中多余的声明去掉。

另外,还存在一种动态包含指令,在页面中的脚本片段中进行动态声明要包含的内容:

<%
	Request.getRestDispatcher("/public/head.jsp").include(request,response);
%>

3、taglib指令

用来在页面中导入标签库的一种技术

三、九大隐式对象

Request

Response

Session

Application

Config

Page

Out

Exception

pagecontext

再次回顾JSP工作原理:

说起这九大隐式对象,就要回到最开始说的JSP运行原理, JSP在被访问时,web容器会把请求交给JSP引擎,JSP引擎会将JSP翻译成一个JSPServlet,然后按照调用servlet的调用方式进行调用。、

在jspService方法中,会把在JSP页面中所需要的所有的方法全部准备好,以便在JSP页面中进行调用。这些对象就是上面这九大隐式对象。但Exception对象只有在JSP页面中声明后才会在jspService方法中提供,否则默认是没有Exception对象的。

之前我们对request和response对象有了一定的了解,接下来重点了解一下out和PageContext这两个对象

1、out

out对象用于向客户端发送文本对象

out对象是通过调用pageContext对象的getOut()方法返回的。其作用和方法与ServletResponse.getWriter方法返回的PrintWriter对象类似。

2、pageContext

pageContext对象是JSP技术中最重要的一个对象,它代表了JSP页面的运行环境

1、这个对象不仅封装了对其他8大隐式对象的引用

2、它自身还是一个一个于对象,可以用来保存数据

3、并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其他资源,检索其它域对象中的属性等。

通过pageContext获得其他八大对象:

为了移除JSP中的Java代码,使用自定义标签技术,此时要新建一个Java类,那么就得传递所有的隐式对象,此时只需要传递一个pageContext对象即可。

以上是关于JSP的一些总结,关于JSP,容易把它认为是一种web客户端开发技术,其实它是在服务器端编写代码的,这一点要区分清楚。此外,JSP中的重点在于理解它的工作原理及他工作中用到的一些隐式对象。当然剩下的还有很多关于JSP技术如JSP映射和自定义标签技术等,还是离不开实践!

时间: 2024-08-06 08:22:31

J2EE总结(三)——深入理解JSP开发工作原理的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

JSP/Servlet 工作原理

JSP/Servlet 工作原理(转载) 2014-03-08 23:20 1829人阅读 评论(0) 收藏 举报 Servlet Servlet 没有 main 方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器. Servlet 运行在 Servlet 容器中,并由容器管理从创建到销毁的整个过程. 对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和 ServletResponse对象

JSP(工作原理,组成部分,指令标签,动作标签,隐式对象)

目录 JSP JSP 什么是JSP JSP全名为Java Server Pages 中文名叫java服务器页面 它是在传统的网页HTML文件(.htm,.html)中插入Java程序段和JSP标记 后缀名为(*.jsp). 其根本是一个简化的Servlet设计 为什么要有JSP 直接使用Html文件是没有办法输出Java当中的信息 使用servlet来去输出一个网页非常的麻烦 于是就出现了jsp,又能写html,又能写Java代码 JSP的工作原理 设置JSP创建时的编码 本质就是一个servl

Tomcat中JSP引擎工作原理

http://blog.csdn.net/linjiaxingqqqq/article/details/7164449 JSP运行环境: 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有WebLogic和Tomcat.把这些支持JSP的web服务器配置好后.就可以再客户端通过浏览器来访问JSP页面了.默认端口一般是7001. JSP生命周期: JSP处理请求的方法就是把这些请求都统一看做Servlet.由于这个原因,JSP的很多功能和生命周期,都由Java Servlet技术标准定义

深入理解AsyncTask的工作原理

一.为什么需要工作者线程 我们知道,Android应用的主线程(UI 线程)肩负着绘制用户界面和及时响应用户操作的重任,为了避免“用户点击按钮后没反应”这样的糟糕用户体验,我们就要确保主线程时刻保持着较高的响应性.为了做到这一点,我们就要把耗时的任务移出主线程,那么耗时的任务交给谁来完成呢?答案就是工作者线程.Android开发中我们通常让主线程负责前台用户界面的绘制以及响应用户的操作,让工作者线程在后台执行一些比较耗时的任务.Android中的工作者线程主要有AsyncTask.IntentS

[diango]理解django视图工作原理

前言:正确理解django视图view,模型model,模板三种概念才能快速使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 正文:一个django视图需要拥有视图函数,如果想要视图函数工作则需要把 url 映射l到视图. 视图函数放在叫做views.py的文件中,这个文件位置位于django工程目录下 下面举例说明视图工作原理: 下面是一个返回当前日期和时间作为HTML文档的视图: from django.http import HttpResponse im

160701、理解 Promise 的工作原理

Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doom),绝对是一种糟糕的编程体验.于是便有了 CommonJS 的 Promises/A 规范,用于解决回调金字塔问题.本文先介绍 Promises 相关规范,然后再通过解读一个迷你的 Promises 以加深理解. 什么是 Promise   一个 Promise 对象代表一个目前还不可用,但是在未

jsp基础学习(四)----jsp引擎工作原理

JSP引擎的工作原理 当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:      (1)将JSP页面翻译成一个Servlet,就是一个Java文件,同时也是一个完整的Java程序.(相当于是c语言程序的预处理,补充完整所有的代码)      (2)JSP引擎调用Java编译器对这个Servlet进行编译,得到可执行文件class.(和C语言程序的编译是一样的) (3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端.(jsp是调用jav

用一个实际例子理解Docker volume工作原理

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,只不过已经被读写层中该文件的副本所隐藏. 当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失.在Docker中,只读