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

📄 0192.htm

📁 JspServlet教程专栏 对javaservlet讲述的非常详细
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>JSP 构 架 --2种方式:Model I和Model II</strong></big></p>
<div align="right">---&nbsp;(文/blueski)</div>

<br>如果你经常去Servlet或JSP的新闻组或者邮件列表,那么一定会看到不少关于Model&nbsp; I&nbsp; 和Model&nbsp; II&nbsp; 方法的讨论。究竟采用哪一种,这取决于你的个人喜好、团队工作策略以及是否采用正统的OOP。&nbsp; <br>
<br>
简单地说,Model&nbsp; I将事务逻辑(business&nbsp; logic)和表示代码(presentation&nbsp; code)融合在一起(如在HTML中);Model&nbsp; II则提倡最大限度地将所有的代码放到内容表示之外。<br>
<br>
<br>
Model&nbsp; I:&nbsp; 简单的单层次应用<br>
<br>
如果是在一个人人都精通Java和HTML的环境中,或者你独自做着所有的工作,假如每个人都有清晰的编程结构和思路,那么这种方法会很有效,不过这样的假设不在本文讨论范围之内。这种方法的第一个优点是如果你的应用改变了,你只需维护一个文件。而最大的缺陷是可读性!除非十分小心,否则你的HTML和Java代码会相互混杂,从而难以维护。&nbsp; <br>
<br>
在下面这个例子中,我们将增加一个&nbsp; TimeZone&nbsp; 元素,从而使它变成JSP文件,它会返回基于时间的所期待的TimeZone。如果没有提交&nbsp; TimeZone,那么缺省的是服务器的缺省时间。<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>
相应地,数据也可以从JavaBean取得并加以显示。在下一个例子中我们就可以看到。&nbsp; <br>
<br>
<br>
Model&nbsp; II:&nbsp; 重定向请求(Redirecting&nbsp; Requests)<br>
<br>
<br>
在一个团队开发环境中,有些是HTML设计者,另一些则是Java程序员,这时这一方法显得非常重要。Java程序员可以集中精力创建可重用代码,而HTML设计师可以集中精力于内容表示,彼此相对对立,可以分别动态地修改自己的内容,只要总体的输入输出不变。&nbsp; <br>
<br>
现在我们可以使用Model&nbsp; II来表示Model&nbsp; I的那个例子。这一方法遵循了Model-View-Controller&nbsp; (MVC)&nbsp; 范例&nbsp; (cite&nbsp; Design&nbsp; Patterns&nbsp; book)。&nbsp; 在这个例子中,我们只有一个类(页或者servlet)&nbsp; 处理请求(Controller),取得TimeZone,设置所有用于表示的变量,并将控制传递到表示页(View)。作为如此简单的应用,可以没有&nbsp; "Model"。&nbsp; <br>
<br>
Controller:&nbsp; timeByZone.jsp<br>
<br>
<br>
controller可以是一个servlet或一个JSP页。我推荐使用JSP,因为这样我不必担心每当我做修改时要对类重新编译,但是,你将因此失去granularity(颗粒性),以后要扩展该类也比较困难。<br>
<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>
HttpSession&nbsp; mySession&nbsp; =&nbsp; request.getSession();<br>
mySession.putValue("tempTimeBean",&nbsp; timeBean);<br>
<br>
&lt;/jsp:scriptlet><br>
&lt;jsp:forward&nbsp; page="displayTime.jsp"&nbsp; /><br>
======================================================================<br>
<br>
<br>
View:&nbsp; displayTime.jsp<br>
<br>
<br>
同样地,这个view既可以是一个servlet也可以是一个jsp文件。这里我们从Session中取得并显示它的值。实际上我们会将这做两次,来示范Bean是如何被使用的。&nbsp; <br>
<br>
======================================================================<br>
&lt;xml&nbsp; version="1.0"&nbsp; ?><br>
&lt;H1>Time&nbsp; JSP&lt;/H1><br>
&lt;jsp:useBean&nbsp; class="TimeBean"&nbsp; id="tempTimeBean"&nbsp; scope="session"&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; timeByZone.jsp&nbsp; --><br>
<br>
&lt;jsp:scriptlet><br>
HttpSession&nbsp; mySession&nbsp; =&nbsp; request.getSession();<br>
TimeBean&nbsp; timeBean&nbsp; =&nbsp; mySession.getValue("tempTimeBean");<br>
if&nbsp; (timeBean&nbsp; !=&nbsp; null)<br>
{&nbsp; //&nbsp; check&nbsp; to&nbsp; make&nbsp; sure&nbsp; its&nbsp; not&nbsp; null,&nbsp; to&nbsp; avoid&nbsp; NullPointerExceptions<br>
out.print(timeBean.getHours());<br>
out.print(":");<br>
out.print(timeBean.getMinutes());<br>
out.print(":");<br>
out.print(timeBean.getSeconds());<br>
}<br>
else<br>
{<br>

⌨️ 快捷键说明

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