展望2011

2007-03-08 | JSP概述【转】

上一篇 / 下一篇  2007-04-27 22:24:23 / 个人分类:编程基础

JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,其网址为http://www.javasoft.com/products/jsp。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(scrīptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无Java Applet,甚至无Frame。51Testing软件测试网 ar_2as{
本文将介绍利用JSP技术开发动态网页的方法,还将简要分析JSP技术和 Microsoft 公司的 ASP 技术的不同之处。
T6\(@JQ ID.J0
)q }Y+X/F0二、 如何安装和启动51Testing软件测试网[iS!c-b)l
51Testing软件测试网"x$~+l;M%b.D"g|:h9w
为了实验JSP技术,首先需要建立运行环境,这个过程相当简单:51Testing软件测试网c.e6_&g;ji X
1、在 http://java.sun.com/jdk/处下载JDK(Java 2 SDK、Standard Edition、v 1.2.2)。
6g n0J(Rmz3T02、在http://java.sun.com/products/jsp/处下载JSWDK(JavaServer Web Development Kit 1.0.1)。Linux用户可以在http://jakarta.apache.org/处下载Tomcat 3.0。
.U#Q U e/IE0
a;A\ O6jk"M%^L4q)EM03、安装
"a ll @!A0
_ U0B,O0O(DfY0以Windows NT环境为例,JDK的安装是首先运行下载得到的jdk1_2_2-win.exe,然后修改系统环境参数,在PATH参数中加入[x:]\jdk1.2.2\bin以及增加新的环境参数 CLASSPATH=[x:]\jdk1.2.2\lib\tools.jar,其中[x:]是安装JDK的硬盘符(c:、d: 等)。 JSWDK的安装仅需将jswdk1_0_1-win.zip带目录释放到硬盘根目录下(c:\、d:\ 等),然后就可以在硬盘上找到\jswdk-1.0.1\目录。将来如果不想保留JSWDK,删除这个目录就可以了,没有任何系统文件和注册表遗留问题。更详细的安装过程以及Solaris/Unix和Linux下JDK、Tomcat的安装可以参考下载得到的文件包中的安装说明。
WTK}qr(L l0
~)\"vP$p:Q"?04、启动51Testing软件测试网)` c%Y~-d3U7mM5xM

R`YF^Q^ hX"A0以Windows NT环境为例,在\jswdk-1.0.1\目录下执行startserver.bat,就可启动JSWDK中一个支持JSP网页技术的Web服务器。为了不与现有的Web服务器(例如IIS、PWS等)冲突,JSWDK的Web服务器使用了8080端口。在浏览器的地址栏中键入http://localhost:8080或者http://127.0.0.1:8080后,如果能看到 JSWDK 的欢迎页就说明JSP实验环境已经建成,可进入下一步实验。要关闭Web服务器则运行stopserver.bat。
%b6MrK2[7R_3u0
.U$DC6L-L%nU5F,q}:x0三、 JSP简单示例
&ct7s$~`s)S0JSWDK中包含的Web服务器的文档目录在缺省状态下为\jswdk-1.0.1\webpages,主文档在缺省状态下为index.html和index.jsp。也就是说访问http://localhost:8080等于访问\jswdk-1.0.1\webpages\index.html。51Testing软件测试网P@R{0H:O5KT$J
用文本编辑器,如Windows中的记事本(Notepad),创建一个文本文件hi.jsp,保存在\jswdk-1.0.1\webpages\目录下,其内容如下:
t~vz,Cn8n3R0
Y+f1z m!t L+Tp0
8T0bq(AL)G v0〈html>51Testing软件测试网 n%aOD d'Dj
〈head>
NX*@\'S] ~[0〈title>Hi-JSP实验〈/title>51Testing软件测试网 ~1i1x~q6~ g{
〈/head>51Testing软件测试网NbT4_C5r
〈body>
%H\} H"d&K&x[ b0〈%51Testing软件测试网r D!w+m~|R:[
String Msg = "This JSP test."; 
|9b9`3` Eq.k0out.print("Hello World!");51Testing软件测试网/l y#Q3_VB)e-^x4P7X
%>51Testing软件测试网#w2@Q;zf/N i PJE6D
〈h2>〈%=Msg%>〈/h2>
^V*[K+t%?(T0〈/body>
W#}.S7a~[yJD,d0〈/html>51Testing软件测试网r{`.z-r#Z
51Testing软件测试网GWl\L~
51Testing软件测试网 Rp4S#P]0TJ&k1j3C
在浏览器的地址栏中键入http://localhost:8080/hi.jsp,JSWDK中的Web服务器会执行JSP 文件中用〈%以及%>括起来的Java程序语句,其中out.print是将文字输出到网页,语句〈%= 变量 | 表达式%>的作用是将Java scrīptlet中变量或表达式的值输出到网页.51Testing软件测试网p'b EV| ItF
将变量Msg赋值为中文字符串,用〈%= %>输出,或者用out.print输出中文字符串,则在英文版NT4及Redhat 6.1下实验运行结果正常,而在中文NT 4.0和中文98下,则反而会出现乱码。
;`4EP"A`3`7M5}0四、 统一的网站界面51Testing软件测试网!u"nqI%~

(Lj4n#?"s\D0JSP支持服务器端的文件包含,即可以在一个JSP文件中插入多个其他文件,用来实现统一的网站界面。修改上述hi.jsp并另存为mypage.jsp:
3dP3m5ZVoT051Testing软件测试网DgXi Nix
51Testing软件测试网0K e1We Wc1Y
〈%@ include file="top.htm" %>
K ^Wj%P)j,o0〈%51Testing软件测试网:G2rM:w-TjZ9~
String Msg = "This JSP test.";51Testing软件测试网;dj1}*WS m
out.print("Hello World!");51Testing软件测试网&A/F&ICr
%>
4J!e6ilW)N0〈h2>〈%=Msg%>〈/h2>
&KrK"\!kd;ky0〈%@ include file="bot.htm" %>
"yV;{3dONnz0
{ aLY4|+?L051Testing软件测试网(J/R| o n1LU5A
用可视化HTML编辑器,例如FrontPage、Dreamweave等设计网站的框架结构,将设计好的框架结构文件分割成两个部分,上面一半保存为top.htm, 下面一半保存为bot.htm,代码如下面所示:
,[1huQ)R8Q051Testing软件测试网Z~/L_V9t*v8g+`7u
〈html>51Testing软件测试网[2CjbhTF
〈head>51Testing软件测试网Wo Q$G-VKX:I
〈meta http-equiv="Content-Type" content="text/html; charset=gb2312">51Testing软件测试网F[)Ldb C!Gw
〈title>我的主页〈/title>51Testing软件测试网ASy(dC+O
〈/head>51Testing软件测试网!L fVlC{6j
〈body>
5\RQ+ewM N^2R1s0〈table border="0" width="100%"  cellpadding="4" cellspacing="0" align="center">
o f7Y5z!Ie0  〈tr>
_k-xO5^Jz k9p0    〈td width="100%" colspan="2" bgcolor="#837ED1" align="center">〈font face="隶书"51Testing软件测试网4E c1l(j \s
    color="#FFFF00" size=5>主页标题〈/font>51Testing软件测试网\'ffb h?X"O.}
    〈/td>
"}+v2{Nx\0  〈/tr>
;qCh:X+vA#?0  〈tr>51Testing软件测试网-p0^&jT6\Q:f`
    〈td bgcolor="#837ED1" width="15%" valign="top" align="center">〈br>51Testing软件测试网 Yc4`[#~
    〈font color="#FFFFFF">选项〈/font>〈p>〈font color="#FFFFFF">选项〈/font>〈/p>
+TQV.Q5yg aa0    〈p>〈font color="#FFFFFF">选项〈/font>〈/p>
_Ktl+Bk7S[0    〈p>〈font color="#FFFFFF">......〈/font>〈/p>51Testing软件测试网.iR8_,^ j(~h
    〈p> 〈/p>51Testing软件测试网8I%yM2VB:@
    〈/td>
;l(I3xz8Q0    〈td width="85%" valign="top">51Testing软件测试网"n s~&x%f
----------------------------------------------------------------------------------------------------------------
4ch*f(W5A-}0    〈/td>51Testing软件测试网Z8x)G%K|M s
  〈/tr>51Testing软件测试网5T9@4U{m'B.| K
〈/table>
d {p Y\5@%F~$r4D0〈/body>51Testing软件测试网-GP@5C*f6KK6K
〈/html>
I|r:q%kC051Testing软件测试网 J1yG CM XP
在浏览器的地址栏中键入http://localhost:8080/mypage.jsp.
1ex;lM+@0这样网站的界面就能统一起来,而设计者可以集中精力在功能模块上处理用户登录、连接数据库、发送email等等。每个JSP文件都有如下结构:
nc`Vh+X051Testing软件测试网 mS&EE+PZ
〈%@ include file="top.htm" %>51Testing软件测试网3?@HdB(A,@$~
〈%
1OX_LFJ3c5|0// 实现某些功能51Testing软件测试网#x ^4tC?y
%>
"d%Wx$c0cy+}7[0〈%@ include file="bot.htm" %>
uJm}g"}i0
|L1{2R y.T0
J3AJc8Xr@/W0维护网站的界面也相对比较容易,只要修改top.htm和bot.htm,就能影响到所有网页。51Testing软件测试网8@,@ Fl UzE7t!{
五、 服务器参数设置
SX5F kem0
h/G:Ta4H`(|0JSWDK的Web服务器参数保存在\jswdk-1.0.1\webserver.xml中,用Windows写字板打开并编辑这个文件就可以修改缺省设置值。本节内容主要针对JSWDK,Linux下Tomcat的设置方法略有不同。51Testing软件测试网$h I0_'i.ow BG;qXZ
JSWDK缺省的文档目录是\jswdk-1.0.1\webpages,在此目录下可以建立子目录,例如\jswdk-1.0.1\webpages\test,就能在浏览器中用http://localhost/test访问这个目录,为了使得这个子目录能执行JSP程序,还必须在webserver.xml中的〈Service>〈/Service>节加入:51Testing软件测试网 d{\W]
〈WebApplication id="test" mapping="/test" docBase="webpages/test" /> 并且,还必须建立\jswdk-1.0.1\webpages\test\WEB-INF目录,并从\jswdk-1.0.1\webpages\WEB-INF目录中复制过来以下四个文件:mappings.properties、mime.properties、servlets.properties以及webapp.properties。完成这些过程,才能通知JSWDK的Web服务器执行http://localhost/test 中的JSP程序。51Testing软件测试网 J3S"BSG7R

W-] Y$cf8cu&fM0六、 JavaBean51Testing软件测试网SCu$[3r

q5E1BR-d#D-x0F(T|0JSP网页吸引人的地方之一就是能结合JavaBean技术来扩充网页中程序的功能。 JavaBean是一种Java类 (class),通过封装属性和方法成为具有某种功能或者处理某个业务的对象。JavaBean被组织成为package(数据包)以便进行管理,实际上就是把一组JavaBean一起放在某某目录中,每个类的定义前加上package某某,本例中为test。目录test必须放在系统环境CLASSPATH包含的目录下,系统才能找到其中的JavaBean。JSWDK在缺省状态下将\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\ 加入CLASSPATH。建立自己的JavaBean和package时,就放在这个目录中也不失为一种简易的方法。
B Pe'w W6OM0下面介绍一个简单的JavaBean框架。用文本编辑器创建一个文本文件helloWorld.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目录下,其内容如下:
fuCITpCK,M0
c?3admz@051Testing软件测试网vfap4EU6zk i5`
package test;
Vje;K[0public class helloWorld {
;p?l`Lu[@DH/i+o0    public String name = "My first bean";
E,QVq{|L(Ah0    public String getHi()51Testing软件测试网e ksZH `~\
    {51Testing软件测试网,yg/v3?IaZ K
return "Hello from " + name;
2Pfb1c\_#|]0    }   
q#V!Pcz'Y~0}51Testing软件测试网 O cQh2sDg0L

rFmn4u N wP+T)w051Testing软件测试网6ZjJ{yV

$c5R Q1N]_&\ j0helloWorld.java编辑好后,在DOS状态下,进入目录\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\,用JDK的javac命令编译helloWorld.java如下:51Testing软件测试网%D%]] a/dx:x sAB
javac helloWorld.java
s'Z _r(Dg']W^0注意,Java是区分大小写的,在程序中,编译命令行中字母的大小写都不能写错。编译成功就表示建立了一个JavaBean。下面看如何在JSP中使用这个JavaBean。用文本编辑器创建一个文本文件hi-bean.jsp,并保存在\jswdk-1.0.1\webpages\test目录下,其内容如下:
/Eik+iUO(i0Z051Testing软件测试网Rz/nVd ^8WJ^
〈html>
J r/M5E5p@%k0〈head>51Testing软件测试网-QRA#c%`1Ww:l!_
〈title>JavaBean 试验〈/title>
&FeG7VjvW)?G9? o!t0〈/head>51Testing软件测试网g7\9e m:l'q^!d*F
〈body>
U2NRG7s] ove&I b0〈jsp:useBean id="helloBean" scope="session" class="test.helloWorld" />
A]#[T@%]/k0〈%= helloBean.getHi() %>51Testing软件测试网-z)N2U:?&G(Yr$m
〈hr>
QB(n gA/zI{0〈%51Testing软件测试网] k-h&QCwge
helloBean.name = "JSP";
cq9ce/GsJ"w s0out.print(helloBean.getHi());
p!w~)}'F/M@0%>
BX+|!O:@:h2z0〈/body>51Testing软件测试网/XS Wz4J6}&M6ct
〈/html>
qj7JR2b]N^051Testing软件测试网 zX y @?%pF*`
51Testing软件测试网w:YNT,};C
在JSP网页中,使用 〈jsp:useBean ... />语法来创建JavaBean对象,并命名为helloBean。读者可从这个简单的例子中看出设置、获取JavaBean属性,以及调用JavaBean方法的做法。在浏览器的地址栏中键入http://localhost:8080/test/hi-bean.jsp,得到结果如图3所示。注意,如果修改和重新编译了JavaBean程序,则需要关闭和重新启动JSWDK的Web服务器以后修改的结果才会有效。如果仅仅修改JSP文件,则不用重新启动JSWDK的Web服务器。
RJv!g)wm4y%ANL0虽然,这仅仅完成了一个非常简单的JavaBean框架,但是遵循这个框架可以设计出多种多样的JavaBean。例如,从JSP中访问数据通常就是通过JavaBean来实现的。51Testing软件测试网Q }iDA3ny9Hx
七、 数据库连接
3N;xMB/V/q:X:`0
:pk'J8[Gn0数据库连接对动态网站来说是最为重要的部分,Java中连接数据库的技术是JDBC(Java Database Connectivity)。很多数据库系统带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等等操作。Sun公司还开发了JDBC-ODBC bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MS SQL Server和MS Access等数据库。下面介绍如何用Access实现一个动态FAQ(常见问题及答案)网站。首先建立一个Access数据库faq.mdb,其中的表faqs有字段id(自动增量型,并设为主关键字)、subject(文字型,长度200)、answers(备注型)。这个表中可以存放一些编程知识的常见问题及答案,51Testing软件测试网D+j.y3n2Ct
然后,在Control Panel(控制面板)的ODBC Datasource模块中加入System DSN,取名faq,并指向faq.mdb。 创建一个JavaBean,名为faq.java,并保存在\jswdk-1.0.1\webpages\WEB-INF\jsp\beans\test目录下。faq.java 的内容如下:
N1Be%`W3q051Testing软件测试网3}~KVu~/a

/y'[5R yv0package test;51Testing软件测试网Z-v)B'rR6H4_{
import java.sql.*;51Testing软件测试网,iA#@DWH } S
51Testing软件测试网}%Q?w$YPVw
public class faq {
2Lr d7G jW Y@/spC0String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";51Testing软件测试网US x"YY7Gz @N2c
    String sConnStr = "jdbc:odbc:faq";51Testing软件测试网}z Mn.^q
    Connection conn = null;
_8j` h4_ X.}E_0    ResultSet rs = null;
0v8Xii3^3C[MXq0  51Testing软件测试网3V zO b"r?
    public faq() {51Testing软件测试网X&_fGI
try {
N#i3t8s?9q8_U0            Class.forName(sDBDriver);   51Testing软件测试网e*?:j]N*^Zt h.o
}
rP,W,}3w)fou0catch(java.lang.ClassNotFoundException e) {
T~Kh6N#s K4?%W7p0System.err.println("faq(): " + e.getMessage());
6_ Uxqq,i8]e0}
D9F~7`Avm5H0    }51Testing软件测试网8V^-F;~(\!^Y"}O
51Testing软件测试网rS/Wd} u^ e s
    public ResultSet executeQuery(String sql) {51Testing软件测试网 k7J^r1_ D k$M
  rs = null;51Testing软件测试网t.D"}@({U `/M|
        try {
)`ao5Qr[`k:U0conn = DriverManager.getConnection(sConnStr);       
i UW$upP]0        Statement stmt = conn.createStatement();
L3aPu0H]0        rs = stmt.executeQuery(sql);51Testing软件测试网(k3?w YwF~
        }51Testing软件测试网 j"H*|l;\.K~
        catch(SQLException ex) {     51Testing软件测试网zc3XK;i-r9t8H&@
System.err.println("aq.executeQuery: " + ex.getMessage());
0@dwR/V#tuv0        }51Testing软件测试网5Ij(p6S2a
        return rs;51Testing软件测试网o9|)` d,T.k:[7pZ
    }51Testing软件测试网([Gn)v4h$_8Gx H:{
    }
e BM%E3Y0e d{v1?'u0    用上一节介绍的方法编译faq.java以后,在\jswdk-1.0.1\webpages\test目录下创建JSP文件faq.jsp,其内容如下:
w k3g;ver}c051Testing软件测试网:Th{'wrG
〈html>51Testing软件测试网Z re6d%zy9{
〈head>51Testing软件测试网!Icf)t0ic&Gw J
〈meta http-equiv="Content-Type" content="text/html; charset=gb2312">
x-g1jFK)e{tV0〈title>我的FAQ !〈/title>51Testing软件测试网v6FhR+DC \8x
〈/head>51Testing软件测试网Cng8j8g4T3WUP
〈body>
y P2Kmqx'[ [.j0〈p>〈b>这是我的FAQ!〈/b>〈/p>51Testing软件测试网+~pob&i\|!m,z D
〈%@ page language="java" import="java.sql.*"  %>51Testing软件测试网D,H#Y@"nfOX
〈jsp:useBean id="workM" scope="page" class="test.faq" />
1w-{8[ f3~9K:@0〈%
;K]z+?H}aI0    ResultSet RS = workM.executeQuery("SELECT * FROM faqs");51Testing软件测试网g k1H hB8BXR)c
    String tt;
3A5^\:e9i{7JW0       while (RS.next()) {
KO6C9O U}0       tt = RS.getString("Answer");
He2wxl*X0       out.print("〈LI>" + RS.getString("Subject") + "〈/LI>");
K)r{q.C4N0       out.print("〈pre>" + tt + "〈/pre>");
b^;`aX {?k h0}51Testing软件测试网W9I/JkL&U,`
    RS.close();
o!@%S"W F^Q0%>
|\\epH:\051Testing软件测试网,OB ]2M,L$r1s

6{X3b|kiFn.j0在浏览器的地址栏中键入http://localhost:8080/test/faq.jsp,faq.jsp调用JavaBean,从数据库中读出内容并输出.
"Sl0n0aAoBX [f,TwS/S0限于篇幅,本文不能列举JSP-JavaBean-JDBC/ODBC-数据库的复杂例子,读者可以从本文最后所推荐的网址中找到并下载到数据库连接范例。51Testing软件测试网P q6dq3H
八、 技术分析51Testing软件测试网yWP.Oy({e
Microsoft 公司的 ASP 技术也是动态网页开发技术。JSP和ASP从形式上非常相似,ASP程序员一眼就能认出〈% %>以及〈%= %>。但是深入探究下去会发现它们很多的差别,其中最主要的有以下三点:
6L!ZTP3N9A+sB/j'd0
/U0C!W,ey01、 JSP的效率和安全性更高
,y$rmg n4bE_0ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高。另外,IIS的漏洞曾使得许多网站源程序大曝光,包括笔者以前用ASP开发的网站,ASP程序全部被人下载了去。51Testing软件测试网.o1g(m3ua%vh#}
JSP在执行以前先被编译成字节码 (byte code),字节码由Java虚拟机(Java Virtual Machine)解释执行,比源码解释的效率高;服务器上还有字节码的Cache机制,能提高字节码的访问效率。第一次调用JSP网页可能稍慢,因为它被编译成Cache,以后就快得多了。同时,JSP源程序不大可能被下载,特别是JavaBean程序完全可以放到不对外的目录中。51Testing软件测试网3E"S%f{9D+f3j0m E
51Testing软件测试网 ~;Sj,@+CBoDdP
2、 JSP的组件 (Component) 方式更方便51Testing软件测试网k9k5m,R7V/J9n
ASP通过COM来扩充复杂的功能,如文件上载、发送email以及将业务处理或者复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBean实现了同样的功能扩充。51Testing软件测试网r L`RJ4z,jps
在开发方面,COM的开发远比JavaBean复杂和繁琐,学会ASP不难,但学会开发COM可不简单。而JavaBean就简单多了,从本文上述示例中可以看出开发JavaBean很方便。
C6OYe*\0I9D G0在维护方面,COM必须在服务器上注册,如果修改了COM程序,就必须重新注册,甚至必须关机和重新启动。JavaBean则不需要注册,放在CLASSPATH包含的目录中就行了。如果JavaBean进行了修改,则JSWDK和Tomcat现在还需要关闭和重新运行(但不是关机),但开发者已经许诺将在以后的版本中做到不需要关闭服务器。
R4JVz^A([$W Z0另外JavaBean是完全的OOP,可以针对不同的业务处理功能方便地建立一整套可重复利用的对象库,例如用户权限控制、email自动回复等等。
0c?$W@0N.L&@$g051Testing软件测试网8kI2o Ea@8y
3、 JSP的适应平台更广51Testing软件测试网4[#S ~uM5ER2K!]8_
ASP目前仅适用于NT和IIS。虽然Unix下有ChiliSoft的插件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的组合来扩充,Unix下的COM实现起来非常困难。
Dlpxe-X:?0JSP则不同,几乎所有平台都支持Java,JSP+JavaBean可以在所有平台下通行无阻。NT下IIS通过一个插件,例如JRUN(http://www3.allaire.com/products/jrun/)或者ServletExec(http://www.newatlanta.com/),就能支持JSP。著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的运行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。51Testing软件测试网AF8z]&P"p
从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。笔者将在NT下实验的JSP网页原封不动地拿到Linux下就运行起来了,感觉非常满意。51Testing软件测试网n7QVl4K8m

TAG: JSP 编程基础

 

评分:0

我来说两句

Open Toolbar