Servlet知识
1、Servlet概述
2、編寫Servlet的開發(fā)步驟
a、建立標(biāo)準(zhǔn)的JavaWeb應(yīng)用目錄
FirstApp
WEB-INF
classes
lib
web.xml
b、編寫一個(gè)類,實(shí)現(xiàn)javax.servlet.Servlet接口
package com.itheima;
import javax.servlet.*;
import java.io.*;
public class HelloServlet implements Servlet{
public void destroy(){}
public String getServletInfo(){
return null;
}
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
IOException{
String data = "hello servlet";
res.getOutputStream().write(data.getBytes());
}
public ServletConfig getServletConfig(){return null;}
public void init(ServletConfig config)
throws ServletException
{}
}
c、進(jìn)入HelloServlet的目錄,執(zhí)行javac -d . HelloServlet.java進(jìn)行編譯(要把servlet-api.jar加入到classpath中)
d、Servlet映射到某個(gè)地址上:修改web.xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
e、部署到Tomcat中
f、訪問地址:http://localhost:8080/FirstApp/HelloServlet
3、編寫Servlet也可以繼承javax.servlet.GenricServlet
如果是與HTTP協(xié)議有關(guān),也可以繼承javax.servlet.http.HttpServlet,至少要覆蓋doXXX方法。不能覆蓋service方法,他有標(biāo)準(zhǔn)實(shí)現(xiàn)。
Tip:
servlet-api.jar:
含兩個(gè)包:
javax.servlet.*:通用的類放在此處,與具體協(xié)議無關(guān)
javax.servlet.http.*:專門服務(wù)于HTTP協(xié)議。
Tip:
修改MyEclipse生成的Servlet模板:
MyEclipse8.5:在安裝目錄中搜索*wizard*(com.genuitec.eclipse.wizards_8.5.0.me201003052220.jar)的文件,打開,找到Servlet.java文件,修改即可(注意:修改前先備份,推出MyEclipse)
4、Servlet的生命周期
4.1默認(rèn)情況下,Servlet類在第一次訪問時(shí)才會(huì)被容器實(shí)例化,并接著調(diào)用init方法進(jìn)行初始化。
針對用戶的每次訪問,只初始化一次,但service方法會(huì)調(diào)用多次。
4.2希望在容器加載應(yīng)用時(shí)就初始化Servlet?
解決辦法:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup> //取值自然整數(shù),標(biāo)識了Servlet的加載順序
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
Tip:Servlet的映射細(xì)節(jié)
a、同一個(gè)Servlet可以被映射到多個(gè)URL地址上
b、Servlet的映射支持通配符*
通配符寫法有2種:
以*開頭,以擴(kuò)展名結(jié)尾,比如*.do
以/開頭,以*結(jié)尾,比如/action/*
知識點(diǎn):使用通配符時(shí),如果找到多個(gè)匹配,到底執(zhí)行的是哪個(gè)Servlet原則:絕對匹配--->從前往后匹配---->/開頭的匹配優(yōu)先級高
如果某個(gè)Servlet的映射路徑為一個(gè)"/",那么稱之為默認(rèn)Servlet。負(fù)責(zé)處理沒有的配置。
當(dāng)訪問Tomcat服務(wù)器中的某個(gè)靜態(tài)HTML文件和圖片時(shí),實(shí)際上是在訪問這個(gè)缺省Servlet。
?
5、線程安全問題
實(shí)現(xiàn)javax.servlet.SingleThreadModel的Servlet有2中解決線程安全問題的辦法:(不同的服務(wù)器不同)
a、對資源進(jìn)行同步處理(不可行)
b、搞了多個(gè)Servlet的對象為您服務(wù)(不可行):Tomcat的實(shí)現(xiàn)了此種方式。
避免資源沖突的原則:盡量使用局部變量;實(shí)在局部不了的,一定要做同步處理。同步代碼塊盡量包圍少的代碼。
在Servlet盡量使用局部變量。
6、如何得到Servlet中的配置參數(shù):ServletConfig
作用:代表針對Servlet的參數(shù)配置。
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
7、ServletContext
7.1ServletContext:當(dāng)容器加載JavaWeb應(yīng)用時(shí),會(huì)為每一個(gè)JavaWeb應(yīng)用創(chuàng)建對應(yīng)的ServletContext對象(每個(gè)應(yīng)用只有一個(gè))。
JavaWeb應(yīng)用的總管。
獲取ServletContext對象的引用:ServletConfig.getServletContext()
ServletContext還是一個(gè)域?qū)ο?#xff1a;域?qū)ο髮?shí)際上其內(nèi)部維護(hù)了一個(gè)Map<String,Object>
它的生命周期是整個(gè)web應(yīng)用的生命周期。
a、實(shí)現(xiàn)Servlet間的數(shù)據(jù)共享
b、請求轉(zhuǎn)發(fā)
c、讀取資源文件的三種方式
?-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2、Servlet概述
3、編寫Servlet的開發(fā)步驟
4、Servlet的生命周期
5、如何得到Servlet中的配置參數(shù):ServletConfig
6、線程安全問題
7、ServletContext
a、實(shí)現(xiàn)Servlet間的數(shù)據(jù)共享
b、請求轉(zhuǎn)發(fā)
c、讀取資源文件的三種方式
轉(zhuǎn)載于:https://www.cnblogs.com/yys369/p/5325934.html
總結(jié)
- 上一篇: 用 openSSL 生成 公钥 私钥
- 下一篇: Android 自定义View 三板斧之