Javaweb开发了解前端知识七、Servlet(一)
1.Servlet技術
2.Servlet類的繼承體系
3.ServletConfig類
4.ServletContext類
1.Servlet技術
a)?什么是Servlet
Servlet是javaWeb的三大組件。Servlet程序,Listener監聽器。Filter過濾器。
Servlet程序主要是運行在Tomcat服務器上。
Servlet程序的作用:接收客戶端的請求。響應給客戶端數據。
b)?手動實現Servlet程序
1、編寫一個類去實現Servlet接口
2、實現Servlet程序中的service方法(處理業務的方法)
3、到web.xml中去配置Servlet程序的訪問地址
?
Servlet程序的源代碼:
public class HelloServlet implements Servlet {/*** Servlet程序接收客戶端的請求,并且響應數據<br/>* service在每請求進來 的時候,負責 處理業務*/@Overridepublic void service(ServletRequest arg0, ServletResponse arg1)throws ServletException, IOException {System.out.println("HelloServlet 程序被訪問了~");} }web.xml中的配置:
<!-- servlet標簽用來配置一個Servlet程序 --><servlet><!-- 給你要配置的Servlet程序起一個名稱,一般放的是類名(可以任意自定義) --><servlet-name>HelloServlet</servlet-name><!-- servlet-class標簽是配置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、先執行Servlet的構造方法
2、執行Servlet程序的init初始化方法
?
構造方法和init初始化方法,只是第一次訪問的時候由Tomcat服務器來調用,只調用一次
?
3、執行Service方法 (每次訪問都會被調用)
?
4、執行destroy方法(服務器停止,停止web工程 )
?
b)?模擬GET請求和POST請求的分發
請求分為GET請求和POST請求。(一般GET請求和POST請求有可能會做不同的業務操作)
?
服務器如何區分 GET請求和POST請求。
/*** Servlet程序接收客戶端的請求,并且響應數據<br/>* service在每請求進來 的時候,負責 處理業務*/@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請求,執行get業務doGet();} else if ("POST".equals(method)) {//執行post請求的業務操作doPost();}}/*** 這是GET請求需要做的工作*/public void doGet() {System.out.println("doGet 這是GET請求");}/*** 這是POST請求需要做的工作*/public void doPost() {System.out.println("doPost 這是POST請求");}
a)?通過繼承HttpServlet實現Servlet程序
?
在實現的開發中,我們都是使用HttpServlet抽取類去實現Servlet程序。
1、編寫一個類去繼承HttpServlet類
2、重寫doGet方法和doPost方法
3、到web.xml中去配置Servlet程序的訪問地址
?
HelloServlet2類
public class HelloServlet2 extends HttpServlet {/*** doGet方法,是GET請求的時候,會自動的調用*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("這是GET請求,調用了doGet方法");}/*** doPost方法,是POST請求的時候,會自動的調用*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("這是POST請求,調用了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服務器才能生效在瀏覽器地址欄中輸入地址,然后敲 回車是GET請求--><url-pattern>/ccc</url-pattern> </servlet-mappi2.Servlet類的繼承體系
我們在重寫doGet方法或doPost方法的時候,方法體內,一定不能調用super.doGet或super.doPost代碼。否則會報405錯誤
3.ServletConfig類
我們所有的類都是由tomcat服務器進行創建。我們負責使用。
ServletConfig類它封裝了Servlet程序的配置信息。
?
a)?ServletConfig類的三大作用
1、獲取Servlet程序在web.xml中配置的名稱
2、獲取在web.xml中配置的初始化參數
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中配置的初始化參數System.out.println("username初始化參數值:" + config.getInitParameter("username"));System.out.println("url初始化參數值:" + 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程序配置一個初始化鍵值對參數 --><init-param><!-- param-name是參數名 --><param-name>username</param-name><!-- param-value是參數值 --><param-value>root</param-value></init-param><!-- init-param 是給Servlet程序配置一個初始化鍵值對參數 --><init-param><!-- param-name是參數名 --><param-name>url</param-name><!-- param-value是參數值 --><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類中持有的引用。當我們需要在自己自定義的Servlet程序中重寫init(ServletConfig)初始化方法的時候。
一定要調用super.init(config); 否則父類中的ServletConfig就不能得到初始化
4.ServletContext類
a)?什么是ServletContext?
1、ServletContext對象是一個接口。
2、ServletContext在一個web工程中只有一個對象實例(也是由Tomcat服務器創建)。
3、ServletContext是一個域對象。
?
什么是域對象?
域對象指的是可以像map一樣存取數據的對象。
put setAttribute 保存數據
get getAttribute 獲取數據
?
域指的保存和獲取數據的范圍。ServletContext對象它的數據操作范圍是整個web工程。
?
ServletContext對象在web工程啟動的時候創建。在web工程停止的時候銷毀。
?
b)?ServletContext類的四個作用
1、它可以獲取在web.xml中配置的上下文參數<context-param>
2、它可以獲取到當前web工程的工程名(工程路徑)
3、它可以獲取web工程發布到服務器上之后。文件或目錄在服務器磁盤上的絕對路徑。
4、它可以像map一樣存取數據。
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// b)ServletContext類的四個作用ServletContext ctx = getServletContext();// 1、它可以獲取在web.xml中配置的上下文參數<context-param>System.out.println("上下文初始化參數password的值:"+ ctx.getInitParameter("password"));System.out.println("上下文初始化參數driverClass的值:"+ ctx.getInitParameter("driverClass"));// 2、它可以獲取到當前web工程的工程名(工程路徑)// getContextPath()獲取當前工程名System.out.println(ctx.getContextPath());// 3、它可以獲取web工程發布到服務器上之后。文件或目錄在服務器磁盤上的絕對路徑。// getRealPath是獲取指定的路徑的資源在服務器上的絕對路徑。// / 斜線,表示 根,// / 斜線 在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開發了解前端知識六、Tomcat
總結
以上是生活随笔為你收集整理的Javaweb开发了解前端知识七、Servlet(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quectel_Ec600硬件练习
- 下一篇: HTML5专属解释