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