⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0192.htm

📁 JspServlet教程专栏 对javaservlet讲述的非常详细
💻 HTM
📖 第 1 页 / 共 3 页
字号:
out.println("Press&nbsp; your&nbsp; Back&nbsp; button&nbsp; and&nbsp; select&nbsp; a&nbsp; TimeZone");<br>
}<br>
&lt;/jsp:scriptlet><br>
======================================================================<br>
第二种方法(在内部使用了代码)可能有些笨重,但允许开发者确保输出不至于很糟糕(例如"null:null:null&nbsp; null"),假定Session&nbsp; bean还没有被实例化以及没有进行值的设置。&nbsp; 这种情况发生在客户端直接调用了View页。问题是使用脚本scriptlets可以允许更强的控制。如果你确信你可以控制url存取,那么bean方法当然更适合于开发,并使&nbsp; View页更方便于HTML设计者的协同工作。<br>
<br>
<br>
上面的是"传统的"&nbsp; Model&nbsp; II设计。所有的变量都包装了并放在Session对象中。这有2个不足:<br>
<br>
1)&nbsp; 如果客户端拒绝参与的话,Session是不可得到的。<br>
<br>
2)&nbsp; 除非Session变量被显式地移走,否则它回一直存在,直到Session被破坏或过期。&nbsp; <br>
<br>
第一种案例很可能发生在这样的场合,即使用了cookies作为声明的结构(mechanism)而开发者没有能够提供声明的结构的替代表单(form),即URL改写。&nbsp; <br>
<br>
第二个案例甚至更为严重,因为它可能引起很大的内存消耗,如果Sessions被定义为保存比标准存留时间更长的话((标准存留时间是30分钟)。即使是30分钟的Session,这种Model也可能在大的应用中引起灾难性的内存泄露。为什么呢?在Session对象内部设置的对象被实例化了,并且在Session终止以前一直没有被移去。因为它们仍然有关联references(Session对象)&nbsp; 指向它们,所以无法被垃圾收集(garbage-collected)。在Model&nbsp; II&nbsp; 模型中,很多对象被放到Session中(要么直接地,要么通过JavaBean)。随着Session的进行,更多的页被存取,内存使用会增加并持续下去直到客户端终止了Session或者Session过期。要一直等到Session变得非法,放在那的对象才能被垃圾收集,而那些损失的内存本可以用于任何其它的用途。.&nbsp; <br>
<br>
改进的方法之一是将Beans或者其它变量放到Request对象中去,并使用RequestDispatcher.include()而不是RequestDispatcher.forward()。这样做以后,View&nbsp; 页具有和Controller一样的存取请求的对象。传统的Model&nbsp; II设计的不足可以被排除。<br>
<br>
一个最后的评注:尽管有如上所述,我个人仍有些不喜欢Model&nbsp; II&nbsp; 的范例,如果它用通常方法开发的话。&nbsp; 客户端被引送到某一个地址,然后又被转向到另一个不同的类,我不喜欢创建这样的系统。基于这样的原因,我修改了设计,使它变成了以下的样子:&nbsp; <br>
<br>
Controller:&nbsp; timeByZone2.jsp<br>
<br>
<br>
和前面一样,controller使用Request值来取得必要的数据,并且将数据放到请求的对象中去。这回的区别是View页将使用RequestDispatcher.include()来调用Controller。在这种方法中,客户端再也不做重定向,请求不是“链接chained”的。相当于class/jsp请求了另一方来为它做一些工作,然后继续。<br>
<br>
======================================================================<br>
&lt;xml&nbsp; version="1.0"&nbsp; ?><br>
&lt;!--Worker&nbsp; Class,&nbsp; nobody&nbsp; should&nbsp; see&nbsp; me--><br>
&lt;jsp:scriptlet><br>
//the&nbsp; parameter&nbsp; "zone"&nbsp; shall&nbsp; be&nbsp; equal&nbsp; to&nbsp; a&nbsp; number&nbsp; between&nbsp; 0&nbsp; and&nbsp; 24&nbsp; (inclusive)<br>
TimeZone&nbsp; timeZone&nbsp; =&nbsp; TimeZone.getDefault();&nbsp; //returns&nbsp; the&nbsp; default&nbsp; TimeZone&nbsp; for&nbsp; the&nbsp; server<br>
if&nbsp; (request.getParameterValues("zone")&nbsp; !=&nbsp; null)<br>
{<br>
String&nbsp; timeZoneArg&nbsp; =&nbsp; request.getParameterValues("zone")[0];<br>
timeZone&nbsp; =&nbsp; TimeZone.getTimeZone("GMT+"&nbsp; +&nbsp; timeZoneArg&nbsp; +&nbsp; ":00");&nbsp; <br>
//&nbsp; gets&nbsp; a&nbsp; TimeZone.&nbsp; For&nbsp; this&nbsp; example&nbsp; we're&nbsp; just&nbsp; going&nbsp; to&nbsp; assume&nbsp; <br>
//&nbsp; its&nbsp; a&nbsp; positive&nbsp; argument,&nbsp; not&nbsp; a&nbsp; negative&nbsp; one.<br>
}<br>
TimeBean&nbsp; timeBean&nbsp; =&nbsp; new&nbsp; TimeBean();<br>
timeBean.setHours&nbsp; =&nbsp; myCalendar.get(Calendar.HOUR_OF_DAY);<br>
timeBean.setMinutes&nbsp; =&nbsp; myCalendar.get(Calendar.MINUTE);<br>
timeBean.setSeconds&nbsp; =&nbsp; myCalendar.get(Calendar.SECOND);<br>
request.setAttribute("tempTimeBean",&nbsp; timeBean);<br>
&lt;/jsp:scriptlet><br>
======================================================================<br>
<br>
<br>
View:&nbsp; displayTime2.jsp<br>
<br>
<br>
和displayTime.jsp非常相似,但timeByZone2.jsp在也的顶部被调用。请注意&nbsp; &lt;jsp:useBean&nbsp; />&nbsp; 中的"scope"已经被换成了"request"。<br>
<br>
======================================================================<br>
&lt;xml&nbsp; version="1.0"&nbsp; ?><br>
&lt;H1>Time&nbsp; JSP&lt;/H1><br>
<br>
&lt;jsp:include&nbsp; page="timeByZone2.jsp"&nbsp; /><br>
<br>
&lt;jsp:useBean&nbsp; class="TimeBean"&nbsp; id="tempTimeBean"&nbsp; scope="request"&nbsp; />&nbsp; <br>
&lt;jsp:getProperty&nbsp; name="tempTimeBean"&nbsp; property="hours">:<br>
&lt;jsp:getProperty&nbsp; name="tempTimeBean"&nbsp; property="minutes">:<br>
&lt;jsp:getProperty&nbsp; name="tempTimeBean"&nbsp; property="seconds"><br>
&lt;!--&nbsp; these&nbsp; would&nbsp; have&nbsp; printed&nbsp; "null"&nbsp; if&nbsp; tempTimeBean&nbsp; was&nbsp; not&nbsp; instantiated&nbsp; by&nbsp; timeByZone2.jsp&nbsp; --><br>
<br>
======================================================================<br>
<br>
<br>
在一个在建系统中,我们已经使用这种方法来创建类的链,每一个都只对它所处理的工作负责。通过辨别公用的表示格式,我们创建了一个View对象,即使在很高层次的JSP中它也可以重复使用。我们的目标就是建立一些可重用的页,同时减少用于表示的类的数量。&nbsp; <br>
<br>
单个的Servlet&nbsp; Model&nbsp; (A&nbsp; Model&nbsp; II&nbsp; Design)<br>
<br>
<br>
什么时候我有足够时间来研究这个课题,我会在这里发表更多的东西。&nbsp; <br>
<br>
附原文:<br>
<br>
JSP&nbsp; Architectures<br>
An&nbsp; explanation&nbsp; and&nbsp; comparison&nbsp; of&nbsp; the&nbsp; methodologies<br>
commonly&nbsp; known&nbsp; as&nbsp; "Model&nbsp; I"&nbsp; and&nbsp; "Model&nbsp; II".<br>
Lance&nbsp; Lavandowska&nbsp; To&nbsp; Outline&nbsp; <br>
<br>
If&nbsp; you&nbsp; spend&nbsp; any&nbsp; time&nbsp; reading&nbsp; through&nbsp; Servlet&nbsp; or&nbsp; JSP&nbsp; related&nbsp; newsgroups&nbsp; or&nbsp; mailing&nbsp; lists,&nbsp; you're&nbsp; likely&nbsp; to&nbsp; encounter&nbsp; a&nbsp; discussion&nbsp; of&nbsp; Model&nbsp; I&nbsp; versus&nbsp; Model&nbsp; II&nbsp; methodologies&nbsp; .&nbsp; Which&nbsp; one&nbsp; you&nbsp; use&nbsp; depends&nbsp; on&nbsp; personal&nbsp; taste,&nbsp; team&nbsp; work&nbsp; strategies&nbsp; and&nbsp; OOP&nbsp; orthodoxy.&nbsp; <br>
<br>
Loosely&nbsp; described,&nbsp; Model&nbsp; I&nbsp; is&nbsp; an&nbsp; approach&nbsp; where&nbsp; business&nbsp; logic&nbsp; and&nbsp; presentation&nbsp; code&nbsp; can&nbsp; be&nbsp; intermixed&nbsp; with&nbsp; the&nbsp; presentation&nbsp; itself&nbsp; (HTML&nbsp; in&nbsp; our&nbsp; arena).&nbsp; Model&nbsp; II&nbsp; proscribes&nbsp; that&nbsp; all&nbsp; code,&nbsp; to&nbsp; the&nbsp; extent&nbsp; this&nbsp; is&nbsp; possible,&nbsp; be&nbsp; excluded&nbsp; from&nbsp; the&nbsp; presentation.&nbsp; <br>
<br>
Model&nbsp; I:&nbsp; Simple&nbsp; 2&nbsp; 1/2&nbsp; Tier&nbsp; Application<br>
In&nbsp; a&nbsp; team&nbsp; environment&nbsp; where&nbsp; everyone&nbsp; knows&nbsp; Java&nbsp; and&nbsp; HTML,&nbsp; or&nbsp; if&nbsp; you're&nbsp; doing&nbsp; it&nbsp; all&nbsp; yourself,&nbsp; this&nbsp; approach&nbsp; can&nbsp; work&nbsp; well,&nbsp; provided&nbsp; everyone&nbsp; maintains&nbsp; a&nbsp; clear&nbsp; coding&nbsp; structure&nbsp; (that&nbsp; discussion&nbsp; is&nbsp; outside&nbsp; the&nbsp; bounds&nbsp; of&nbsp; this&nbsp; article).&nbsp; The&nbsp; primary&nbsp; advantage&nbsp; of&nbsp; this&nbsp; approach&nbsp; is&nbsp; that&nbsp; there&nbsp; is&nbsp; only&nbsp; one&nbsp; file&nbsp; to&nbsp; maintain&nbsp; for&nbsp; changes&nbsp; to&nbsp; your&nbsp; application.&nbsp; The&nbsp; major&nbsp; disadvantage&nbsp; is&nbsp; readability!&nbsp; Unless&nbsp; great&nbsp; care&nbsp; is&nbsp; taken,&nbsp; your&nbsp; HTML&nbsp; and&nbsp; Java&nbsp; code&nbsp; can&nbsp; become&nbsp; so&nbsp; intermingled&nbsp; that&nbsp; it&nbsp; becomes&nbsp; difficult&nbsp; to&nbsp; debug&nbsp; and&nbsp; maintain&nbsp; your&nbsp; application.&nbsp; <br>
<br>
For&nbsp; this&nbsp; example,&nbsp; we&nbsp; are&nbsp; going&nbsp; to&nbsp; revisit&nbsp; the&nbsp; "Sample&nbsp; Page"&nbsp; from&nbsp; the&nbsp; JSP&nbsp; Quick&nbsp; Start&nbsp; chapter.&nbsp; I'm&nbsp; going&nbsp; to&nbsp; add&nbsp; a&nbsp; TimeZone&nbsp; element,&nbsp; so&nbsp; we'll&nbsp; have&nbsp; a&nbsp; JSP&nbsp; that&nbsp; returns&nbsp; the&nbsp; time&nbsp; based&nbsp; on&nbsp; the&nbsp; desired&nbsp; timezone.&nbsp; If&nbsp; no&nbsp; TimeZone&nbsp; is&nbsp; submitted,&nbsp; we'll&nbsp; default&nbsp; to&nbsp; that&nbsp; of&nbsp; the&nbsp; server.<br>
<br>
======================================================================<br>
&lt;xml&nbsp; version="1.0"&nbsp; ?><br>
&lt;H1>Time&nbsp; JSP&lt;/H1><br>
&lt;jsp:scriptlet><br>
//the&nbsp; parameter&nbsp; "zone"&nbsp; shall&nbsp; be&nbsp; equal&nbsp; to&nbsp; a&nbsp; number&nbsp; between&nbsp; 0&nbsp; and&nbsp; 24&nbsp; (inclusive)<br>
TimeZone&nbsp; timeZone&nbsp; =&nbsp; TimeZone.getDefault();&nbsp; //returns&nbsp; the&nbsp; default&nbsp; TimeZone&nbsp; for&nbsp; the&nbsp; server<br>
if&nbsp; (request.getParameterValues("zone")&nbsp; !=&nbsp; null)<br>
{<br>
String&nbsp; timeZoneArg&nbsp; =&nbsp; request.getParameterValues("zone")[0];<br>
timeZone&nbsp; =&nbsp; TimeZone.getTimeZone("GMT+"&nbsp; +&nbsp; timeZoneArg&nbsp; +&nbsp; ":00");&nbsp; <br>
//&nbsp; gets&nbsp; a&nbsp; TimeZone.&nbsp; For&nbsp; this&nbsp; example&nbsp; we're&nbsp; just&nbsp; going&nbsp; to&nbsp; assume&nbsp; <br>
//&nbsp; its&nbsp; a&nbsp; positive&nbsp; argument,&nbsp; not&nbsp; a&nbsp; negative&nbsp; one.<br>
}<br>
//since&nbsp; we're&nbsp; basing&nbsp; our&nbsp; time&nbsp; from&nbsp; GMT,&nbsp; we'll&nbsp; set&nbsp; our&nbsp; Locale&nbsp; to&nbsp; Brittania,&nbsp; and&nbsp; get&nbsp; a&nbsp; Calendar.<br>
Calendar&nbsp; myCalendar&nbsp; =&nbsp; Calendar.getInstance(timeZone,&nbsp; Locale.UK);<br>
&lt;/jsp:scriptlet><br>
&lt;%=&nbsp; myCalendar.get(Calendar.HOUR_OF_DAY)&nbsp; %>:<br>
&lt;%=&nbsp; myCalendar.get(Calendar.MINUTE)&nbsp; %>:<br>
&lt;%=&nbsp; myCalendar.get(Calendar.SECOND)&nbsp; %><br>
======================================================================<br>
Similarly,&nbsp; the&nbsp; data&nbsp; to&nbsp; be&nbsp; displayed&nbsp; could&nbsp; have&nbsp; been&nbsp; gotten&nbsp; from&nbsp; a&nbsp; JavaBean.&nbsp; We'll&nbsp; see&nbsp; a&nbsp; little&nbsp; of&nbsp; that&nbsp; in&nbsp; the&nbsp; next&nbsp; example.&nbsp; <br>
Model&nbsp; II:&nbsp; Redirecting&nbsp; Requests<br>
In&nbsp; a&nbsp; team&nbsp; environment&nbsp; where&nbsp; some&nbsp; members&nbsp; are&nbsp; HTML&nbsp; designers&nbsp; and&nbsp; others&nbsp; are&nbsp; Java&nbsp; programmers,&nbsp; this&nbsp; approach&nbsp; can&nbsp; be&nbsp; particularly&nbsp; strong.&nbsp; The&nbsp; Java&nbsp; programmers&nbsp; can&nbsp; focus&nbsp; on&nbsp; creating&nbsp; (re)usable&nbsp; code,&nbsp; while&nbsp; the&nbsp; HTML&nbsp; designers&nbsp; can&nbsp; focus&nbsp; on&nbsp; presentation.&nbsp; While&nbsp; the&nbsp; two&nbsp; remain&nbsp; dependant&nbsp; on&nbsp; each&nbsp; other,&nbsp; one&nbsp; or&nbsp; the&nbsp; other&nbsp; can&nbsp; change&nbsp; dramatically&nbsp; so&nbsp; long&nbsp; as&nbsp; the&nbsp; principle&nbsp; inputs&nbsp; and&nbsp; outputs&nbsp; (respectively)&nbsp; remain&nbsp; the&nbsp; same.&nbsp; <br>
<br>
Now&nbsp; we'll&nbsp; take&nbsp; the&nbsp; same&nbsp; desired&nbsp; behaviour&nbsp; from&nbsp; the&nbsp; Model&nbsp; I&nbsp; example,&nbsp; and&nbsp; present&nbsp; it&nbsp; using&nbsp; the&nbsp; Model&nbsp; II&nbsp; methodology.&nbsp; This&nbsp; methodology&nbsp; follows&nbsp; the&nbsp; Model-View-Controller&nbsp; (MVC)&nbsp; paradigm&nbsp; (cite&nbsp; Design&nbsp; Patterns&nbsp; book).&nbsp; For&nbsp; this&nbsp; example,&nbsp; we'll&nbsp; have&nbsp; one&nbsp; class&nbsp; (or&nbsp; page&nbsp; or&nbsp; servlet)&nbsp; process&nbsp; the&nbsp; request&nbsp; (Controller),&nbsp; get&nbsp; the&nbsp; TimeZone,&nbsp; set&nbsp; all&nbsp; the&nbsp; required&nbsp; variables&nbsp; for&nbsp; presentation,&nbsp; and&nbsp; pass&nbsp; control&nbsp; off&nbsp; to&nbsp; a&nbsp; presentation&nbsp; page&nbsp; (View).&nbsp; For&nbsp; simple&nbsp; apps&nbsp; like&nbsp; this,&nbsp; there&nbsp; is&nbsp; no&nbsp; "Model".&nbsp; <br>
<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -