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

📄 0193.htm

📁 精通struts源码,孙卫琴.经过更新后的,请查收,
💻 HTM
字号:
<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>Java Server Pages for the ASP Developer</strong></big></p>
<div align="right">---&nbsp;(文/Blueski)</div>

<br>JSP&nbsp; (Java&nbsp; Server&nbsp; Pages)类似于ASP,区别在于在&nbsp; &lt;%&nbsp; 和&nbsp; %>&nbsp; 标记之间的分别是Java和VB脚本。<br>
根据Sun&nbsp; Microsystems说法,JSP在85%以上web服务器包括Apache&nbsp; WebServer,&nbsp; NetscapeTM,&nbsp; <br>
和Microsoft&nbsp; IIS&nbsp; 4.0&nbsp; (用IBM's&nbsp; WebSphere,&nbsp; LiveSoftware's&nbsp; JRun或New&nbsp; Atlanta's&nbsp; ServletExec的插件)。&nbsp; <br>
由于很多ASP开发者正转向JSP,激烈竞争已经开始。<br>
<br>
<br>
结构<br>
<br>
和ASP一样,&nbsp; JSP将内容和服务器端代码分离开了。当服务器处理JSP时,该jsp被转化为servlets,从而成为服务器端的java程序,并能支持HTTP协议,包括requests和responses.&nbsp; 当JSP转为servlet,整个文件被转为纯Java&nbsp; -&nbsp; &lt;%&nbsp; 和%>&nbsp; 消失了,HTML和JavaScript以out&nbsp; stream方式发送到客户浏览器:&nbsp; <br>
<br>
JSP:&nbsp; %>&lt;INPUT&nbsp; TYPE="button"&nbsp; NAME="Go"&nbsp; value="Today">&lt;%<br>
Servlet:&nbsp; out.println("&lt;INPUT&nbsp; TYPE=\"button\"&nbsp; NAME=\"Go\"&nbsp; value=\"Today\">");<br>
<br>
JSP诞生前,servlet开发人员不得不忍受将HTML和JavaScript用out.print编写的痛苦。&nbsp; 当用户并发请求jsp时,<br>
application的线程被实例化并对request进行处理。这些线程由Web&nbsp; Server管理和处理,并可与ASP.dll为ASP系统中创建的现成比美。这比CGI有高得多的效率。cgi要为每个用户创建一个完整的进程。<br>
<br>
<br>
性能&nbsp; vs.&nbsp; 多平台独立性<br>
<br>
<br>
Java同C++&nbsp; 和VB相比时十分缓慢,但可以跨越平台,而不需要重新编译。java的“编译”代码还要在运行时经过操作系统的Java虚拟机<br>
(JVM)解释执行。但节省了开发人员的精力。当面对GUI程序时(servlets还不支持Java&nbsp; GUI)相当缓慢。<br>
<br>
Servlets比普通Java程序快速(applets,&nbsp; stand-alone&nbsp; apps),因为它们在服务器上运行,并且不必负载GUI&nbsp; interface<br>
(HTML&nbsp; GUI则比较轻一些)。而且,servlet代码只当客户有请求时才运作,第一次可能较慢,但以后它可以缓存在服务器内存中。<br>
虽然JSP似乎比ASP优越,因为在处理时对每一个请求asp需要重新解释执行,但实际上由于JVM的关系,两者在主要处理速度上仍比较<br>
相近。<br>
<br>
Session管理<br>
<br>
<br>
ASP使用Session对象来管理用户状态信息,它允许服务器保存对用户的跟踪来实现这一点。<br>
JSP则通过HttpSession对象来维护session。Session信息在服务器上保存,&nbsp; session&nbsp; ID号则保存在用户机器上的cookie中。<br>
如果cookies被禁用,那么session&nbsp; ID只能放在URL字串中了。&nbsp; <br>
<br>
Sessions通常由server取胜设置为30分钟过期。<br>
从session对象存储和取回Items最初不能是(int,&nbsp; double)类型而且此后还要改回到它们的&nbsp; (Integer,&nbsp; Double)类型。&nbsp; <br>
<br>
HttpSession&nbsp; session=request.getSession();&nbsp; //get&nbsp; session&nbsp; object&nbsp; or&nbsp; create&nbsp; one<br>
session.getId()&nbsp; //get&nbsp; the&nbsp; session&nbsp; ID&nbsp; number<br>
Integer&nbsp; item&nbsp; =&nbsp; (Integer)&nbsp; session.getValue("item")&nbsp; //&nbsp; retrieve&nbsp; Integer&nbsp; object<br>
session.putValue("ItemValue",&nbsp; itemName);&nbsp; //&nbsp; ItemValue&nbsp; must&nbsp; not&nbsp; be&nbsp; primitive<br>
<br>
Application管理<br>
<br>
<br>
有时server在客户使用相同的Application对象时需要维护site-wide&nbsp; application变量。&nbsp; JSP使用的是ServletContext对象,<br>
如:<br>
getServletContext().setAttribute("Item",&nbsp; ItemValue);&nbsp; //to&nbsp; set&nbsp; an&nbsp; application&nbsp; variable<br>
Integer&nbsp; i=(Integer)getServletContext().getAttribute("ItemName");&nbsp; //get&nbsp; item<br>
<br>
Server&nbsp; Side&nbsp; Includes<br>
Server&nbsp; Side&nbsp; Includes&nbsp; (SSI)是另一个相似处。&nbsp; <br>
ASP:&nbsp; &lt;!--&nbsp; #include&nbsp; file&nbsp; =&nbsp; "myfile.asp"--><br>
JSP:&nbsp; &lt;%@&nbsp; include&nbsp; file&nbsp; =&nbsp; "myfile.jsp"&nbsp; --><br>
<br>
JSP-Specific&nbsp; Language<br>
JSP在转化为servlet时指示server做一些事情,指令(&nbsp; @)标志放在JSP文件顶部。<br>
如:<br>
include&nbsp; -&nbsp; <br>
&lt;%@&nbsp; include&nbsp; file="hello.jsp"&nbsp; %><br>
import&nbsp; -&nbsp; 导入一个包&nbsp; <br>
&lt;%@&nbsp; import&nbsp; =&nbsp; "java.util.*"&nbsp; %><br>
extends&nbsp; -&nbsp; servlet从某个class得到扩展&nbsp; (它的超类)&nbsp; <br>
&lt;%@&nbsp; extends&nbsp; =&nbsp; "java.util.Dictionary"&nbsp; %><br>
implements&nbsp; -&nbsp; servlet使用一个interface&nbsp; <br>
&lt;%@&nbsp; implements&nbsp; =&nbsp; "java.util.Enumeration"&nbsp; %><br>
content_type&nbsp; -&nbsp; <br>
&lt;%@&nbsp; content_type&nbsp; =&nbsp; "text/plain"&nbsp; %>&nbsp; <br>
或者<br>
&lt;%@&nbsp; content_type&nbsp; =&nbsp; "text/html"&nbsp; %><br>
<br>
Java环境<br>
<br>
<br>
ASP使用脚本语言(VBScript,&nbsp; Jscript)来处理服务器端程序。&nbsp; JSP使用纯Java,并从其面向对象特性中得益。<br>
Java最好在纯Java&nbsp; 环境的,并带有一个可视化工具和调试器的IDE中得到开发。<br>
介入HTML和其它指令会使问题复杂化。这也是JSP产生的原因。&nbsp; <br>
<br>
Java组件:&nbsp; JavaBeans<br>
<br>
<br>
JavaBeans是Java组件,JavaBeans+JSP可以和COM+ASP比美。&nbsp; COM对象常用于商务逻辑和后台计算等,这比脚本语言更快更合理。<br>
JavaBeans只在Java程序中使用,COM对象可在任何支持标准对象模型语言中使用。&nbsp; (包括Visual&nbsp; J++).<br>
另一方面,JavaBeans比COM容易开发,只要你懂得Java,并参照JavaBeans的结构来写即可。如果要使用com,还需在服务器上注册。如有修改还需重新注册并重新启动服务器。Beans可以管理database&nbsp; connections,这样可以避免在文件中带入用户名和密码。&nbsp; <br>
<br>
JavaBeans有一个结构对象模型:有一个&nbsp; public&nbsp; constructor,可设置它的属性properties,要使用setProperty标记来修改属性。而Bean需要一个&nbsp; setXXXX&nbsp; 内部方法,&nbsp; XXXX&nbsp; 是属性的名字。&nbsp; <br>
<br>
<br>
这里是一个使用了bean的JSP:<br>
<br>
&lt;HTML>&lt;HEAD&lt;TITLE>Coffee&lt;/TITLE>&lt;/HEAD><br>
&lt;BODY><br>
&lt;jsp:useBean&nbsp; id="Cindy"&nbsp; class="Coffee"&nbsp; /><br>
&lt;jsp:setProperty&nbsp; name="Cindy"&nbsp; property="Flavor"&nbsp; Value="RaspberryMocha"/><br>
<br>
I&nbsp; like&nbsp; &lt;%=&nbsp; Cindy.getFlavor()&nbsp; %>&nbsp; coffee.<br>
&lt;/BODY><br>
&lt;/HTML><br>
<br>
//The&nbsp; Coffee&nbsp; Bean:<br>
Public&nbsp; class&nbsp; Coffee<br>
{&nbsp; private&nbsp; String&nbsp; m_flavor;<br>
<br>
public&nbsp; Coffee()<br>
{&nbsp; m_flavor&nbsp; =&nbsp; "Regular";&nbsp; }<br>
<br>
public&nbsp; void&nbsp; setFlavor(String&nbsp; flavor)<br>
{&nbsp; m_flavor&nbsp; =&nbsp; flavor;&nbsp; }<br>
<br>
public&nbsp; String&nbsp; getFlavor()<br>
{&nbsp; return&nbsp; m_flavor;&nbsp; }<br>
}<br>
<br>
JSP和数据库<br>
<br>
<br>
ASP使用ODBC和ADO,&nbsp; Java使用JDBC&nbsp; (Java&nbsp; Database&nbsp; Connectivity)来连接数据库。<br>
目标数据库需要一个JDBC&nbsp; driver&nbsp; -&nbsp; 一个database-Java接口。&nbsp; JDBC并不需要服务器来创建数据源,<br>
有一个独立的JDBC&nbsp; driver就已经足够。&nbsp; <br>
<br>
如果某个数据库只有ODBC&nbsp; drivers,还可以使用JDBC和ODBC桥。此时要求ODBC数据源已在服务器上建好。<br>
Sun提供了JDBC-ODBC桥,但同时要有其免费的Java编译器。理论上说它可以和大多数有ODBC&nbsp; drivers的数据库一起工作。<br>
但实际上只对Oracle,&nbsp; Sybase,&nbsp; Microsoft&nbsp; SQL&nbsp; Server,&nbsp; 和Microsoft&nbsp; Access等通常的数据库进行过测试。<br>
这个FAQ例子使用了Microsoft&nbsp; Access&nbsp; 2000,文章最后有完整的代码:&nbsp; <br>
<br>
public&nbsp; class&nbsp; FAQ<br>
{<br>
//&nbsp; Member&nbsp; Variables<br>
private&nbsp; String&nbsp; m_DBLoc&nbsp; =&nbsp; "jdbc:odbc:FAQ";//&nbsp; the&nbsp; System&nbsp; DSN&nbsp; is&nbsp; called&nbsp; <br>
//&nbsp; "FAQ"&nbsp; and&nbsp; points&nbsp; to&nbsp; "FAQ.mdb"<br>
private&nbsp; String&nbsp; m_DBDriver&nbsp; =&nbsp; "sun.jdbc.odbc.JdbcOdbcDriver";&nbsp; <br>
private&nbsp; ResultSet&nbsp; m_RS&nbsp; =&nbsp; null;&nbsp; //&nbsp; RecordSet&nbsp; Variable<br>
private&nbsp; Connection&nbsp; m_conn&nbsp; =&nbsp; null;&nbsp; <br>
<br>
//-------------------------------------------------------<br>
//&nbsp; Method&nbsp; executeQuery&nbsp; --&nbsp; for&nbsp; executing&nbsp; queries.&nbsp; Returns&nbsp; <br>
//&nbsp; a&nbsp; ResultSet&nbsp; (RecordSet)&nbsp; kind&nbsp; of&nbsp; like&nbsp; in&nbsp; ADO<br>
//-------------------------------------------------------<br>
public&nbsp; ResultSet&nbsp; executeQuery(String&nbsp; stmt)<br>
{&nbsp; <br>
if(m_conn&nbsp; ==&nbsp; null)&nbsp; //&nbsp; if&nbsp; Connection&nbsp; has&nbsp; not&nbsp; been&nbsp; set<br>
m_RS&nbsp; =&nbsp; null;&nbsp; <br>
else<br>
{&nbsp; try&nbsp; {<br>
Statement&nbsp; s&nbsp; =&nbsp; m_conn.createStatement();<br>
m_RS&nbsp; =&nbsp; s.executeQuery(stmt);<br>
}<br>
catch&nbsp; (SQLException&nbsp; e)&nbsp; {}&nbsp; //&nbsp; if&nbsp; a&nbsp; SQL&nbsp; error&nbsp; occurs<br>
}<br>
return(m_RS);<br>
}<br>
<br>
//-----------------------------------------------------<br>
//&nbsp; Method&nbsp; DBConnect&nbsp; --&nbsp; must&nbsp; connect&nbsp; to&nbsp; the&nbsp; DB&nbsp; before&nbsp; a&nbsp; <br>
//&nbsp; query&nbsp; can&nbsp; be&nbsp; executed.&nbsp; Returns&nbsp; an&nbsp; error&nbsp; message<br>
//&nbsp; to&nbsp; be&nbsp; printed&nbsp; by&nbsp; the&nbsp; caller&nbsp; if&nbsp; there&nbsp; is&nbsp; an&nbsp; error.<br>
//-----------------------------------------------------<br>
public&nbsp; String&nbsp; DBConnect()<br>
{&nbsp; <br>
String&nbsp; retVal&nbsp; =&nbsp; "";&nbsp; //&nbsp; there&nbsp; are&nbsp; no&nbsp; errors&nbsp; yet<br>
Connection&nbsp; conn&nbsp; =&nbsp; null;<br>
try&nbsp; //&nbsp; try&nbsp; to&nbsp; connect&nbsp; to&nbsp; the&nbsp; database<br>
{&nbsp; Class.forName(m_DBDriver);<br>
m_conn&nbsp; =&nbsp; DriverManager.getConnection(m_DBLoc);<br>
}&nbsp; <br>
//&nbsp; if&nbsp; the&nbsp; driver&nbsp; class&nbsp; isn't&nbsp; found<br>
catch&nbsp; (ClassNotFoundException&nbsp; e)&nbsp; {retVal&nbsp; =&nbsp; e.toString();}<br>
catch&nbsp; (SQLException&nbsp; e)&nbsp; {retVal&nbsp; =&nbsp; e.toString();}&nbsp; //&nbsp; if&nbsp; a&nbsp; SQL&nbsp; error&nbsp; occurs<br>
<br>
return(retVal);&nbsp; //&nbsp; returns&nbsp; error&nbsp; messages&nbsp; or&nbsp; an&nbsp; empty&nbsp; string&nbsp; <br>
//&nbsp; that&nbsp; the&nbsp; caller&nbsp; must&nbsp; print.<br>
}<br>
这一JavaBean例子连接了FAQ.mdb。JSP可以将此FAQ&nbsp; Bean,实例化,浏览和打印结果等等--&nbsp; FAQ.jsp<br>
&lt;html><br>
&lt;body><br>
&lt;H3>Frequently&nbsp; Asked&nbsp; Questions&nbsp; About&nbsp; Cats&lt;/H3><br>
&lt;b>Category:&nbsp; &lt;%=&nbsp; m_Category%>&lt;b>&lt;p><br>
&lt;%&nbsp; out.println(b_FAQ.DBConnect());&nbsp; <br>
RS&nbsp; =&nbsp; FAQBean.executeQuery("SELECT&nbsp; Question,&nbsp; Answer&nbsp; FROM&nbsp; QA&nbsp; WHERE&nbsp; Category&nbsp; =&nbsp; '"&nbsp; +&nbsp; m_Category&nbsp; +&nbsp; "'");&nbsp; <br>
<br>
if(RS&nbsp; ==&nbsp; null)<br>
out.println("&lt;P>There&nbsp; are&nbsp; no&nbsp; FAQ&nbsp; entries&nbsp; for&nbsp; "+&nbsp; m_Category&nbsp; +&lt;/P>");<br>
else&nbsp; <br>
{&nbsp; count=1;<br>
while&nbsp; (RS.next())<br>
{&nbsp; out.println("&lt;TABLE&nbsp; BORDER=0>&lt;TR&nbsp; BGCOLOR=#D9D9F3>&lt;TD>&lt;B>&lt;OL>");&nbsp; <br>
out.println("&lt;LI>&lt;A&nbsp; NAME=\"#"+count+"\">&lt;/A>");<br>
out.println(RS.getString("Question"));<br>
out.println("&lt;/TD>&lt;/TR>&lt;/TABLE>&lt;/OL>&lt;/B>");&nbsp; <br>
out.println(RS.getString("Answer")&nbsp; +&nbsp; "&lt;p>");<br>
count++;<br>
}<br>
}<br>
%><br>
&lt;/BODY><br>
&lt;/HTML><br>
<br>
结论<br>
<br>
就象当年Java语言面世一样,年轻的JSP的出现也给Web开发世界带来了新的光芒。JSP借鉴了ASP的模型,将内容的编码分离,如sessions,&nbsp; application变量和server-side-includes.JSP使用了强大的Java语言,比ASP有更多的选择机会。&nbsp; JSP可以跨平台,虽然在象ChiliSoft之类的插件帮助下ASP也可以在其它平台上运行,但要求COM对象要么用Java编写,要么在本机重新编译。JavaBean比COM更容易开发与在多服务器上发布并且不需重新编译。&nbsp; <br>
<br>
ASP开发者使用了基于Windows的环境,目前可能仍想停留于IIS/ASP结构,因为ASP成熟而稳定,但你很需要关注一下JSP因为它潜在的无穷的发展。在Unix上的Web开发者已经可以使用jsp并达到ASP一样的高效率。<br>


  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

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