?? day01.txt
字號:
Servlet_day01 langna 2007-9-21 星期五
劉新福:
servlet 5天
jsp 5天
struts 4天
C/S 架構(gòu)
B/S: Web
js: 運(yùn)行在客戶端的腳本;
構(gòu)造交互式網(wǎng)頁:
標(biāo)簽: input
select
textarea
動態(tài)網(wǎng)頁:是由程序控制的;根據(jù)用戶的不同而顯示的內(nèi)容不同;
servlet/jsp -- struts: jsp是一個簡易的語法;
將jsp轉(zhuǎn)換成servlet 發(fā)送過去;
struts是servlet的開源框架;
jdbc -- hibernate: pojo/javabean/value object;
hibernate是jdbc的開源框架;
學(xué)習(xí): 多動手, 才能掌握住;
一, 課程概要:
1 , 基礎(chǔ)知識; 1
2 , form表單的解析; 2
3 , servlet的生命周期; 1,2
4 , 訪問資源;和jdbc和hibernate結(jié)合起來; 3
5 , servlet的維護(hù)持久化狀態(tài);cookie和session技術(shù); 3, 4
6 , filter:過濾器 5
7 , listener:監(jiān)聽器 5
二, servlet 基礎(chǔ)知識:
1, CGI: 公共網(wǎng)關(guān)接口程序; 基于http協(xié)議的, 運(yùn)行在服務(wù)器端,web服務(wù)器的發(fā)起者是客戶端;
CGI訪問數(shù)據(jù)庫;生成動態(tài)頁面;
HTTP: serversocket/socket: serversocket(port)先啟動,監(jiān)聽客戶端的請求;
客戶端 socket發(fā)送請求;訪問CGI程序(基于進(jìn)程的);
服務(wù)器給一個響應(yīng);
http是一次性連接的;非持續(xù)性的連接;
進(jìn)程之間耗資源,并且進(jìn)程之間通信沒有線程間通信方便;
CGI是基于進(jìn)程的,允許客戶端執(zhí)行服務(wù)器端的一個程序;
content-type:text/html : 頭部信息,傳遞的信號;header;
url:統(tǒng)一資源定位; (協(xié)議)http://ip:port(80)/resource_path;
servlet 是module ; 運(yùn)行在服務(wù)器中,增強(qiáng)了服務(wù)器的功能;
訪問數(shù)據(jù)庫;寫一個程序并部署到服務(wù)器端;
webserver: 買一個, 或 用開源的;
2, 如何安裝tomcat:
linux下:
將tomcat考到自己的主目錄(/home/xjh0704)下;解壓縮就是安裝好了; (chmod 777 tomcat -R)
目錄不要放的太深; 必須保證自己的操作系統(tǒng)中有jdk; tomcat只是一個webserver;沒有帶jvm;
在.bash_profile下:
JAVA_HOME=jdk的安裝路徑;
CATALINA_HOME=tomcat的安裝路徑;
path=$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME
window下:
環(huán)境變量:
新建一個CATALINA_HOME=d:\tomcat的安裝路徑不包括bin目錄
在path中加上 %CATALINA_HOME%\bin
檢驗(yàn)變量是否定義對了:
linux:(終端中)
echo $CATALINA_HOME
echo $JAVA_HOME
windows:(cmd中)
set catalina_home
set java_home
測試tomcat是否安裝成功:
進(jìn)入到tomcat安裝目錄下: 啟動: bin /startup.sh 或 catalina.sh run /關(guān)閉:shutdown.sh
windows下是: startup.bat / 關(guān)閉:shutdown.bat
打開瀏覽器:輸入 http://127.0.0.1:8080 或(localhost)
顯示tomcat的主頁就表示已經(jīng)啟動成功;
3, webapps/root 默認(rèn)訪問的就是這個root應(yīng)用;
訪問遠(yuǎn)程的應(yīng)用: http://192.168.106.102:8080/admmes.html
ip地址可以和域名綁定起來;
在webapps中建立一個文件夾 , 就是一個應(yīng)用; serv-app/WEB-INF(必須有這個目錄)
WEB-INF/web.xml(必須有這個文件,合法的xml文件)
ISO-8859-1;
xsd : 跟dtd作用一樣;
服務(wù)器要先關(guān)閉再啟動,應(yīng)用才會裝載進(jìn)來;
應(yīng)用放在哪里: 應(yīng)用 (serv-app 或子目錄下)下,但是放到WEB-INF下,不能訪問;這是受服務(wù)器保護(hù)的文件;
http://127.0.0.1:8080/serv-app/admmes.html
在應(yīng)用中再建其他文件夾:js/img/style/等;
tomcat 根據(jù)環(huán)境變量找到安裝目錄,找到web-apps,
servlet 類 放到WEB-INF/classes 目錄下;
看servlet文檔:
tomcat-docs/servletapi/javax.servlet/javax.servlet.http
隨便買一本servlet書看看,越薄越好;
三, 第一個應(yīng)用:
1, javascript 是在客戶端執(zhí)行的,顯示的時間是客戶端的;
2,System.out.println("<html>");發(fā)字符串過去;命令行輸出, js不認(rèn), 只認(rèn)方法;
類要是有包的話必須將類放在目錄結(jié)構(gòu)下; 或者, javac DynamicHtml.java -d . ;放到當(dāng)前目錄下;
然后在當(dāng)前目錄下 java 包名.DynamicHtml(類名)
3,servlet 的api: servlet必須運(yùn)行在webserver中,可以接受來自客戶端的請求, 基于http協(xié)議;
apache-tomcat-5.5.20\webapps\tomcat-docs\servletapi\index.html
一個servlet必須有一個缺省構(gòu)造器, 系統(tǒng)會調(diào)用,init(),service(),destroy();
在classpath上加上servlet-api.jar;
或在eclipse上配置library;
實(shí)現(xiàn)Servlet 接口,覆蓋service方法;
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println(new java.util.Date());
out.println("<html>");
}
寫web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>servlet的名字</servlet-name> <time>
<servlet-class>servlet類全名</servlet-class> <com.tarena.serv.TimeServlet>
</servlet>
<servlet-mapping>
<servlet-name>servlet的名字(要和servlet標(biāo)簽中的相同)</servlet-name> <time>
<url-pattern>指定servlet相對于應(yīng)用目錄的虛擬路徑名</url-pattern> </basic/time>
</servlet-mapping>
</web-app>
Servlet的調(diào)用過程:
1,用戶通過瀏覽器向web服務(wù)器發(fā)送請求
http://serverip:port/apppath
2,服務(wù)器為用戶定位資源
靜態(tài)資源:/a.html /a/b.html (這里的路徑是針對web應(yīng)用文件夾目錄)讀文件并把內(nèi)容發(fā)送到客戶端
動態(tài)資源:解析web.xml定位Servlet類的名字
裝載類(WEB-INF/classes|WEB-INF/lib/*.jar)
創(chuàng)建該對象的實(shí)例
Servlet ser=(Servlet)(Class.forName("servle的類名")).newInstance();
//我們寫的Servlet一定要實(shí)現(xiàn)Servlet接口或者繼承實(shí)現(xiàn)了Servlet接口的類
先構(gòu)造器,init(),service(),
內(nèi)存中同一時間只有一個servlet實(shí)例,只有一個被銷毀后再創(chuàng)建新的實(shí)例;
servlet不是一個線程,而是工作在多線程中;
銷毀時調(diào)用 destroy();
getServletConfig()/getServletInfo() 服務(wù)器不會調(diào)這兩個方法;
3, HttpServlet繼承了GenericServlet
繼承HttpServlet時,只需要實(shí)現(xiàn):
doGet() 服務(wù)于get請求;
doPost() 服務(wù)于post請求;
如果兩種請求都需要服務(wù)的話,都實(shí)現(xiàn)就行;
也可以覆蓋service方法;
再HttpServlet: doGet() , doPost() , service(HttpServletRequest,...) , service(ServletRequest,...)(這個是繼承的)
創(chuàng)建一個HttpServlet實(shí)例時, 調(diào)過init()方法后, 會調(diào)用哪個方法?
service(ServletRequest,..)調(diào)用service(HttpServletRequest,...) ; 再 根據(jù)請求類型調(diào)用doGet或doPost
如果覆蓋了service方法,就會服務(wù)于所有類型的請求;自己調(diào)用doGet或doPost;
4, webserver: apache web server ; sunone web server
支持java的都支持servlet ;
<url-pattern>/time(必須以/開頭)</url-pattern>
今天對servlet有一個大概的理解就行,在以后的學(xué)習(xí)中逐漸理解和加深印象;
練習(xí)作業(yè):
<h1>1</h1>
<h2>2</h2>
<h3>3</h3>
<h4>4</h4>
<h5>5</h5>
<h6>6</h6>
繼承HttpServlet 就行;
public class HeadingServlet extends HttpServlet{
public void doGet(HttpServletRequest, HttpServletResponse) throws IOException,ServletException{
//子類不能比父類多拋異常,只能少拋;
response.setContentType("text/html");
PrinterWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>heading</title></head>");
out.println("<body>");
for(int i=1;i<=6;i++){
// out.println("<h"+i+" align=\"center\"> " +i +"<h" + i +">");
out.print("<h");
out.print(i);// h 和 i 之間不能換行;否則出不了效果
out.println(" align=\"center\"> ");
out.println(i);
out.print("<h");
out.print(i);
out.println(">");
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -