Javaweb开发了解前端知识七、Servlet(一)
1.Servlet技術(shù)
2.Servlet類的繼承體系
3.ServletConfig類
4.ServletContext類
1.Servlet技術(shù)
a)?什么是Servlet
Servlet是javaWeb的三大組件。Servlet程序,Listener監(jiān)聽器。Filter過濾器。
Servlet程序主要是運行在Tomcat服務(wù)器上。
Servlet程序的作用:接收客戶端的請求。響應(yīng)給客戶端數(shù)據(jù)。
b)?手動實現(xiàn)Servlet程序
1、編寫一個類去實現(xiàn)Servlet接口
2、實現(xiàn)Servlet程序中的service方法(處理業(yè)務(wù)的方法)
3、到web.xml中去配置Servlet程序的訪問地址
?
Servlet程序的源代碼:
public class HelloServlet implements Servlet {/*** Servlet程序接收客戶端的請求,并且響應(yīng)數(shù)據(jù)<br/>* service在每請求進(jìn)來 的時候,負(fù)責(zé) 處理業(yè)務(wù)*/@Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException {System.out.println("HelloServlet 程序被訪問了~");} }web.xml中的配置:
<!-- servlet標(biāo)簽用來配置一個Servlet程序 --><servlet><!-- 給你要配置的Servlet程序起一個名稱,一般放的是類名(可以任意自定義) --><servlet-name>HelloServlet</servlet-name><!-- servlet-class標(biāo)簽是配置Servlet程序的全類名 --><servlet-class>com.atguigu.servlet.HelloServlet</servlet-class></servlet><!-- servlet-mapping是配置Servlet程序的訪問地址 --><servlet-mapping><servlet-name>HelloServlet</servlet-name><!-- url-paatern是配置訪問地址。/hello 表示http://ip:port/工程名/hello--><url-pattern>/hello</url-pattern> </servlet-mapping>
a)?Servlet的生命周期
1、先執(zhí)行Servlet的構(gòu)造方法
2、執(zhí)行Servlet程序的init初始化方法
?
構(gòu)造方法和init初始化方法,只是第一次訪問的時候由Tomcat服務(wù)器來調(diào)用,只調(diào)用一次
?
3、執(zhí)行Service方法 (每次訪問都會被調(diào)用)
?
4、執(zhí)行destroy方法(服務(wù)器停止,停止web工程 )
?
b)?模擬GET請求和POST請求的分發(fā)
請求分為GET請求和POST請求。(一般GET請求和POST請求有可能會做不同的業(yè)務(wù)操作)
?
服務(wù)器如何區(qū)分 GET請求和POST請求。
/*** Servlet程序接收客戶端的請求,并且響應(yīng)數(shù)據(jù)<br/>* service在每請求進(jìn)來 的時候,負(fù)責(zé) 處理業(yè)務(wù)*/@Overridepublic void service(ServletRequest request, ServletResponse response)throws ServletException, IOException { // System.out.println("HelloServlet 程序被訪問了~");HttpServletRequest httpRequest = (HttpServletRequest) request;// getMethod返回是GET或POST,返回請求的方式String method = httpRequest.getMethod();System.out.println(method);if ("GET".equals(method)) {// 如果是GET請求,執(zhí)行g(shù)et業(yè)務(wù)doGet();} else if ("POST".equals(method)) {//執(zhí)行post請求的業(yè)務(wù)操作doPost();}}/*** 這是GET請求需要做的工作*/public void doGet() {System.out.println("doGet 這是GET請求");}/*** 這是POST請求需要做的工作*/public void doPost() {System.out.println("doPost 這是POST請求");}
a)?通過繼承HttpServlet實現(xiàn)Servlet程序
?
在實現(xiàn)的開發(fā)中,我們都是使用HttpServlet抽取類去實現(xiàn)Servlet程序。
1、編寫一個類去繼承HttpServlet類
2、重寫doGet方法和doPost方法
3、到web.xml中去配置Servlet程序的訪問地址
?
HelloServlet2類
public class HelloServlet2 extends HttpServlet {/*** doGet方法,是GET請求的時候,會自動的調(diào)用*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("這是GET請求,調(diào)用了doGet方法");}/*** doPost方法,是POST請求的時候,會自動的調(diào)用*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("這是POST請求,調(diào)用了doPost方法");}}web.xml中的配置:
<servlet><servlet-name>abc</servlet-name><servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class></servlet><servlet-mapping><servlet-name>abc</servlet-name><!-- url-pattern 中 /ccc 表示http://ip:port/工程名/ccc<br/>url-pattern以斜線打頭,配置的地址跟在工程名的后面web.xml中有了修改之后一定要重啟Tomcat服務(wù)器才能生效在瀏覽器地址欄中輸入地址,然后敲 回車是GET請求--><url-pattern>/ccc</url-pattern> </servlet-mappi2.Servlet類的繼承體系
我們在重寫doGet方法或doPost方法的時候,方法體內(nèi),一定不能調(diào)用super.doGet或super.doPost代碼。否則會報405錯誤
3.ServletConfig類
我們所有的類都是由tomcat服務(wù)器進(jìn)行創(chuàng)建。我們負(fù)責(zé)使用。
ServletConfig類它封裝了Servlet程序的配置信息。
?
a)?ServletConfig類的三大作用
1、獲取Servlet程序在web.xml中配置的名稱
2、獲取在web.xml中配置的初始化參數(shù)
3、獲取ServletContext對象
public class ConfigServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void init(ServletConfig config) throws ServletException { // 1、獲取Servlet程序在web.xml中配置的名稱System.out.println("在web.xml中配置的servlet-name名稱:" + config.getServletName()); // 2、獲取在web.xml中配置的初始化參數(shù)System.out.println("username初始化參數(shù)值:" + config.getInitParameter("username"));System.out.println("url初始化參數(shù)值:" + config.getInitParameter("url")); // 3、獲取ServletContext對象System.out.println( config.getServletContext() );} }web.xml中的配置:
<servlet><servlet-name>ConfigServlet</servlet-name><servlet-class>com.atguigu.servlet.ConfigServlet</servlet-class><!-- init-param 是給Servlet程序配置一個初始化鍵值對參數(shù) --><init-param><!-- param-name是參數(shù)名 --><param-name>username</param-name><!-- param-value是參數(shù)值 --><param-value>root</param-value></init-param><!-- init-param 是給Servlet程序配置一個初始化鍵值對參數(shù) --><init-param><!-- param-name是參數(shù)名 --><param-name>url</param-name><!-- param-value是參數(shù)值 --><param-value>jdbc:mysql://localhost:3306/test</param-value></init-param></servlet><servlet-mapping><servlet-name>ConfigServlet</servlet-name><url-pattern>/configServlet</url-pattern></servlet-mapping>注意:ServletConfig是在GenericServlet類中持有的引用。當(dāng)我們需要在自己自定義的Servlet程序中重寫init(ServletConfig)初始化方法的時候。
一定要調(diào)用super.init(config); 否則父類中的ServletConfig就不能得到初始化
4.ServletContext類
a)?什么是ServletContext?
1、ServletContext對象是一個接口。
2、ServletContext在一個web工程中只有一個對象實例(也是由Tomcat服務(wù)器創(chuàng)建)。
3、ServletContext是一個域?qū)ο蟆?/span>
?
什么是域?qū)ο?#xff1f;
域?qū)ο笾傅氖强梢韵?/span>map一樣存取數(shù)據(jù)的對象。
put setAttribute 保存數(shù)據(jù)
get getAttribute 獲取數(shù)據(jù)
?
域指的保存和獲取數(shù)據(jù)的范圍。ServletContext對象它的數(shù)據(jù)操作范圍是整個web工程。
?
ServletContext對象在web工程啟動的時候創(chuàng)建。在web工程停止的時候銷毀。
?
b)?ServletContext類的四個作用
1、它可以獲取在web.xml中配置的上下文參數(shù)<context-param>
2、它可以獲取到當(dāng)前web工程的工程名(工程路徑)
3、它可以獲取web工程發(fā)布到服務(wù)器上之后。文件或目錄在服務(wù)器磁盤上的絕對路徑。
4、它可以像map一樣存取數(shù)據(jù)。
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// b)ServletContext類的四個作用ServletContext ctx = getServletContext();// 1、它可以獲取在web.xml中配置的上下文參數(shù)<context-param>System.out.println("上下文初始化參數(shù)password的值:"+ ctx.getInitParameter("password"));System.out.println("上下文初始化參數(shù)driverClass的值:"+ ctx.getInitParameter("driverClass"));// 2、它可以獲取到當(dāng)前web工程的工程名(工程路徑)// getContextPath()獲取當(dāng)前工程名System.out.println(ctx.getContextPath());// 3、它可以獲取web工程發(fā)布到服務(wù)器上之后。文件或目錄在服務(wù)器磁盤上的絕對路徑。// getRealPath是獲取指定的路徑的資源在服務(wù)器上的絕對路徑。// / 斜線,表示 根,// / 斜線 在web工程中 表示到http://ip:port/工程名/ 映射到 代碼的WebContent目錄System.out.println(ctx.getRealPath("/"));System.out.println("WebContent/css的絕對路徑是:" + ctx.getRealPath("/css"));System.out.println("WebContent/imgs/ludashi.jpg的絕對路徑是:" + ctx.getRealPath("/imgs/ludashi.jpg"));}在web.xml中的配置:
<context-param><param-name>password</param-name><param-value>root</param-value></context-param><context-param><param-name>driverClass</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param>?Javaweb開發(fā)了解前端知識六、Tomcat
總結(jié)
以上是生活随笔為你收集整理的Javaweb开发了解前端知识七、Servlet(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quectel_Ec600硬件练习
- 下一篇: HTML5专属解释