什么是servlet ?
一個
servlet
就是
Java
編
程
語
言中的一個
類
,
是用
Java
編
寫的
Server
端程序
.
客戶機提交
”
請求
”
到服務器
,
服務器中的
servlet
對請求進行處理
,
將處理的結果反饋回客戶機
(
即
”
響應
”
客戶機的請求
),
這就是
servlet
在
“
請
求
-
響
應
”
編
程模型
中扮演的角色
,
它被用來
擴
展服
務
器的性能
。服
務
器
上
駐
留著可以通
過
“
請
求
-
響
應
”
編
程模型來
訪問
的
應
用程序。
雖
然
servlet
可以
對
任何
類
型的
請
求
產
生響
應
,但通常只用來
擴
展
Web
服
務
器
中
的
應
用程序
。
編寫并運行你的Servlet!
當一個servlet已經寫好怎樣來運行測試呢?下面通過一個例子詳細的說說,這樣會有一個感性的把握。我用的運行環境是Tomcat5.0
首先我們來寫一個最簡單的servlet: 命名為HelloServlet.java
package?test;?
import?java.io.*;
import?javax.servlet.*;
import?javax.servlet.http.*;
public?class?HelloServlet?extends?HttpServlet{
?public?void?doGet(HttpServletRequest?request,HttpServletResponse?response)throws?ServletException,IOException{
?response.setContentType("text/html;charset=UTF-8");
?response.setCharacterEncoding("UTF-8");
?
?PrintWriter?out=response.getWriter();
?out.println("<HTML>");
?out.println("<BODY>");
?out.println("<p>Hello!這是我的第一個Java?Servlet程序。</p>");
?out.println("</BODY>");
?out.println("</HTML>");
?}
}
把編譯好的HelloServlet.class文件放到\Tomcat文件夾\webapps\ourappfiles\WEB-INF\classes\test的文件夾下。
接著編寫我們的web.xml文件。
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?web-app?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"?"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
?<servlet>
??<servlet-name>helloservlet</servlet-name>
??<servlet-class>test.HelloServlet</servlet-class>
?</servlet>
?<servlet-mapping>
??<servlet-name>helloservlet</servlet-name>
??<url-pattern>/Hello</url-pattern>
?</servlet-mapping>
</web-app>
把編寫好的web.xml文件放到\Tomcat文件夾\webapps\ourappfiles\WEB-INF下。
好了,現在萬事俱備,就差啟動Tomcat運行我們的Servlet了。
在IE地址欄中輸入http://localhost:8080/ourappfiles/Hello,就可以看到結果了。
以上就是運行Servlet的幾個步驟。
通過這個例子可以看出純粹的Servlet編程的缺點.所有的內容------甚至是基本的HTML格式------都必須由Servlet輸出,你不得不在Servlet中放置大量的print語句來結束,唯一的目的就是向用戶返回內容.另外,甚至最簡單的HTML格式變化都必須在JAVA源代碼中解決,這意味著非JAVA開發人員不能進行WEB站點的設計.
為了克服上述缺點, JavaServer Pages(JSP)應運而生. JSP表面上看是"嵌入了Java 的HTML", 而實際上JSP是"嵌入了HTML的Java Servlet ". 要明白這一點,需要了解一下JSP是如何響應請求的.
當瀏覽器向服務器請求一個JSP頁面(A.JSP)時, 源頁面(A.JSP)通過轉換器(在TOMCAT中,這個轉換器叫做Jasper)被轉換成一個Java類(如:A_jsp.java),該類繼承于org.apache.jasper.runtime.HttpJspBase基類,而HttpJspBase實現了HttpServlet接口。可見,JSP在運行前首先被編譯為一個Servlet, 這個Servlet對請求進行處理,將結果內容發送回客戶端.所以說, JSP是"嵌入了HTML的Java Servlet ", 其本質就是Servlet.
如果將上面的servlet程序中的doGet方法寫成下面的樣子:
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
????????????throws?ServletException,?IOException?{
????????response.setContentType("application/vnd.ms-excel");
????????PrintWriter?out?=?response.getWriter();
????????out.println("\tQ1\tQ2\tQ3\tQ4\tTotal");
????????out.println("Apples\t78\t87\t92\t29\t=SUM(B2:E2)");
????????out.println("Oranges\t77\t86\t93\t30\t=SUM(B3:E3)");
????}?
運行后,就可以輸出一個excel文件啦!
附: 對
Content-type的詳細說明:
Content-type?的說明?<?php

$mimetypes?=?array(
????'ez'????????=>?'application/andrew-inset',
????'hqx'????????=>?'application/mac-binhex40',
????'cpt'????????=>?'application/mac-compactpro',
????'doc'????????=>?'application/msword',
????'bin'????????=>?'application/octet-stream',
????'dms'????????=>?'application/octet-stream',
????'lha'????????=>?'application/octet-stream',
????'lzh'????????=>?'application/octet-stream',
????'exe'????????=>?'application/octet-stream',
????'class'????????=>?'application/octet-stream',
????'so'????????=>?'application/octet-stream',
????'dll'????????=>?'application/octet-stream',
????'oda'????????=>?'application/oda',
????'pdf'????????=>?'application/pdf',
????'ai'????????=>?'application/postscript',
????'eps'????????=>?'application/postscript',
????'ps'????????=>?'application/postscript',
????'smi'????????=>?'application/smil',
????'smil'????????=>?'application/smil',
????'mif'????????=>?'application/vnd.mif',
????'xls'????????=>?'application/vnd.ms-excel',
????'ppt'????????=>?'application/vnd.ms-powerpoint',
????'wbxml'????????=>?'application/vnd.wap.wbxml',
????'wmlc'????????=>?'application/vnd.wap.wmlc',
????'wmlsc'????????=>?'application/vnd.wap.wmlscriptc',
????'bcpio'????????=>?'application/x-bcpio',
????'vcd'????????=>?'application/x-cdlink',
????'pgn'????????=>?'application/x-chess-pgn',
????'cpio'????????=>?'application/x-cpio',
????'csh'????????=>?'application/x-csh',
????'dcr'????????=>?'application/x-director',
????'dir'????????=>?'application/x-director',
????'dxr'????????=>?'application/x-director',
????'dvi'????????=>?'application/x-dvi',
????'spl'????????=>?'application/x-futuresplash',
????'gtar'????????=>?'application/x-gtar',
????'hdf'????????=>?'application/x-hdf',
????'js'????????=>?'application/x-javascript',
????'skp'????????=>?'application/x-koan',
????'skd'????????=>?'application/x-koan',
????'skt'????????=>?'application/x-koan',
????'skm'????????=>?'application/x-koan',
????'latex'????????=>?'application/x-latex',
????'nc'????????=>?'application/x-netcdf',
????'cdf'????????=>?'application/x-netcdf',
????'sh'????????=>?'application/x-sh',
????'shar'????????=>?'application/x-shar',
????'swf'????????=>?'application/x-shockwave-flash',
????'sit'????????=>?'application/x-stuffit',
????'sv4cpio'????=>?'application/x-sv4cpio',
????'sv4crc'????=>?'application/x-sv4crc',
????'tar'????????=>?'application/x-tar',
????'tcl'????????=>?'application/x-tcl',
????'tex'????????=>?'application/x-tex',
????'texinfo'????=>?'application/x-texinfo',
????'texi'????????=>?'application/x-texinfo',
????'t'????????????=>?'application/x-troff',
????'tr'????????=>?'application/x-troff',
????'roff'????????=>?'application/x-troff',
????'man'????????=>?'application/x-troff-man',
????'me'????????=>?'application/x-troff-me',
????'ms'????????=>?'application/x-troff-ms',
????'ustar'????????=>?'application/x-ustar',
????'src'????????=>?'application/x-wais-source',
????'xhtml'????????=>?'application/xhtml+xml',
????'xht'????????=>?'application/xhtml+xml',
????'zip'????????=>?'application/zip',
????'au'????????=>?'audio/basic',
????'snd'????????=>?'audio/basic',
????'mid'????????=>?'audio/midi',
????'midi'????????=>?'audio/midi',
????'kar'????????=>?'audio/midi',
????'mpga'????????=>?'audio/mpeg',
????'mp2'????????=>?'audio/mpeg',
????'mp3'????????=>?'audio/mpeg',
????'aif'????????=>?'audio/x-aiff',
????'aiff'????????=>?'audio/x-aiff',
????'aifc'????????=>?'audio/x-aiff',
????'m3u'????????=>?'audio/x-mpegurl',
????'ram'????????=>?'audio/x-pn-realaudio',
????'rm'????????=>?'audio/x-pn-realaudio',
????'rpm'????????=>?'audio/x-pn-realaudio-plugin',
????'ra'????????=>?'audio/x-realaudio',
????'wav'????????=>?'audio/x-wav',
????'pdb'????????=>?'chemical/x-pdb',
????'xyz'????????=>?'chemical/x-xyz',
????'bmp'????????=>?'image/bmp',
????'gif'????????=>?'image/gif',
????'ief'????????=>?'image/ief',
????'jpeg'????????=>?'image/jpeg',
????'jpg'????????=>?'image/jpeg',
????'jpe'????????=>?'image/jpeg',
????'png'????????=>?'image/png',
????'tiff'????????=>?'image/tiff',
????'tif'????????=>?'image/tiff',
????'djvu'????????=>?'image/vnd.djvu',
????'djv'????????=>?'image/vnd.djvu',
????'wbmp'????????=>?'image/vnd.wap.wbmp',
????'ras'????????=>?'image/x-cmu-raster',
????'pnm'????????=>?'image/x-portable-anymap',
????'pbm'????????=>?'image/x-portable-bitmap',
????'pgm'????????=>?'image/x-portable-graymap',
????'ppm'????????=>?'image/x-portable-pixmap',
????'rgb'????????=>?'image/x-rgb',
????'xbm'????????=>?'image/x-xbitmap',
????'xpm'????????=>?'image/x-xpixmap',
????'xwd'????????=>?'image/x-xwindowdump',
????'igs'????????=>?'model/iges',
????'iges'????????=>?'model/iges',
????'msh'????????=>?'model/mesh',
????'mesh'????????=>?'model/mesh',
????'silo'????????=>?'model/mesh',
????'wrl'????????=>?'model/vrml',
????'vrml'????????=>?'model/vrml',
????'css'????????=>?'text/css',
????'html'????????=>?'text/html',
????'htm'????????=>?'text/html',
????'asc'????????=>?'text/plain',
????'txt'????????=>?'text/plain',
????'rtx'????????=>?'text/richtext',
????'rtf'????????=>?'text/rtf',
????'sgml'????????=>?'text/sgml',
????'sgm'????????=>?'text/sgml',
????'tsv'????????=>?'text/tab-separated-values',
????'wml'????????=>?'text/vnd.wap.wml',
????'wmls'????????=>?'text/vnd.wap.wmlscript',
????'etx'????????=>?'text/x-setext',
????'xsl'????????=>?'text/xml',
????'xml'????????=>?'text/xml',
????'mpeg'????????=>?'video/mpeg',
????'mpg'????????=>?'video/mpeg',
????'mpe'????????=>?'video/mpeg',
????'qt'????????=>?'video/quicktime',
????'mov'????????=>?'video/quicktime',
????'mxu'????????=>?'video/vnd.mpegurl',
????'avi'????????=>?'video/x-msvideo',
????'movie'????????=>?'video/x-sgi-movie',
????'ice'????????=>?'x-conference/x-cooltalk',
);?

posted on 2006-07-03 13:40
小言身寸 閱讀(999)
評論(0) 編輯 收藏 所屬分類:
JAVA相關技術