BeanSample.java (編譯要用 javac -d . BeanSample.java
-----------------------------------------------------------------------------
package javabean;
import java.io.*;
public class BeanSample{
alex0126 發表在 痞客邦 留言(0) 人氣(3,274)
本文將對目前最常用的四種動態網頁語言Perl(Practical Extraction and Report Language)、PHP(Hypertext Preprocessor)、ASP(Active Server Pages)、JSP(JavaServer Pages)進行一些技術性的比較。
Perl
Perl(Practical Extraction and Report Language)是一種很古老的腳本語言。最初的Web應用大多是用Perl編寫的,Perl很像C語言,使用非常靈活,對于文件操作和處理具有和C語言一樣的方便快捷。
alex0126 發表在 痞客邦 留言(0) 人氣(2,732)

Resin的使用和安裝(java)
一、Java Web伺服器選擇簡介 在實際進行java Web專案實施的時候,我們可以採用的商業java Web伺服器有Ibm WebSphere,Bea Web Logic 。這兩種伺服器功能齊全而強大,支援所有的java 服務容器標準,適合成品商業java Web應用的發佈。但是 這兩種伺服器是商業伺服器,價格昂貴,而且對系統資源要求極高。特別是Websphere 配置複雜,如果不配合 採用ibm Websphere Studio Application非常不適合開發。而且他們不同的版本對servlet.jar等javax組件和 jdk的要求不同。如Websphere 3.5所要求的servlet.jar 支援的是舊版本的javax.servlet.http.HttpSession 操作,不支援session.setAttribute() session.getAttribute()。 在開發或者學習過程中,有許多免費的輕型的Java Web伺服器可以供我們選用,如Tomcat,Resin,Orion等等。 他們使用都很方便,佔用資源也很少,適合開發中不斷的調試;還可以和Jbuilder這樣的集成開發工具集成使 用。根據實際開發中的情況來看,Jakata Tomcat 和Sun Java結合的最好,和其他應用伺服器配合使用可支援 完整的j2ee標準,應用也很廣泛。但是從Java 普遍存在的編碼問題來看,還是Resin 解決的最好。還有從使 用的角度講,個人認為Resin比Tomcat方便,而且Resin也可以結合Jbuilder6等ide使用。Resin強調使用Xml技 術,從Resin自己的HomePage使用xtp就可以看出來。 二、Resin的安裝和配置 Resin 可以在 http://www.caucho.com/download/index.xtp 免費下載和使用。使用Resin開發或者學習是免 費的,但是如果把Resin作為收費產品發佈是需要付費的。目前的版本是2.10。 下載Resin 時選擇Archive Versions 中的 windows.zip的普通安裝包resin-2.1.0.zip。 把該zip包解壓到任何目錄下麵,如d: esin。以下介紹都假設Resin安裝在d: esin下。進入d: esinin, 鍵入httpd,可以在命令行控制臺下運行Resin伺服器。此時彈出一個有start 和stop兩個Radio按紐和一close 按紐的對話方塊。在這裏可以看到Resin的運行資訊。這些資訊同時Resin可以在d: esinlog目錄下麵的 stdout.log 日誌檔中察看到。如: Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001) Copyright(c) 1998-2001 Caucho Technology. All rights reserved. Starting Resin on Wed, 23 Jan 2002 14:41:47 +0800 (CST) http listening to *:80 srun listening to haitaiserver:6802 點選stop,可以停止當前的Resin伺服器進程;再點選start,又可以開啟新的Resin伺服器進程。關閉該對話 框,則回到Command 控制臺的盤符提示狀態下。如果在nt4或者win2k環境下,需要把Resin當成服務,只需要 在Command控制臺的該目錄下,鍵入 httpd ?install,就可以在管理工具的服務下面看到新增了一條Resin Web Server的自動的服務。以後只要進入nt 4或者win2k,就可以啟動Resin服務。該服務也可以像其他服務一 樣設置成手動或者禁用狀態。注意有的時候在安裝完服務後,啟動Resin,並不能看到自己寫的Resin常式可以 被解析,流覽器顯示伺服器找不到錯誤。只要重新啟動win2k或者nt,就能解決該問題。 下面簡要介紹一下Resin伺服器的配置。Resin伺服器和大多數Java Web伺服器一樣,通過一個Xml檔配置。 進入d: esinconf目錄,打開resin.conf,這是一個xml格式的文本。 這裏面有很多標記,先查找到:<http-server>。在<http-server></http-server>標記對中的配置和resin的 Java Web 伺服器有關。找到<app-dir>,在<app-dir></app-dir>標記對中的表示resin的根,相當於Apache的 htdocs 或者 IIS 的wwwroot。Resin自帶http伺服器,但是也可以不使用它,採用Apache 或者 IIS做http服 務器。這個在下面段落中會提到。 再查找<http port=´8080´/>標記,它可以這樣配置<http host=´localhost´ port=´80´/>。host參數指定的 是伺服器,port指定的是http埠,默認是localhost和8080。還有<srun host=´localhost´ port=´6802´/> 標記。這個是jsp和java Servlet的引擎配置。一般默認就可以了,除非6802埠已經被別的程式佔用了。然 後,配置jdk。這個需要在classpath中設置。右鍵點擊我的電腦,在系統特性的高級標籤中,點擊環境變數, 在系統變數中新建一個環境變數,變數名為classpath,值為jdk所在的目錄;再新建另外一個環境變數,變數 名為path,值為javac.exe和java.exe所在的目錄(在jdk所在的目錄下麵的bin目錄下)。一般這樣子配置以 後,Resin就可以使用了。在d: esindoc中(假設你的<appdir></appdir>對中的名稱是doc,也就是根是 d:/resin/doc,而且你的<http host=´localhost´ port=´80´/>如左配置),隨便寫一個jsp檔,如可以寫 個test.jsp檔,內容為<%=1+2+3%>。然後,在流覽器中,鍵入http://localhost/test.jsp。如果你可以看 到流覽器顯示6,則表示Resin伺服器已經可以正常運行了。注意,修改配置後,一般重新啟動resin才能看到 變化。三、Resin使用簡介 使用Resin開發Java Web專案時,需要建立自己的WebApp。這裏不介紹Resin Cmp/Ejb的開發和使用,只介紹用 Resin開發普通的jspjava servlet項目。在這裏還要談到resin.conf的配置。Resin中的應用可以有2種方式 發佈:一是在Resin的目錄下發佈;二是打包成War發佈。 1、在Resin的目錄下發佈 在resin.conf中查找<web-app>標籤,該標籤表示一個web應用。 標籤中,id屬性表示該應用的Web路徑。如<web-app id=´/test´>,表示該應用在Web上訪問的時候應該用 http://hostname/test/來訪問。app-dir屬性表示該應用的實際路徑。如 <app-dir>d: esindoc est</app-dir>表示該應用在d: esindoc est目錄下麵。預設值為根下麵的和id 同名的目錄。Resin可以配置3種error-page:404錯誤也就是檔找不到錯誤頁;Exception違例頁;不能連接 java引擎頁。他們分別可以這樣子設置。 404檔找不到頁 <web-app id=´/app1´> <error-page error-code=´404´ location=´/file_not_found.jsp´/> </web-app> Exception 違例頁 <web-app id=´/foo´> <error-page exception-type=´java.lang.NullPointerException´ location=´/nullpointer.jsp´/> </web-app> 不能連接到srun Servlet引擎錯誤頁 該頁設置和應用無關,屬於伺服器的設置。 <http-server> <error-page exception-type=´connection´ location=´/missing_file.html´/> </http-server> classpath的設置 參見下麵的語句: <classpath id=´WEB-INF/classes´ source=´WEB-INF/src´ compile=´true´/> id參數的值表示classpath中編譯後的class的存放路徑;source參數的值表示classpath中java源代碼的存放 路徑;compile中的值可能是true或者false,表示是否由Resin的srun自動編譯java源代碼。Classpath的設置 一般和javaBean或者Servlet的使用有關。id的值表示javaBean的編譯好的包存放的根,source的值表示 javaBean的java源代碼存放的根。Servlet相同。 Servlet的設置 參見下麵的語句: <servlet-mapping url-pattern=´*.xtp´ servlet-name=´xtp´/> <servlet-mapping url-pattern=´*.jsp´ servlet-name=´jsp´/> <servlet-mapping url-pattern=´/servlet/*´ servlet-name=´invoker´/> 一般就是指定那些需要通過srun的解析。比如在這裏,把*.jsp改成*.jss,其他不變,那麼只要在訪問時遇到 *.jss的文件就和原來遇到*.jsp一樣處理。通過這個可以指定解析的引擎,如以下的配置: <servlet-mapping url-pattern=´*.xtp´ servlet-name=´com.caucho.jsp.XtpServlet´/> 在Servlet中,也可以指定servlet。如 <servlet servlet-name=´hello´ servlet-class=´test.HelloWorld´/> <servlet-mapping url-pattern=´/hello.html´ servlet-name=´hello´/> 在servlet-mapping中有個重要的參數case-sensitive 如果在windows上,最好配置成false,忽略大小寫,從 而和windows的約定一致。 Session的配置 參見如下的配置語句: <session-config> <session-max>4096</session-max> <session-timeout>30</session-timeout> <enable-cookies>true</enable-cookies> <enable-url-rewriting>true</enable-url-rewriting> <file-store>WEB-INF/sessions</file-store> </session-config> session-max :最大 session數量 session-timeout :session過期時間,以分鐘為單位。 是否允許cookie :指session是否採用cookies。如果採用cookies,流覽器必須支持session才能使用,發佈 時建議改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false, enable-url-rewriting應該設成true比較合適。 file-store :該配置指示伺服器是否把session作為檔存放在伺服器上。如果把該項注釋掉,則在你的 web-app目錄下的WEB-Inf/sessions目錄不保存序列化後的session物件。Session還有jdbc-store配置,對應 著把session通過jdbc永久保存在資料庫中。其實也就是會話變數的序列化後的保存和重新載入的物理實現。 在這裏session還支持了多伺服器的設置問題, 通過tcp-store參數設置。由於涉及到負載平衡的問題,在這裏不詳細敘述,只簡單寫一個例子: <http-server> <http id=´a´ port=´80´/> <srun id=´a´ host=´host-a´ port=´6802´/> <http id=´b´ port=´80´/> <srun id=´b´ host=´host-b´ port=´6802´/> <host id=´´> <web-app id=´´> <session-config> <tcp-store/> <always-load-session/> </session-config> </web-app> </host> </http-server> 這個例子表示session是按照tcp ring的方式傳遞。 temp-dir 的設置 temp-dir指的是應用的臨時目錄。也就是在javax.servlet.context.tempdir中用到的目錄。模認是應用目錄 下的WEB-INF mp目錄。 以上的設置都可以在<web-app>標籤對中設置,控制某個web應用的設置。 2、打包成War發佈 以下是介紹對如何在resin下使用已經打包成War的java Web應用進行發佈。 其實這個是最簡單也是最清晰的良好方法。在j2ee中,所有的項目都打包成ear發佈。其中,Web應用打包成 war,ejb應用打包成jar。在resin中,這些都可以直接部署。這裏我只對打包成war的Web應用的部署做介紹。 在resin.conf中,查找這個:<war-dir id=´webapps´/>。他表示war檔應該被拷貝的路徑。這裏指的是相對 於resin的安裝路徑,如以上的設置表示d: esinwebapps。只要重新啟動Resin就可以了。Resin會把該war自 動解包到webapps目錄下。你可以在command控制臺或者stdout.log中看到類似於 [2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的語句。這個 表示該Web應用是自動安裝的。只要這個應用是符合j2ee標準的Web應用,應該不會有問題。通過如上顯示的路 徑就可以訪問到這個應用。如果你到d: esinwebapps wtest中流覽,你會看到Resin已經為你生成了rwtest 目錄,下面是META-INF和WEB-INF還有你自己的JSPservlet 檔和目錄。是完全符合j2ee的結構的。你可以 在rwtest目錄下建立新的jspservlet,一樣可以被編譯和解析並運行的。在實際操作中,可以使用Jbuilder 或者 WebSphere等Ide工具進行集成調試和打包,非常的方便。 四、使用Resin進行java Web專案的開發和調試 這裏篇幅有限,不可能講太多,我只對實際中最有用的部分做介紹。 Resin中如果定義了錯誤頁,則出錯後最常見的一大串Exception不會被看到,直接跳轉到錯誤頁。所以建議開 發中先不設置錯誤頁。jsp錯誤中最常見的就是Nullpoint Exception,其次是名稱的拼寫錯誤。錯誤也可以在 Resin安裝目錄下的log目錄下的stderr.log中找到。通過對該log檔的分析可以看到很多有用的錯誤資訊。 在調試jsp的時候,如果定義了compile為true,jsp先被翻譯成Servlet的java檔,再被編譯成class檔。 可以在你自己的work目錄中找到該檔。java的名稱在Resin中是這樣子定義的:原先的jsp檔案名前加下劃線 ,再加上_jsp這個字樣。所以在java 應用中的命名不要以_jsp結尾,也不要出現中文名稱等字元;其實名稱 以_jsp為開頭也是不合法的。 關於java對多國語言的支援問題,在Resin中得到了很好的解決。以jsp為例,參考Resin自動生成的java Servlet文件。只要在任何的jsp檔的最開始處增加: <% @page c %> 中文問題就解決了。察看生成的Servlet原始檔案片斷: response.setContentType("text/html;charset=gb2312"; request.setCharacterEncoding("GB2312"; 以上為設置字元集 private static byte[] _jsp_string26; private static byte[] _jsp_string27; _jsp_string26 = " </table> <table class="type"> <tr> <td>".getBytes("GB2312"; _jsp_string27 = " </td><td> </tr> <!-- <tr> <td> ".getBytes("GB2312"); 以上是對頁面的顯示的編碼。其中,getBytes("gb2312")是靜態編碼,這是Resin為了解決某些環境下還是不 能正常顯示而設置的。在Resin的配置檔(/conf/resin.conf)中,可以通過設置<jsp precompile=´true´ static-encoding=´false´ recompile-on-error=´true´/>中的static-encoding屬性為true或者false,來控 制是否靜態編碼。其實在Resin容器的內部,所有的字元都是按照iso-8859-1來處理的。iso-8859-1是一個大 字元集,雖然中文的gb2312和8859在字的定義上有不同,但是編碼是包容了gb2312的。按照解決多國語言的方 法,在純英文平臺上用iso-8859-1處理內部編碼,而把字元的顯示推向用戶端的機器。所以這樣只要編碼是正 確的,在頁面上顯示中文就不存在問題。Tomcat3.2不方便的地方是Tomcat對資料庫的操作中文支援不好,需 要手動在java Bean或者Servlet中硬編碼。通過測試,在Resin中完全沒有這個問題。Tomcat4.0解決了這個問 題。不過個人習慣來講還是覺得resin在配置方面方便一些。 在Resin中可以自動解決引入的jar。這個在使用特殊的類或者第三方提供的開發包非常有用。方法非常簡單: 只要把該jar或者是zip拷貝到Resin安裝目錄下的lib目錄下面,重新啟動Resin,就可以了。如db2用到的 db2java.zip檔,只要輕鬆拷貝到d: esinlib中就可以了。 Resin提供了對Jbuilder的集成調試。可以到: http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免費下載到resin的jbuilder的ide擴展包。 然後,把該包該名成:resin-jbuilder.jar,拷貝到jbuilder6libext目錄下。然後,把Resin2.1解包安裝 在jbuilder6 esin-2.1目錄下,就可以了。打開任何的War項目,在project上點右鍵,選擇properties,選 擇Servers標籤。在原來的選擇框上,就可以看到多了一項Resin2.1。這樣子就可以象原來用tomcat一樣調試 jspservlet了,而且比Tomcat更方便。調試方法和用Tomcat調試一樣。五、其他問題 使用Resin可以和apache結合使用。也就是利用apache做http伺服器,而Resin做srun伺服器。可以參考 resinconfsamples目錄下的apache.conf。主要就是把 app-dir 設成 /usr/local/apache/htdocs(也就是 apache的root)。同時在apache 中的http.conf也做了相應的設置。Resin還提供了對該過程的自動安裝程式 ,運行resininsetup,你可以在彈處的對話方塊中選擇apache,這樣子就可以了。只要你曾經安裝過apache ,resin可以自己找到httpd.conf檔所在的路徑。 使用命令行方式啟動Resin,如果改動了Resin.conf,Resin會自己重新啟動適應新的配置。這個很適合初期安 裝時使用。 Resin對資料庫緩衝池的支援很好。在這裏,它提供了DBPool對緩衝池做了封裝。實際使用時,只要在 resin.conf這樣配置: <dbpool.sql> <id>ORCL</id> <driver>oracle.jdbc.driver.OracleDriver</driver> <url>jdbcracle:thin:@localhost:1521:SMTH</url> <!-- <url>jdbcracleci8:@SMTH</url> --> <user>scott</user> <password>tiger</password> <max-connections>5</max-connections> </dbpool.sql> 然後,在你的jsp或者servlet中就可以這樣子使用了: 先導入 com.caucho.sql.*包,然後如下直接得到連接: Connection conn = DBPool.getPool("ORCL").getConnection(); 個人建議不要如上使用連接池,還是按照ejb的方法用從Context中直接找到的DataSource物件中得到連接通用 性比較好。代碼也很簡單: Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”); Connection conn = ds.getConnection(); 在Resin中如下配置jdbc就可以了: <resource-ref> <res-ref-name>jdbc/EmployeeDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <init-param driver-name="com.caucho.jdbc.mysql.Driver"/> <init-param url="jdbc:mysql_caucho://localhost:3306/test"/> <init-param user="name"/> <init-param password="password"/> <init-param max-c/> <init-param max-idle-time="30"/> </resource-ref> 在Resin中conf中resin.conf中配置默認主頁就可以了: <welcome-file-list>index.jsp, index.html,index.xtp</welcome-file-list> 用Resin Web Server開發還是比較愉快的。只是沒有像We(嚴禁 blog 網址顯示)ic 或者WebSphere那樣子提供現成的管理控制臺而已。但是從穩定性和方便性來講,Resin個人認為比Tomcat要好很多。況且Resin還有提供 了resin-cmp 和 resin-ejb,功能更強大。 女人的美與男人的心 對一個年輕貌美女孩的追求,很能激發一個男人的進取心 古人雲:未見好學如好色者也 真知灼見 JSP標準語法 1、JSP的注釋語法: <%--comments--%> 其中,comments是你可以添加的任意文本注釋,但是不能使用“--%>”, 如果非使用不可,請用“--%\>” 實例: <%-- FileName:helloworld.jsp Author:rossini Date:2004-1-29 Note:顯示一個"Hello World!"信息 --%> <html> <head> <title>JavaServer Pages Sample-Hello World!</title> </head> <body> <% out.print("Hello World!"); %> </body> </html> 2、JSP的聲明語法: <%!declarations;... ;%> (a)在JSP中使用到的變數和函數必須事先聲明,並以分號“;”結尾 (b)在JSP聲明中允許一次聲明多個變數 (c)在JSP聲明中,不但可以聲明變數,還可以聲明函數或者自定義類 (d)你可以直接使用在include編譯指令中被包含進來的已經聲明的變數 和方法,不能在當前的JSP程式中對它們進行重新進行聲明;JSP聲 明的作用範圍是頁面層的,一個聲明只在一個頁面有效;如果想在 每個頁面都使用一些聲明,最好把他們寫在一個單獨檔裏面,然 後用include編譯指令或者是<jsp:include>操作指令包含進來 實例: <html> <head> <title>JavaServer Pages Sample-Declarations</title> </head> <body> <%!String msg="變數聲明";%> <H1><%=msg%></H1> </body> </html> 3、JSP運算式語法: <%=JAVA運算式%> JAVA運算式是一個值,轉換成字串後插入到頁面中,不能用分號(;) 來作為JAVA運算式的結束符。一個運算式可以變的很複雜,它可能由 多個合法的JAVA運算式組成,這些運算式執行順序是從左到右。如果 一個運算式的結果不能轉化為String類型,將會導致錯誤發生。 實例: <html> <head> <title>JavaServer Pages Sample-Declarations</title> </head> <body> <%!String msg="變數聲明";%> <H1><%=msg%></H1> </body> </html> 4、JSP程式段語法: <% 程式段%> (a)程式段中只能包含合法的JAVA語法的代碼,不允許出現HTML標記, JSP標記,JSP指令等元素。但是可以使用“<%”,“%>”標記,交錯 使用JAVA代碼、HTML標記。 (b)程式段中對變數的聲明最好進行初始化,否則有些伺服器可能會出錯。 實例: <html> <head> <title>JavaServer Pages Sample-dribs and drabs</title> </head> <body> <% String words="welcome!"; int font_size=0; for(int i=0;i<8;i++){ %> <FONT SIZE=<%=++font_size%>><%=words.charAt(i)%></FONT> <% } %> </body> </html>Resin的使用和安裝(4)5、JSP編譯指令PAGE: <%@ page language="java" //指出使用的語言是JAVA,這既是缺省的又是唯一合法選項 import="package.class1,...,package.classN" // 用於引入程式中需要使用的JAVA //套裝程式,多個包之間用逗號分割 c //制定輸出的MIME類型 errorPage="URL" //指定一個JSP頁面來處理任何當前頁面並未處理的意外錯誤 isErrorPage="true | false" //該屬性指示當前頁面是否可以作為其他頁面的錯誤處理 //頁面,預設值false isThreadSafe="true | false" //值為false表示Serverlet以單線程模式工作,值為true表示 //多個請求被一個Serverlet並行處理,預設值true session="true | false" //true表示session可用,false表示session不可用 buffer="size | none" //確定out對象輸出緩衝大小,默認大小為8KB autoflash="true | false" //預設值為true,表示當緩衝滿時將自動清空 extends="package.class" //指出將要生成的serverlet使用哪個超類 info="message" //定義當前JSP檔的一些相關資訊,如作者,功能描述等 %> 實例: <%@ page language="java" import="java.util.*" c %> <html> <head> <title>JavaServer Pages Sample-Page你好</title> </head> <body> <%=(new Date()).toLocaleString()%> </body> </html> 6、JSP編譯指令INCLUDE: <%@ include file="relativeURL" %> include指令用於在JSP檔轉換成Serverlet時引入一個靜態檔,這個檔可以是JSP 和HTML以及文字檔案等。許多網站的每個頁面都有一個同樣的導航條,為了避免重複 ,可以單獨編寫一個頁面來描述這個導航條,然後利用include指令把這個檔包含在 每個主頁面裏。不過這種方法有一個缺點,因為這個導航條是在頁面被編譯時插入的 ,如果導航條改變了,那麼每個包含這個導航條的頁面都必須重新編譯。因此,如果 導航條經常改變,應該使用jsp:include動作來實現。 實例: 主文件(index.jsp) <html> <head> <title>JavaServer Pages Sample-include</title> </head> <%@ page language="java" c %> <body> <H1>當前時間</H1> <%@ include file="time.html"%> </body> </html> 引入文件(time.html) <%=(new java.util.Date().toLocaleString())%> 7、JSP操作指令INCLUDE(此操作指令的中文參數傳入問題還沒有解決): <jsp:include page="relativeURL | <%=expression%>" flush="true"/> 或者 <jsp:include page="relativeURL | <%=expression%>" flush="true"> <jsp:param name="parameterName" value="parameterValue | <%=expression%>"/> </jsp:include> include動作的目的是把其他檔的正文插入到這個程式中來,在一定程度上重用代碼,過度使 用會降低執行效率。前面已經介紹過include指令,它是在jsp檔被編譯時引入文件,當被引入 檔做過修改,也不需要重新編譯主jsp檔。 page="relativeURL | <%=expression%>" 指定需要包含檔的相對路徑,可以使用jsp運算式 動態生成需要包含檔的相對路徑。 flush="true" 此屬性的值必須為true。 <jsp:param name="parameterName" value="parameterValue | <%=expression%>"/> 能為 引入檔傳遞參數。 實例: 主頁面 <%@ page language="java" c %> <html> <head> <title>Include Actions</title> </head> <body> <H1>帶參數引入頁面</H1> <jsp:include page="11.jsp" flush="true"> <jsp:param name="gr1" value="aaabbb"/> <jsp:param name="gr2" value="rossini"/> </jsp:include> </body> </html> 引入頁面 <% String gr1=request.getParameter("gr1"); String gr2=request.getParameter("gr2"); out.print(gr1); out.print(gr2); %> 8、JSP操作指令FORWARD: <jsp:forward page="relativeURL | <%=expression%>"/> 或者 <jsp:forward page="relativeURL | <%=expression%>"> <jsp:param name="parameterName" value="parameterValue | <%=expression%>"/> </jsp:forward> 改動作把請求轉到另外的頁面,</jsp:forward>後面的代碼將不能執行,因為已經轉到其他 頁面上去了,所以後面的代碼不會被執行的。 實例: 主頁面 <%@ page language="java" c %> <html> <head> <title>Forward Actions</title> </head> <body> <jsp:forward page="11.jsp"> <jsp:param name="gr1" value="rossini"/> <jsp:param name="gr2" value="126263"/> </jsp:forward> </body> </html> 轉到頁面 <% String gr1=request.getParameter("gr1"); String gr2=request.getParameter("gr2"); out.print(gr1+"#"); out.print(gr2); %> 9、JSP操作指令PLUGIN <jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName" name="instanceName" archive="URIToArchive,..." align="bottom | top | middle | left | right" height="displayPixels" width="displayPixels" hspace="leftRightPixels" vspace="bottomTopPixels" jreversion="JREVersionNumber | 1.1" nspluginurl="URLToPlugin" iepluginurl="URLToPlugin" > <jsp:params> <jsp:param name="parameterName" value="paramValue | <%=expression%>"/> </jsp:params> <jsp:fallback> text massage for user </jsp:fallback> </jsp:plugin> jsp:plugin動作用來根據流覽器的類型,插入通過java插件運行Applet所必須的OBJECT 或embed元素。 type="bean | applet"插件將執行的物件類型,用戶必須在Bean和Aplet中指定一個。 code="classFileName"插件將執行的java類檔案名稱,在名稱中必須包含副檔名。 codebase="classFileDirectoryName"插件將執行的java類檔的路徑,默認與JSP檔 在同一個文件夾下 name="instanceName"Bean或Applet的實例名稱,使得被同一個JSP檔調用的Bean或 Applet之間的通信成為可能 archive="URIToArchive,..."以逗號分隔的路徑名列表,這些路徑名用於預裝一些將要使用 的class,這會提高applet的性能。 實例: <%@ page language="java" c %> <html> <title>Plugin 實例</title> <body bgcolor="white"> <h3> 當前的時間是 : </h3> <jsp:plugin type="applet" code="Clock2.class" codebase="/guorui" name="time1" jreversion="1.2" width="160" height="150" > <jsp:fallback> Plugin tag OBJECT or EMBED not supported by browser. </jsp:fallback> </jsp:plugin> </body> </html> 10、jsp:useBean操作指令: <jsp:useBean id="beanInstanceName" scope="page | request | session | application" class="package.class"/> 該動作用來裝載一個將在JSP頁面中使用的JavaBean,其含義是創建一個package.class的 實例,然後把它綁定到變數ID上,並使用scope定義Bean的作用範圍。 獲得Bean的實例之後,要修改或獲取Bean的屬性就變得很重要 <jsp:setProperty name="beanInstanceName" property="*" | property="propertyName" | property="propertyName" param="paramName" | alex0126 發表在 痞客邦 留言(0) 人氣(10,881)

今天在練習JSTL的時候
發現不能用
原來是要另外安裝才可以
首先到
http://jakarta.apache.org/site/downloads/index.html然後點選Taglibs
alex0126 發表在 痞客邦 留言(0) 人氣(1,180)
此配置适用于
Resin2.x和
Resin3.x版本。运行时需要在每个
project目录下放置一个
resin.conf文件,由于
Resin2.x和
Resin3.x版本的配置文件不同,所以需要两个文件,
resin.conf文件用于启动
resin2.x,
resin30.conf用于启动
resin3.x。
alex0126 發表在 痞客邦 留言(0) 人氣(628)
1、配置Resin的conf
拷贝一份resin安装目录conf目录下的resin.conf,命名为test.conf
编辑其中的内容,默认也可,在其后面的</host>上面添加一行:
<web-app id='/myprojectName' document-directory="d:\myprojectName\webapp"/>
这是最简配置,详细参数自己可以定制。
alex0126 發表在 痞客邦 留言(0) 人氣(351)
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
// print session info
Date created = new Date(session.getCreationTime());
Date accessed = new Date(session.getLastAccessedTime());
out.println("ID " + session.getId());
out.println("Created: " + created);
out.println("Last Accessed: " + accessed);
// set session info if needed
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
// print session contents
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println(name + " = " + value);
}
}
}
alex0126 發表在 痞客邦 留言(0) 人氣(330)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CookieExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// print out cookies
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
String name = c.getName();
String value = c.getValue();
out.println(name + " = " + value);
}
// set a cookie
String name = request.getParameter("cookieName");
if (name != null && name.length() > 0) {
String value = request.getParameter("cookieValue");
Cookie c = new Cookie(name, value);
response.addCookie(c);
}
}
}
alex0126 發表在 痞客邦 留言(0) 人氣(211)
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestParamExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Request Parameters Example</title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Request Parameters Example</h3>");
out.println("Parameters in this request:<br>");
if (firstName != null || lastName != null) {
out.println("First Name:");
out.println(" = " + HTMLFilter.filter(firstName) + "<br>");
out.println("Last Name:");
out.println(" = " + HTMLFilter.filter(lastName));
} else {
out.println("No Parameters, Please enter some");
}
out.println("<P>");
out.print("<form action=\"");
out.print("RequestParamExample\" ");
out.println("method=POST>");
out.println("First Name:");
out.println("<input type=text size=20 name=firstname>");
out.println("<br>");
out.println("Last Name:");
out.println("<input type=text size=20 name=lastname>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse res)
throws IOException, ServletException
{
doGet(request, response);
}
}
alex0126 發表在 痞客邦 留言(0) 人氣(240)
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestHeaderExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getHeader(name);
out.println(name + " = " + value);
}
}
}
alex0126 發表在 痞客邦 留言(0) 人氣(148)