?? servlet-into.htm
字號:
<html><!-- #BeginTemplate "/Templates/more.dwt" -->
<head>
<!-- #BeginEditable "doctitle" -->
<title>csdn_了解Servlet</title>
<!-- #EndEditable -->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<STYLE type=text/css>
A:link {
COLOR: #000000; FONT-FAMILY:verdana,宋體,新宋體; TEXT-DECORATION: none
}
A:visited {
COLOR: #333399; FONT-FAMILY:verdana,宋體,新宋體; TEXT-DECORATION: none
}
A:active {
COLOR: #ff0000; FONT-FAMILY:verdana,宋體,新宋體; TEXT-DECORATION: none
}
A:hover {
COLOR: black; TEXT-DECORATION: underline
}
BODY {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TH {
FONT-SIZE: 9pt
}
TD {
FONT-SIZE: 9pt
}
TD.page {
COLOR: #000000; FONT-SIZE:9pt; LETTER-SPACING: normal; LINE-HEIGHT: 150%; WORD-SPACING: 2em
}
TD.title {
COLOR: #000000; FONT-FAMILY:verdana,宋體,新宋體
}
TD.detail {
COLOR: #9966ff; FONT-FAMILY:verdana,宋體,新宋體
}
</STYLE>
</head>
<body bgcolor="#FFFFFF" text="#000000" >
<div align="center"></div>
<table width="700" border="0" align="center">
<tr>
<table width="700" border="1" cellpadding="1" cellspacing="0" bordercolorlight="#9898ba" bordercolordark="#000000">
</table>
<table width="700" cellspacing="0" cellpadding="0" bgcolor="9898ba" border="0">
<tr valign="middle"></tr>
</table>
<div align="center"><b></div>
<br>
<table width="700" border="0">
<tr>
<td width="20"> </td>
<td colspan="2">
<div align="center">
<h3><b><!-- #BeginEditable "5" -->
<h3><font face="Verdana, Arial, Helvetica, sans-serif" >了解Servlet</font></h3>
<!-- #EndEditable --></b></h3>
</div>
</td>
<td width="20"> </td>
</tr>
<tr>
<td width="20"> </td>
<td colspan="2"><!-- #BeginEditable "6" --><br>
<p>什么是servlets <br>
·明白Servlet API以及與CGI相比較 <br>
·知道在servlet的主要的類的使用。 <br>
·能夠實現簡單的servlets </p>
<p><br>
·什么是servlet? <br>
·一般地,服務器端Java應用程序擴展了Web服務器的功能。 <br>
.在服務器上可以完整地運行 <br>
.沒有必要下載到瀏覽器 <br>
.代替CGI腳本 <br>
·Servlets的優勢在于: <br>
.方便性與靈活性 <br>
.安全性 <br>
.執行效率 </p>
<p>安全性優勢 <br>
·在服務器的范圍中調用 <br>
·能夠約束servlet的調用 <br>
·在安全體系中能夠成為單一(全局)信號的一部分 </p>
<p><br>
性能優勢 <br>
·Run in the same context as application server <br>
·執行并且駐留在內存中 <br>
·有請求時提前被裝入或裝入 <br>
·通過HTTP請求維持對話 <br>
·減輕后置系統的負擔 <br>
·多線程 <br>
·可伸縮于多處理器以及多機種系統(IBM WebSphere Performance Pack) </p>
<p>一般的Servlet調用 <br>
·客戶建立一個Web服務請求,命名為一個Servlet,就如同URL的一部分 <br>
·Web服務器向由一個servlet類的對象所定位的Servlet引擎發送一個請求 <br>
·servlet引擎調用一個Servlets服務方法: </p>
<p>瀏覽器(客戶)<====URL請求=====>Web服務器<===>servlet對象(應用程序服務器)
</p>
<p><br>
Java Servlet 應用程序接口API <br>
·JSDK包括了兩個包: <br>
javax.servlet <br>
javax.servlet.http </p>
<p>javax.servlet.Servlet <br>
| 實現 <br>
javax.servlet.GenericServlet A <br>
| <br>
javax.servlet.http.HttpServlet A </p>
<p>Servlet <br>
·表現一項服務 <br>
·一般通過URL請求 <br>
·Servlets通過應用程序服務器被裝入 <br>
·在服務的初始化階段(如果是預裝入) <br>
·在客戶端首次請求時 <br>
·在servlet重新裝入時 </p>
<p>servlet的生命周期 <br>
·在裝入時init()方法被調用 <br>
·僅這一次 <br>
·當每個客戶發出請求時,service()方法被調用 <br>
·當它被卸載時,destroy()方法被調用 </p>
<p>init() <br>
| <br>
service() <br>
| <br>
destroy() </p>
<p><br>
HTTP Servlet <br>
·一個HTTP-specific請求處理器 <br>
·加入兩個HTTP-specific的方法 <br>
·doGet()--處理一個GET請求(URL) <br>
·doPost()--處理一個POST請求(HTML) <br>
·子類代替了這兩個信息并且可能代替init()和destroy() <br>
·doGet()和doPost()作這些工作并且被service()調用 </p>
<p><br>
請求與響應 <br>
·service(),doGet()和doPost()方法都具體有兩個參數: <br>
·HttpServletRequest--提供請求數據(參數)HttpSession信息等訪問。 <br>
·HttpServletResponse--提供允許servelt向發出請求的客戶的響應的服務 <br>
·大多數servlet程序是用來讀出請求并且寫入響應 </p>
<p><br>
HttpServletResponse <br>
·向客戶提供通訊的通道 <br>
·允許servlet返回內容并且/或者是錯誤 <br>
·設置內容頭(類型,長度......) <br>
·重定向服務器以返回一個指的URL </p>
<p>應答協議 <br>
·getWriter() <br>
·返回一個輸出的PrintWriter <br>
·setContentType(String type) <br>
·為這個響應設置內容的類型 <br>
·類型是MIME型 <br>
·sendRedirect(String anURL) <br>
·重定向瀏覽器到一個新的URL </p>
<p><br>
簡單的servelt </p>
<p>public class MyServlet extends HttpServlet { <br>
public void doGet( HttpServletRequest req, <br>
HttpServletResponse res) <br>
throws ServletException, IOException { <br>
// get stream to output HTML on! <br>
res. setContentType(" text/ html"); <br>
PrintWriter out = res. getWriter(); <br>
// send out a simple banner <br>
out. println("< HTML>< BODY>"); <br>
out. println("< h1> Hello World!</ h1>");
<br>
out. println("</ BODY></ HTML>"); <br>
} <br>
} </p>
<p>HttpServletRequest <br>
·提供客戶請求 <br>
·"Getters"請求的特征,比如: <br>
·請求頭部,內容類型,長度,方法.... <br>
·請求URL如同一個String <br>
·Servlet"path" <br>
·客戶安全性類型 <br>
·訪問請求參數(通過name) <br>
·請求中,數據在參與對象中的共享范圍 </p>
<p><br>
請求協議 <br>
·getParmeterNames() <br>
·在HTML頁上,返回一個的枚舉的參數 <br>
·getParmeterValues(String name) <br>
·返回multi-valued參數的值 <br>
·getParameter(String name) <br>
·返回一個指定的命名的參數的值 <br>
·getReader() <br>
·返回BufferedReader到輸入視圖 </p>
<p>案例: <br>
<P> Please fill out this form with your name. <br>
Thanks! <br>
<FORM METHOD=" POST" <br>
ACTION="/ servlet/ NameServlet"> <br>
<P> Please enter your name: <br>
<P> First name: <INPUT NAME=" first" TYPE="
TEXT" <br>
SIZE=" 12" MAXLENGTH=" 20"> <br>
Surname: <INPUT NAME=" surname" TYPE=" TEXT"
<br>
SIZE=" 15" MAXLENGTH=" 25"> <br>
<P> Thank you! <INPUT TYPE=" SUBMIT"> <INPUT
<br>
TYPE=" RESET"> <br>
</ FORM> </p>
<p><br>
讀入一個post <br>
public void doPost( HttpServletRequest req, <br>
HttpServletResponse res) <br>
throws ServletException, IOException <br>
{ <br>
… <br>
Enumeration enum = req. getParameterNames(); <br>
while (enum. hasMoreElements()) { <br>
String name = (String) enum. nextElement(); <br>
String value = req. getParameter( name); <br>
//… do something with each pair... <br>
} <br>
} </p>
<p>調用servelet <br>
最普遍使用的調用HttpServlet是通過類名(classname)比如: <br>
http://www.ibm.com/servlets/com.ibm.a.Myservlet </p>
<p>·"load/run by classname"的支持通過另一個稱為"Invoker"的servlet所提供
<br>
·"Invoker"servlet試圖找到servlet的類的路徑 <br>
·考慮到會有無名的servlet,一個servlet用這種方法裝入運行 <br>
在WebSphere中的servlet <br>
·另一方面,大多數的servlet引擎支持servlet通過名字注冊 <br>
·被使用的參數可以初始化 <br>
·參數約束servlet的行為 <br>
·一個servlet可以提供不同的服務(在不同的"short names") <br>
·參數在init()方法中使用 <br>
·允許servlet被預裝入 <br>
·通過RequestDispatcher,允許簡單定位 <br>
·允許servlet被保護 </p>
<p>摘要 <br>
·我們已經看到Servlets的優勢大于CGI <br>
·安全性,靈活性,效率 <br>
·我們已經介紹了Servlet的基本類和接口 <br>
·Servlets,GenericServlet,HttpServlet,HttpServletRequest,HttpServletResponse
</p>
<p><br>
VisulalAge for Java 的復習 <br>
·首先,需要知道: <br>
·IBM VisualAge for Java 基本概念 <br>
·IDE <br>
·Scrapbook <br>
·Debugger <br>
·VisualAge for Java與WebSphere之間的關系 <br>
·VisualAge for Java: <br>
·Visual Builders <br>
·Visual Application Builder <br>
·Enterprise Access Builder <br>
·Data,CICS,RMI,C++ <br>
· Many others <br>
工具: <br>
·IDE <br>
·AppletViewer <br>
·Smart Guides <br>
·Debugger <br>
·Browsers <br>
·Scrapbook <br>
類庫 <br>
·JDK1.1.7 <br>
·JDK1.2 <br>
·IBM Enterprise Connectivity <br>
編譯器和虛擬機 <br>
·Incremental <br>
·Java to byte code <br>
·Byte code to machine code translation <br>
·Multiple VMs <br>
部件: <br>
· JavaBeans <br>
·EJB develpement environment <br>
·WebSphere Test environment <br>
技術支持 <br>
·Integrated team environment <br>
·Scaleable </p>
<p>集成開發環境 <br>
·組織管理項目,類,方法 <br>
·組隊開發--聚寶庫 <br>
·導入及導出類文件到開發環境同Java文件一樣 <br>
·優化編譯 <br>
·視圖:項目,類,界面,所有的問題 <br>
·搜索,智慧向導 <br>
·剪貼本,Debugger <br>
</p>
<p> </p>
<p> </p>
<!-- #EndEditable --></td>
<td width="20"> </td>
</tr>
<tr>
<td width="20" height="11"> </td>
<td width="541" height="11"><!-- #BeginEditable "7" --><!-- #EndEditable --></td>
<td width="101" height="11">
</td>
<td width="20" height="11"> </td>
</tr>
</table><div align="center"> <br>
</div>
</td>
</tr>
</table>
<div align="center">
<br>
</div>
</body>
<!-- #EndTemplate --></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -