[Java拾遗三]JavaWeb基础之Servlet
Servlet
??? 1,servlet介紹
??????? servlet是一項(xiàng)動(dòng)態(tài)web資源開(kāi)發(fā)技術(shù).
??????? 運(yùn)行在服務(wù)器端.
??????? 作用:處理業(yè)務(wù)邏輯,生成動(dòng)態(tài)的內(nèi)容,返回給瀏覽器.
??????? 本質(zhì)就是一個(gè)類(lèi)
???? servlet的入門(mén)
??????? 1.編寫(xiě)servlet(類(lèi))--- 繼承HttpServlet
??????? 2.編寫(xiě)關(guān)系--- web.xml(在WEB-INF下)
??????? 3.訪問(wèn):
??????????? 路徑:http://localhost:80/serveltDemo/helloWorld
??? servlet的體系結(jié)構(gòu)及其常見(jiàn)api
??????? Servlet-- 接口
??????????? |
??????????? |
??????? GenericServlet---(抽象類(lèi))
??????????? |
??????????? |
??????? HttpServlet--(抽象類(lèi))
???????
??????? 常用的方法:
??????????? servlet的常用方法:
??????????????? void init(ServletConfig):初始化方法
??????????????? void service(ServletRequest,ServletResponse):服務(wù)--處理業(yè)務(wù)邏輯
??????????????? void destroy():銷(xiāo)毀方法
???????????????
??????????????? ServletConfig getServletConfig():返回一個(gè)servlet的配置對(duì)象
??????????????? String getServletInfo() :返回是servlet一些信息,比如作者 版本
???????????
??????????? GenericServlet的常用方法:
??????????????? 實(shí)現(xiàn)了除了service方法之外的所有方法
??????????????? init():自己重寫(xiě)init方法
??????????? HttpServlet的常用方法:
??????????????? service(HttpServletRequest,HttpServletResponse):服務(wù)--處理業(yè)務(wù)邏輯
??????????????? doGet(HttpServletRequest,HttpServletResponse):處理get請(qǐng)求的
??????????????? doPost(HttpServletRequest,HttpServletResponse):處理post請(qǐng)求的
? ? 代碼示例:
? ? 2,servlet生命周期:
?????? 生命周期:什么時(shí)候來(lái)的,什么時(shí)候走的.
??????????? void init(ServletConfig):初始化方法
???????????????? * 執(zhí)行時(shí)間:默認(rèn)情況來(lái)說(shuō),第一次的請(qǐng)求的時(shí)候執(zhí)行
???????????????? * 執(zhí)行次數(shù):一次
???????????????? * 執(zhí)行者:tomcat
??????????? void service(ServletRequest,ServletResponse):服務(wù)--處理業(yè)務(wù)邏輯
??????????????? * 執(zhí)行時(shí)間:有請(qǐng)求就執(zhí)行
??????????????? * 執(zhí)行次數(shù):請(qǐng)求一次,執(zhí)行一次
??????????????? * 執(zhí)行者:tomcat
??????????? void destroy():銷(xiāo)毀方法???
??????????????? * 執(zhí)行時(shí)間:服務(wù)器正常關(guān)閉的時(shí)候執(zhí)行
??????????????? * 執(zhí)行次數(shù):一次
??????????????? * 執(zhí)行者:tomcat
??????? servlet是單實(shí)例多線程的
??????????? 默認(rèn)的情況下是第一次訪問(wèn)的時(shí)候創(chuàng)建(有服務(wù)器創(chuàng)建),每出現(xiàn)一次請(qǐng)求,創(chuàng)建一個(gè)線程,用來(lái)處理請(qǐng)求,
??????????? 直到服務(wù)器正常關(guān)閉或者項(xiàng)目移除的時(shí)候servlet銷(xiāo)毀
?? url-pattern編寫(xiě)
??????? 1.完全匹配,----(servlet最常用的)以"/"開(kāi)頭
??????????? 例如:/a/b/c/hello
??????? 2.目錄匹配 以"/"開(kāi)頭,以"*"結(jié)尾(filter常用的)
??????????? 例如:/a/*
??????? 3.后綴名匹配 以"*"開(kāi)頭?
??????????? 例如:? *.do?? *.jsp
???????
??????? 優(yōu)先級(jí):
??????????? 完全匹配>目錄匹配>后綴名匹配
???????
??????? 有如下的一些映射關(guān)系:
??????????? Servlet1 映射到 /abc/*
??????????? Servlet2 映射到 /*
??????????? Servlet3 映射到 /abc
??????????? Servlet4 映射到 *.do
??????? 問(wèn)題:
??????????? 當(dāng)請(qǐng)求URL為“/abc/a.html”,“/abc/*”和“/*”都匹配,哪個(gè)servlet響應(yīng)
??????????????? Servlet引擎將調(diào)用Servlet1。
??????????? 當(dāng)請(qǐng)求URL為“/abc”時(shí),“/abc/*”和“/abc”都匹配,哪個(gè)servlet響應(yīng)
??????????????? Servlet引擎將調(diào)用Servlet3。
??????????? 當(dāng)請(qǐng)求URL為“/abc/a.do”時(shí),“/abc/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
??????????????? Servlet引擎將調(diào)用Servlet1。
??????????? 當(dāng)請(qǐng)求URL為“/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
??????????????? Servlet引擎將調(diào)用Servlet2.
??????????? 當(dāng)請(qǐng)求URL為“/xxx/yyy/a.do”時(shí),“/*”和“*.do”都匹配,哪個(gè)servlet響應(yīng)
??????????????? Servlet引擎將調(diào)用Servlet2。
???????? tomcat的defalutservlet處理別的servlet處理不了的請(qǐng)求.
?? load-on-startup
??????? 在servlet標(biāo)簽下
??????? 改變servlet初始化時(shí)機(jī).
??????? 若值>=0的時(shí)候,servlet會(huì)隨著服務(wù)器的啟動(dòng)而創(chuàng)建.
??????? 值越小,優(yōu)先級(jí)越高
??? 瀏覽器的路徑編寫(xiě):
??????? 1.瀏覽器直接輸入
??????? 2.a標(biāo)簽
??????? 3.location.href
??????? 4.表單提交
???????
??????? 路徑的寫(xiě)法:
??????????? 1.絕對(duì)路徑
??????????????? 帶協(xié)議的絕對(duì)路徑--一般訪問(wèn)站外資源的時(shí)候用
??????????????????? http://localhost:80/servletDemo/helloWorld
??????????????? 不帶協(xié)議的絕對(duì)路徑--站內(nèi)資源
??????????????????? /servletDemo/helloWorld
??????????? 2.相對(duì)路徑
??????????????? ./(路徑) 和 ../
??????????????? 八字方針
??????????????????? 當(dāng)前路徑? http://localhost/servletDemo/??? index.html
??????????????????? 訪問(wèn)路徑? http://localhost/servletDemo/??? demoa
???????????????????
??????????????????? 當(dāng)前路徑? http://localhost/servletDemo/?? a/b/c??? ../../demoa
??????????????????? 訪問(wèn)路徑? http://localhost/servletDemo/?? demoa
??????? 以后使用的是絕對(duì)路徑(一般使用的是不帶協(xié)議的絕對(duì)路徑)
???????
3,ServletConfig
??? 他是當(dāng)前servlet的配置對(duì)象.
??? 獲取方式:
??????? ServletConfig config=this.getServletConfig();
??? 作用:
??????? 1.可以獲取到當(dāng)前servlet初始化參數(shù)
??????? 2.可以獲得全局管理者
??? 常用方法:
??????? String getServletName():獲取當(dāng)前servlet的名稱(chēng) --指的是web.xml中servlet名字
??????? String getInitParameter(name):獲取指定的參數(shù)
??????? Enumeration getInitParameterNames():獲取全部初始化參數(shù)名稱(chēng)
???????
??????? ServletContext getServletContext():獲取全局管理者
??? 當(dāng)servlet初始化的時(shí)候,執(zhí)行了init(ServletConfig config),就把創(chuàng)建好的servletConfig傳給了servlet
??????? 由tomcat創(chuàng)建
示例代碼:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 ServletConfig conf=this.getServletConfig(); 3 //獲取當(dāng)前servlet名字 4 String name=conf.getServletName(); 5 System.out.println(name); 6 7 //獲取名字為 "姓名"的參數(shù)值 8 String value = conf.getInitParameter("姓名"); 9 System.out.println(value); 10 11 //獲取全部參數(shù)名稱(chēng) 12 Enumeration<String> names=conf.getInitParameterNames(); 13 while(names.hasMoreElements()){ 14 String name_=names.nextElement(); 15 System.out.println(name_+":"+conf.getInitParameter(name_)); 16 } 17 } View Code?
? ? ?
4,ServletContext
??? 全局管理者.
??? 每個(gè)應(yīng)用在tomcat啟動(dòng)的時(shí)候,就會(huì)創(chuàng)建一個(gè)servletcontext對(duì)象,這個(gè)對(duì)象可以獲取到當(dāng)前應(yīng)用的所有信息,實(shí)現(xiàn)資源共享.
??? 本質(zhì)servletcontext就是對(duì)當(dāng)前應(yīng)用的一個(gè)引用.
??? 作用:
??????? 1.實(shí)現(xiàn)資源共享
??????? 2.獲取全局初始化參數(shù).
??????? 3.獲取資源.
??? 怎么獲取:
??????? this.getServletConfig().getServletContext():
??????? getServletContext()也可以獲取
??? 常見(jiàn)的方法:
??????? String getInitparameter(name);獲取指定的參數(shù)
??????? Enumeration getInitParameterNames():獲取全部的參數(shù)名稱(chēng)
??????????? 參數(shù)???
??????????????? <context-param>
??????????????????? <param-name>
??????????????????? <param-value>
???????????????????
??????? String getRealPath(path):返回相應(yīng)文件在tomcat的實(shí)際路徑
??????????? 例如:D:\JavaTools\apache-tomcat-7.0.53\webapps\servletDemo\
??????? InputStream getResourceAsStream(String path) :以流的形式返回對(duì)應(yīng)的文件.
???????
??????? String getMimeType(String file)?? 可以獲取一個(gè)文件的mimeType類(lèi)型. 例如 text/html
??????? URL getResource(String path) 它返回的是一個(gè)資源的URL??????? 例如:? localhost/day09/a.html
??? 域?qū)ο?
??????? 把他看成一個(gè)map,
??????? xxxAttribute()
??????????? setAttribute(String,Object):添加
??????????? Object getAttribute(string):獲取
??????????? removeAttribute(string):移除
示例代碼:
? ? ?
5,classpath
??? 獲取字節(jié)碼文件的路徑.
??? 通過(guò)字節(jié)碼文件獲取
??????? 當(dāng)前類(lèi).class.getResource("/").getPath():返回classes的目錄
??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
??????? 當(dāng)前類(lèi).class.getResource("").getPath():返回當(dāng)前類(lèi)的字節(jié)碼文件所在的目錄
??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/cn/itcast/h_classpath/
???????????
??? 通過(guò)類(lèi)加載器獲取文件路徑
??????? 當(dāng)前類(lèi).class.getClassLoader().getResource("/").getPath():返回classes的目錄
??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
??????? 當(dāng)前類(lèi).class.getClassLoader().getResource().getPath():返回classes的目錄
??????????? D:/JavaTools/apache-tomcat-7.0.53/webapps/day09/WEB-INF/classes/
示例代碼:
小demo: 當(dāng)訪問(wèn)index.html中的 鏈接則通過(guò)CountServlet計(jì)數(shù), 每訪問(wèn)一次則count加1, 然后通過(guò)ShowServlet展示到控制臺(tái):
轉(zhuǎn)載于:https://www.cnblogs.com/wang-meng/p/5389214.html
總結(jié)
以上是生活随笔為你收集整理的[Java拾遗三]JavaWeb基础之Servlet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1044 拦截导弹——http://co
- 下一篇: java美元兑换,(Java实现) 美元