ServletConfig物件,ServletContext物件
ServletConfig物件
ServletConfig物件有什麼用? 通過此物件可以讀取web.xml中配置的初始化引數。
為什麼我們要把引數資訊放到web.xml檔案中呢?我們可以直接在程式中都可以定義引數資訊,搞到web.xml檔案中又有什麼好處呢? 好處就是:能夠讓你的程式更加靈活【更換需求,更改配置檔案web.xml即可,程式程式碼不用改】
配置web.xml檔案配置的引數資訊
<servlet> <servlet-name>MyServletDemo1</servlet-name> <servlet-class>com.jiuyue.servlet.MyServlet</servlet-class> <!--WEB應用程式在啟動時,就會裝載並建立Servlet的例項物件、 以及呼叫Servlet例項物件的init()方法。--> <!--<load-on-startup>1</load-on-startup>--> <!--此時不能使用<load-on-startup>--> <init-param> <param-name>name</param-name> <param-value>jiuyue</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>MyServletDemo1</servlet-name> <url-pattern>/MyServletDemo1</url-pattern> </servlet-mapping>
在Servlet中獲取ServletConfig物件,通過ServletConfig物件獲取在web.xml檔案配置的引數
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet"); //獲取ServletConfig物件 ServletConfig servletConfig = this.getServletConfig(); //根據配置獲取資料 String name = servletConfig.getInitParameter("name"); System.out.println("name: "+name); }
控制檯輸出(這裡發起doGet請求):
doGet
name: jiuyue
ServletContext物件
什麼是ServletContext物件? 當Tomcat啟動的時候,就會建立一個ServletContext物件。它代表著當前web站點
ServletContext有什麼用?
1、ServletContext既然代表著當前web站點,那麼所有Servlet都共享著一個ServletContext物件,所以Servlet之間可以通過ServletContext實現通訊。 2、ServletConfig獲取的是配置的是單個Servlet的引數資訊,ServletContext可以獲取的是配置整個web站點的引數資訊 3、利用ServletContext讀取web站點的資原始檔 4、實現Servlet的轉發【用ServletContext轉發不多,主要用request轉發】
Servlet之間實現通訊
ServletContext物件可以被稱之為域物件其實域物件可以簡單理解成一個容器【類似於Map集合】 實現Servlet之間通訊就要用到ServletContext的setAttribute(String name,Object obj)方法.
MyServlet01類
public class MyServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name= "jiuyue";
//在MyServlet01設定域物件
servletContext.setAttribute("myName",name);
}
}
MyServlet02類
public class MyServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取ServletContext物件
ServletContext servletContext = this.getServletContext();
//通過關鍵字獲取儲存在域物件的值
String value = (String) servletContext.getAttribute("myName");
System.out.println(value);
}
}
訪問MyServlet02可以獲取MyServlet01儲存的資訊,從而實現多個Servlet之間通訊。 剛開始直接訪問MyServlet02並沒有獲取到資料myName資訊,其實是要先訪問MyServlet01再來訪問MyServlet02才能獲取到資料myName資訊。
MyServlet01設定域物件在JSP中獲取資料值
public class MyServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name= "jiuyue";
//在MyServlet01設定域物件
servletContext.setAttribute("myName",name);
req.getRequestDispatcher("test.jsp").forward(req,resp);
}
}
test.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello,MyServlet01</h1><br>
<h1>${myName}</h1>
</body>
</html>
“掃碼關注“