1. 程式人生 > >二、ServletConfig與ServletContext

二、ServletConfig與ServletContext

一、ServletConfig        1、在web.xml中的<servlet>標籤下可以使用一個或者多個<init-param>進行一些初始化的操作。 <servlet>     <servlet-name>ThreadSecure</servlet-name>     <servlet-class>com.javaweb.servlet.ThreadSecure</servlet-class>     <init-param>     <param-name>userName</param-name>     <param-value>root</param-value>     </init-param>     <init-param>     <param-name>password</param-name>     <param-value>root</param-value>     </init-param>   </servlet> 獲取從config引數      ServletConfig config;//用來接受初始化引數        public void init(ServletConfig config) throws ServletException {               this.config = config;        }        public void doGet(HttpServletRequest request, HttpServletResponse response)                      throws ServletException, IOException {               //獲取單個引數               String name = this.config.getInitParameter("userName");               response.getWriter().write(name);               System.out.println(name);               //獲取所有的配置引數               Enumeration <String>Names = this.config.getInitParameterNames();               while (Names.hasMoreElements()) {                      String names =  Names.nextElement();                      String value = config.getInitParameter(names);                      System.out.println(name+":"+value);               }        } 方式二、從當前servlet物件直接獲取initialParameter String initParameter = this.getInitParameter("name"); response.getWriter().write(initParameter); 二、ServletCotext 1、載入時機     當tomcat啟動的時候,會為每個web應用建立一個servletContext物件 2、 多個servlet可以通過ServletContext實現資料共享         public void doGet(HttpServletRequest request, HttpServletResponse response)                      throws ServletException, IOException {
              response.getWriter().write("context1");               ServletContext context = this.getServletConfig().getServletContext();
              context.setAttribute("content", "this is Context Class");        }
在另一個類中獲取                public void doGet(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException, IOException {               ServletContext context = this.getServletConfig().getServletContext();               String attribute = (String) context.getAttribute("content");               System.out.println(attribute);        }

2、獲取web應用的初始引數        在web.xml中配置初始化引數和<servlet>同級               <context-param>       <param-name>url</param-name>       <param-value> jdbc://mysql//localhost:3306/db </param-value> </context-param>
     在doGet()方法中獲取               String parameter = this.getServletContext().getInitParameter("url");  System.out.println(parameter);
  1. servletContext請求轉發功能。
    在doGet();方法中 PrintWriter out = response.getWriter(); out.write("<h1>主頁</h1>"); ServletContext context = this.getServletContext(); //獲取請求轉發物件 RequestDispatcher dispatcher=context.getRequestDispatcher("/servlet/ServletDemo1"); //實現轉發 dispatcher.forward(request, response); //包含 dispatcher.include(request, response); writer.write("\n");換行              轉發:將請求轉發給另一個web資源        特點:只能轉發到內部資源                 位址列的路徑不會發生改變 包含:用於響應中包含其他web資源        特點:只能轉發內部資源                 共享請求和相應物件 成位址列路徑不變 內容顯示為當前頁面加被包含介面         6、在客戶端快取servlet的輸出         public void doGet(HttpServletRequest request, HttpServletResponse response)                      throws ServletException, IOException {               response.setHeader("content-type", "text/html;charset=UTF-8");               response.setDateHeader("cache", 24*3600*1000);               response.getWriter().write("快取案例");        }

7、路徑問題 //絕對路徑        String path = servletContext.getRealPath("/"); System.out.println(path);// D:\Tomcat 7.0\webapps\WebServlet\ getResourcePaths(java.lang.String path)  
指定路徑下的所有資源
Set<String> set =  getServletContext().getResourcePaths("/");            for (String path : set) {               System.out.println(path);         } 總結: 絕對路徑:就是一碟符開頭        相對路徑:                      不以正斜槓開頭:                             直接寫路徑和資源名                      以正斜槓開頭:                             伺服器端:servlet對映路徑,代表當前webapp的根路徑                             客戶端:a,img,form代表web伺服器的根路徑要加專案名才能訪問到

           }