OAF文档三,JSP应用程序基础

Posted on 2013-05-15 21:33  水晶石头  阅读(401)  评论(0编辑  收藏  举报

OAF文档三,JSP应用程序基础

JSP应用程序基础

概述:

如果你没有开发WEB应用的经验,本文档将会简单的描述如何一个JSP应用是如何组织的和在运行时的事件。它也说明了一些OAF的的概念。

关键的JSP应用的组件

一个典型的JSP应用包括以下组件:客户端的浏览器、企业数据库、包含应用对象的WEB应用服务器(中间件)

浏览器和中间件使用HTTP来交互,浏览器发送request消息给中间件,中间件以response消息来回应。

JSP文件是一些HTMLJAVA代码组成的,在运行时,它被编译成JAVA类作为SERVLET来执行。

SERVLET是基于JAVA的应用服务器的标准API的扩展程序

SERVLET SESSION是一种在浏览器与WEB应用报务器之间的一段时间的连续HTTP请求交互。SESSION可以在任意时间由应用服务器建立,也可以在任意时间通过应用服务器、用户关闭浏览器或持续一段时间无操作而终止。SESSION通常符后应用服务器的登录、注销循环。

JAVA BEAN是一个简单的可重用的实现了设计模式的组件,它可以使开发者或开发工具覆盖它的属性和方法。

任何在中间层的对象都能冠军JDBC来的数据库交换数据。

运行时的流程

第一步

当用户选择了连接、按钮或者激活一个图片,浏览器发送一个HTTP请求到WEB应用服务器,在本文档中,我们关注两个主要的HTTP请求方法(POSTGET),它们和OAF应用相关。

HTTP GET

用户点击一人连接或者图片连接时,浏览器会发送一个GET请求,你可以把GET当做一个明信片,地址(URL)和任何发信人写的信息(URL参数)都写在明信片上(它的空间是有限的),这意味着所有的信息都是可见的(GET请求中,所有的发送给服务器的信息都是为用URL参数的)

HTTP POST

当用户点击了一个按钮,图片或者提交FORM的连接,浏览器提交一个POST请求到服务器(从技术上来讲,FORM也可以以GET的方式来提交,但是在OAF中,FORM都是用POST方式来提交)。你可以把POST当做一个信封,地址是写在外面,但内容是在里面。在内部的信息是没有容量限制的。另外,提交的数据在URL中是看不到的,只是做为信封的内容(当然也不绝对,开发者仍然可以在提交FORM时在URL中添加参数)

什么是FORM

一般情况下,FORM是用来装载用户输入的数据的,然后将数据发送到服务器处理。

FORM是一个包括了像输入框、下拉框等的HTML的结构,用户可以提交这个FORM,当用户选择了提交按钮,浏览器发送一个POST请求,将FORM中的数据传到服务器。

第二步

WEB应用服务器中的HTTP监听器将收到的请求发送给JSP文件,开发者的代码不必知道也不必关心浏览器如何提交一个POSTGET请求。它所要做的就是读取请求中的数据然后决定做什么。例如:一个请求中的数据可能告诉JSP文件GO按扭被按下了,意味着要执行一个查询。

第三步

如上面图中所示,JSP文件将事务代理给JAVABEANJAVABEAN实现了可为的行为包括数据库交互。一旦完成事务,JSP准备好HTML内容,将它发给浏览器。

注意:我们在程序中包括了JAVABEAN就是为了无论多复杂的应用中,JSP都不作用于应用本身,你不用在一个程序中关联模型、视图和控制器。无论如何,没有绝对的技术要求要JSP和其它的类一起工作。如果有,也没有要求它们一定是JAVABEAN

第四步

浏览器显示它接收的响应的HTML内容。

事件处理:WEB UI和传统的客户端UI

在传统的C/S应用中,你可以选择处理很底层的鼠标事件、域或窗口事件。另外,当你在客户端和服务端通信时,你发送一个简单的信息到服务端去验证结果,你也可以修改用户界面,它具有高度的交互性。

WEB应用中,你一般是要处理”page-level”(页面级)的事件(除非你使用JAVASCRIPT来实现更多的交互,因为OAF代码标准和ORACLE BLAF禁止使有和,所以这里不讨论)。在这种情况下,用户从一个域到另一个域,输入数据,开发者就不用处理事件。

提示:从11.5.57开始,OAF提供了(部分页面刷新)PPR技术,支持一些用户交互性更强的事件。

当浏览器发送一个请求,所有的数据都被提交,包括用户输入的数据信息事用户想要执行的动作。开发者读取请求中的值来确定发生了什么(是否按了按钮,或者按了哪个按钮),执行选定动作所需要的工作,然后传送一个新的HTML页面到浏览器。

页面导航

我们已经回顾了当浏览器和服务器交互时发生的事情,但是我们还没讨论从一个页面到另一个页面的主要技术。

注意:下面的描述和浏览器发送和POSTGET请求无关。

标准请求

场景:

一个用户选择了一个PAGE X中的到PAGE A连接,在PAGE A中她又选择了一个到PAGE B的连接。

实现:

浏览器发送一个请求到PAGE A,它执行动作发送一个包括HTML的响应并显示。当用户想看到PAGE B时,浏览器发送一个新的请求到PAGE B,它执行动作发送一个响应,PAGE B就显示了。

如下图:

JSP FORWARD

提示:你可以在OAF中大量使用JSP FORWARD,但是你必须清楚原理。

场景:在PAGE A中,用户从一个动态列表中选择了一个动作,JSP A中的代码需要处理什么页面要被显示。

实现:在这种情况下,当处理一个用户选择的请求,JSP A forwardJSP B,它执行动作发送包括它自己的HTML的响应。因为FORWARD动作发生在服务器端,浏览器不清楚后台的动作,这两个页面共享一个相同的请求。

如下图:

另一种情况:在OAF中是很普遍的,PAGE A执行一个FORWARD到它本身。

如:

客户端的重定向

场景:用户选择了PAGE X中的连接到PAGE A,但是连接已经过期所以开发者想自动将用户导航到一个新的页面,PAGE A2

实现:在这种情况下,当处理一个请求时,JSP A发送一个REDIRECT信息到浏览器告诉它产即访问JSP A2,浏览器发送第二个请求到JSP A2,它执行动作发送一个包括HTML的响应来显示。

什么是COOKIE

为了弄清楚当用户登录后,OAF如何维护应用的上下文,你需要清楚什么是浏览器的COOKIE

COOKIE是一种应用服务器交给浏览器的信息,浏览器可以将它传回给服务器。也就是说,它是一种在请之前保持状态的技术。

COOKIE可以是基于永久的或基于会话的:

浏览器保留一个永久的COOKIE在用户电脑文件中,这个信息一直和浏览器SESSION交互,你有过访问一个网站在你登录之前就已经显示你的名字的情况吗,如果有,那就是永久的COOKIE在起作用。

基于SESSIONCOOKIE是保存在浏览器的内存中,当浏览器关闭时,COOKIE也被清除了。

SEVLET SESSION的更多信息

AOL/JJDBC连接是相同的,因为它们都是很昂贵的资源,SERVLET引擎汇集请求的线程。如下图所示,SERVLET引擎为它收到的请求分配一个线程,当请求完成时,SERVLET引擎将线程收回线程池中。

注意:下图表示的是一个用户在一个浏览器中执行了两个动作,两个HTTP请求(同一个浏览器SESSION)。它不能表示两个浏览器的情况。

因为一个浏览器要吧被多个线程服务(每个请求不同),SERVLET SESSION提供了维护请求状态的资源。

l         如果WEB应用想建立一个SERVLET SESSION,它调用一个请求对象上的方法来申请建立一个SESSION

l         SERVLET引擎建立SESSION(一个javax.servlet.http.HttpSesson对象),带有一个特定的返回给浏览器的COOKIE,这个COOKIE中保存着SESSION ID.

l         当收到一个带有SESSION ID新的请求时,SERVLET 引擎使用这个ID来定位这个浏览器的SESSION对象。

l         WEB应用可以访问SERVLET SESSION中的所有以前同一个浏览器SESSION中留下的数据。

注意:你可以有两种方式来跟踪SESSION,通常的方式也是OAF的方式,是使用COOKIE。另外也可以将COOKIE写入URL中。

Copyright © 2024 水晶石头
Powered by .NET 8.0 on Kubernetes