1. 程式人生 > >Servlet中的幾個重要的對象(轉)

Servlet中的幾個重要的對象(轉)

localhost http ttr 屬性 webapps source 指定路徑 開始 orm

 講解四大類,ServletConfig對象,ServletContext對象、request對象,response對象

ServletConfig對象

        獲取途徑:getServletConfig();

        功能:上面大概提及了一下,能得到四個東西,

              技術分享圖片

            getServletName(); //獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name

            getServletContext(); //獲取ServletContext對象,該對象的作用看下面講解

            getInitParameter(String); //獲取在servlet中初始化參數的值。這裏註意與全局初始化參數的區分。這個獲取的只是在該servlet下的初始化參數

                技術分享圖片

            getInitParameterNames(); //獲取在Servlet中所有初始化參數的名字,也就是key值,可以通過key值,來找到各個初始化參數的value值。註意返回的是枚舉類型

                技術分享圖片

                技術分享圖片

                技術分享圖片

           註意:在上面我們所分析的源碼過程中,我們就知道,其實可以不用先獲得ServletConfig,然後在獲取其各種參數,可以直接使用其方法,比如上面我們用的ServletConfig().getServletName();可以直接寫成getServletName();而不用在先獲取ServletConfig();了,原因就是在GenericServlet中,已經幫我們獲取了這些數據,我們只需要直接拿就行。

ServletContext對象

           獲取途徑:getServletContext(); 、getServletConfig().getServletContext();  //這兩種獲取方式的區別就跟上面的解釋一樣,第一種是直接拿,在GenericServlet中已經幫我們用getServletConfig().getServletContext();拿到了ServletContext。我們只需要直接獲取就行了,第二種就相當於我們自己在獲取一遍,兩種讀是一樣的。

           功能:tomcat為每個web項目都創建一個ServletContext實例,tomcat在啟動時創建,服務器關閉時銷毀,在一個web項目中共享數據,管理web項目資源,為整個web配置公共信息等,通俗點講,就是一個web項目,就存在一個ServletContext實例,每個Servlet讀可以訪問到它。

              1、web項目中共享數據,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

                  setAttribute(String name, Object obj) 在web項目範圍內存放內容,以便讓在web項目中所有的servlet讀能訪問到

                  getAttribute(String name) 通過指定名稱獲得內容

                  removeAttribute(String name) 通過指定名稱移除內容  

                  技術分享圖片

                   技術分享圖片  

                  技術分享圖片  

              2、整個web項目初始化參數 //這個就是全局初始化參數,每個Servlet中都能獲取到該初始化值

                  getInitPatameter(String name)  //通過指定名稱獲取初始化值

                  getInitParameterNames()  //獲得枚舉類型

                  web.xml 配置 整個web項目的初始化

                      技術分享圖片

                      技術分享圖片

                      技術分享圖片

              3、獲取web項目資源

                  3.1獲取web項目下指定資源的路徑:getServletContext().getRealPath("/WEB-INF/web.xml")

                    技術分享圖片

                    技術分享圖片

                  3.2獲取web項目下指定資源的內容,返回的是字節輸入流。InputStream getResourceAsStream(java.lang.String path)

                    前提知識:需要了解流。不知道的可以去看看IO流總結的文章

                    技術分享圖片

                    輸出內容截圖一部分

                    技術分享圖片

               4、getResourcePaths(java.lang.String path) 指定路徑下的所有內容。

                    技術分享圖片

                    技術分享圖片

                    技術分享圖片

                5還有很多別的方法,暫時用到的就這幾個了,以後需要在用的,就查看源碼,看API。

request對象

          我們知道,request就是將請求文本封裝而成的對象,所以通過request能獲得請求文本中的所有內容,請求頭、請求體、請求行 。

                技術分享圖片

            1、請求行內容的獲取。

             技術分享圖片 

             技術分享圖片 

               技術分享圖片 

            2請求頭的獲取

                隨便百度一個東西,然後查看的請求頭,包括以下這些內容,稍作了解。

                技術分享圖片

                String getHeader(java.lang.String name) 獲得指定頭內容String【】

                  技術分享圖片

                  技術分享圖片

                long getDateHeader(java.lang.String name) 獲得指定頭內容Date

                int getIntHeader(java.lang.String name) 獲得指定頭內容int

                Enumeration getHeaders(java.lang.String name) 獲得指定名稱所有內容

            3請求體的獲取 -- 請求參數的獲取

               分兩種,一種get請求,一種post請求

               get請求參數:http://localhost:8080/test01/MyServlet?username=jack&password=1234

               post請求參數: <form method="post"><input type="text" name="username">

                String request.getParameter(String) 獲得指定名稱,一個請求參數值。

                String[] request.getParameterValues(String) 獲得指定名稱,所有請求參數值。例如:checkbox、select等

                Map<String , String[]> request.getParameterMap() 獲得所有的請求參數  

    

            4請求轉發

                request.getRequestDispatcher(String path).forward(request,response);  //path:轉發後跳轉的頁面,這裏不管用不用"/"開頭,都是以web項目根開始,因為這是請求轉發,請求轉發只局限與在同一個web項目下使用,所以這裏一直都是從web項目根下開始的,

                web項目根:

                    開發:G:\Workspaces\test01\WebRoot\..

                    運行時:D:\java\tomcat\apache-tomcat-7.0.53\webapps\test01\..

                 web站點根:

                    運行時:D:\java\tomcat\apache-tomcat-7.0.53\webapps\..

                從這裏可以看出,web項目根就是從該web項目名開始,所以我們請求轉發時,只需要接著項目名後面需要訪問的路徑寫就行了,

                特點:瀏覽器中url不會改變,也就是瀏覽器不知道服務器做了什麽,是服務器幫我們跳轉頁面的,並且在轉發後的頁面,能夠繼續使用原先的request,因為是原先的request,所以request域中的屬性都可以繼續獲取到。

                

response對象

          技術分享圖片

        常用的一個方法:response.setHeader(java.lang.String name, java.lang.String value) 設置指定的頭,一般常用。

             例如:設置每隔3秒就自動刷新一次,

              response.setHeader("Refresh",3);

              技術分享圖片

              技術分享圖片技術分享圖片

              這樣可以看到現在時間的秒數,會發現每隔三秒就會自動刷新一次頁面。

        這個最重要的一個就是重定向,其他的一些操作都被封裝到response對象中了,重點講解重定向

          重定向(頁面跳轉)

            方式一:手動方案

                response.setStatus(302);  //狀態碼302就代表重定向

                response.setHeader("location","http://www.baidu.com");

            方式二:使用封裝好的,通過response.sendRedirect("http://www.baidu.com");

          特點:服務器告訴瀏覽器要跳轉的頁面,是瀏覽器主動去跳轉的頁面,瀏覽器知道,也瀏覽器的地址欄中url會變,是瀏覽器重新發起一個請求到另外一個頁面,所以request是重新發起的,跟請求轉發不一樣。

            註意:response.sendRedirect(path);  //

            第一種:response.sendRedirect("/test01/MyServlet01");  //使用了"/"開頭,說明是從web站點根開始,所以需要寫test01/MyServlet01

            第二種:response.sendRedirect("MyServlet01");  //沒有使用"/"開頭,說明是從web項目根開始,那麽就無需寫test01了。

            重定向沒有任何局限,可以重定向web項目內的任何路徑,也可以訪問別的web項目中的路徑,並且這裏就用"/"區分開來,如果使用了"/"開頭,就說明我要重新開始定位了,不訪問剛才的web項目,自己寫項目名,如果沒有使用"/"開始,那麽就知道是訪問剛才那個web項目下的servlet,就可以省略項目名了。就是這樣來區別。

Servlet中的幾個重要的對象(轉)