Servlet開發(fā)中涉及的對象:
HttpservletRequest對象: 封裝請求信息
HttpServletResponse對象: 封裝響應(yīng)信息
ServletConfig對象: 封裝一個(gè)servlet配置參數(shù)信息
ServletContext對象: servlet的上下文對象
ServletConfig對象
servletconfig是配置對象,主要把servlet的初始化參數(shù)封裝到這個(gè)對象中撤奸。一個(gè)網(wǎng)站中可能會存在多個(gè)ServletConfig對象苗踪,一個(gè)ServletConfig對象就封裝了一個(gè)servlet的配置信息战惊。
配置初始化參數(shù)
<servlet>
<servlet-name>ConfigDemo</servlet-name>
<servlet-class>com.demo.f_config.ConfigDemo</servlet-class>
<!-- servlet的初始化參數(shù) -->
<init-param>
<param-name>path</param-name>
<param-value>e:/aaa.txt</param-value>
</init-param>
</servlet>
在servlet中獲取初始化參數(shù)
config.getInitParameter("name"); 根據(jù)參數(shù)名稱獲取參數(shù)值
config.getInitParameterNames(); 獲取所有參數(shù)名稱
ServletContext對象
ServletConfig對象叫servlet上下文對象。 一個(gè)網(wǎng)站只會創(chuàng)建一個(gè)ServletContext對象喂走。代表的是整個(gè)網(wǎng)站的環(huán)境信息。
獲取ServletContext對象
this.getServletConfig().getServletContext();
通過ServletConfig對象來獲取到ServletContext對象的。
ServletContext對象:啟動(dòng)的時(shí)候創(chuàng)建俩莽。
ServletConfig對象:調(diào)用init方法之前創(chuàng)建的,在ServletContext對象創(chuàng)建之前乔遮。
public ServletCofig{
ServletContext context;
public ServletConfig(context){
this.context=context;
}
public ServetContxt getServletContext(){
return;
}
}
ServletConfig config = new ServletConfig(context);
public MyServlet extends HttpSevlet{
publlic init(ServletConfig config){
SevletContext context= config. getServletContext();
}
}
ServletContext的5大作用
1)獲取web的上下文路徑
java.lang.String getContextPath()
/**
* 【context對象的作用1】-獲取web上下文路徑
* @author APPle
*
*/
public class ContextDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 獲取web上下路徑
*/
//1.1.獲取ServletContext對象
//ServletContext context = this.getServletConfig().getServletContext();
/**
* 推薦使用簡寫
*/
ServletContext context = this.getServletContext();
//1.2 獲取
String path = context.getContextPath();
System.out.println(path); // /demo
/**
* web上下文路徑就是項(xiàng)目在tomcat服務(wù)器中運(yùn)行的路徑扮超。注意不是開發(fā)目錄的項(xiàng)目名稱。
*/
//請求重定向
//response.sendRedirect("/demo/hello.html");
//作用:可以讓這個(gè)獲取文件的路徑更加靈活
response.sendRedirect(context.getContextPath()+"/hello.html");
}
}
2)獲取全局參數(shù)
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
<web-app version="2.5"
xmlns="[http://java.sun.com/xml/ns/javaee](http://java.sun.com/xml/ns/javaee)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
xsi:schemaLocation="[http://java.sun.com/xml/ns/javaee](http://java.sun.com/xml/ns/javaee)
[http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd](http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd)">
<!-- 配置web應(yīng)用全局的參數(shù) -->
<context-param>
<param-name>AAA</param-name>
<param-value>AAA's value</param-value>
</context-param>
<context-param>
<param-name>BBB</param-name>
<param-value>BBB's value</param-value>
</context-param>
<context-param>
<param-name>CCC</param-name>
<param-value>CCC's value</param-value>
</context-param>
全局參數(shù)對當(dāng)前web應(yīng)用下的所有servlet都有效的蹋肮。
/**
* 【context對象作用2】-獲取全局參數(shù)
* @author APPle
*
*/
public class ContextDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 得到全局參數(shù)
*/
ServletContext context =
this.getServletContext();
System.out.println(context.getInitParameter("AAA"));
//遍歷所有參數(shù)
Enumeration<String> enums = context.getInitParameterNames();
while(enums.hasMoreElements()){
String paramName = enums.nextElement();
String paramValue = context.getInitParameter(paramName);
System.out.println(paramName+"="+paramValue);
}
}
}
3)和域?qū)ο笙嚓P(guān)的
void setAttribute(java.lang.String name, java.lang.Object object) 保存數(shù)據(jù)
java.lang.Object getAttribute(java.lang.String name) 得到數(shù)據(jù)
void removeAttribute(java.lang.String name)清除數(shù)據(jù)
什么是域?qū)ο螅?br>
域?qū)ο笤诓煌馁Y源之間來共享數(shù)據(jù)出刷。保存數(shù)據(jù),獲取數(shù)據(jù)坯辩。
域?qū)ο蟮淖饔茫?主要用于保存數(shù)據(jù)和獲取數(shù)據(jù)巷蚪,用于在web應(yīng)用中不同資源之間共享數(shù)據(jù)。
例如:
Servlet1
name=eric
response.sendRedirect("/Servlet2?name=eric");
Servlet2
request.getParameter("name");
1)參數(shù)形式: 只能傳遞字符串?dāng)?shù)據(jù)
2)使用域?qū)ο笮问剑?br>
在Servlet1中保存數(shù)據(jù)
在Servlet2中獲取數(shù)據(jù)
public class ScopeDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 把數(shù)據(jù)存儲到ServletContext域?qū)ο? */
ServletContext context =
this.getServletContext();
//context.setAttribute("name", "eric");
List list = new ArrayList();
list.add("eric");
list.add("jacky");
list.add("rose");
context.setAttribute("list", list);
System.out.println("保存成功");
}
}
public class ScopeDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 從ServletContext域?qū)ο笾腥〕鰯?shù)據(jù)
*/
ServletContext context =
this.getServletContext();
//String name = (String)context.getAttribute("name");
List list = (List)context.getAttribute("list");
System.out.println(list);
}
}
ServletContext就是我們學(xué)習(xí)的第一個(gè)域?qū)ο蟆?br> ServletContext域作用范圍:在當(dāng)前的web應(yīng)用中有效濒翻。
Servlet中所有域?qū)ο螅?br>
HttpServletRequest對象: request域
ServletContext對象: context域
HttpSession對象: session域
Jsp中域?qū)ο螅?br> PageContext對象: page域
4)轉(zhuǎn)發(fā)相關(guān)的
RequestDispatcher getRequestDispatcher(java.lang.String path)
在servlet中實(shí)現(xiàn)頁面跳轉(zhuǎn)
請求重定向: response.sendRedirect(路徑);
請求轉(zhuǎn)發(fā): request.getRequestDispacher(路徑).forward(request,respone);
public class RedirectDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 請求重定向(瀏覽器行為)
*/
//response.sendRedirect("/demo/hello.html");
/**
* 注意:
* 可以跳轉(zhuǎn)到當(dāng)前項(xiàng)目的資源屁柏,也可以跳轉(zhuǎn)到其他項(xiàng)目的資源
*/
//response.sendRedirect("/demo/adv.html");
/**
* 把數(shù)據(jù)保存到request域?qū)ο? */
request.setAttribute("name", "jacky");
response.sendRedirect("/demo/GetDataServlet");
}
}
public class GetDataServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 從request域?qū)ο笾腥〕鰯?shù)據(jù)
*/
String name = (String)request.getAttribute("name");
System.out.println("name="+name);
}
}
/**
* 【context對象作用4】--請求轉(zhuǎn)發(fā)
* @author APPle
*
*/
public class ForwardDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 轉(zhuǎn)發(fā):服務(wù)器行為
*/
/*
ServletContext context = this.getServletContext();
RequestDispatcher rd = context.getRequestDispatcher("/hello.html");
rd.forward(request, response);
*/
/**
* 注意:轉(zhuǎn)發(fā)只能轉(zhuǎn)發(fā)都當(dāng)前項(xiàng)目的資源
*/
//this.getServletContext().getRequestDispatcher("../Demo/adv.html")
// .forward(request, response);
/**
* 把數(shù)據(jù)保存到request域?qū)ο? */
request.setAttribute("name", "jacky");
//this.getServletContext().getRequestDispatcher("/GetDataServlet")
// .forward(request, response);
/**
* 簡寫方式
*/
request.getRequestDispatcher("/GetDateServlet").forward(request, response);
}
}
求重定向 vs 請求轉(zhuǎn)發(fā) 區(qū)別
請求重定向:
1)地址欄改變,改變?yōu)橹囟ㄏ虻降刂?br>
2)可以重定向到當(dāng)前web應(yīng)用有送,其他web應(yīng)用淌喻,甚至是其他站點(diǎn)資源。
3)處于兩次不同的請求雀摘。不可以使用request域?qū)ο髞砉蚕頂?shù)據(jù)裸删。
請求轉(zhuǎn)發(fā):
1)地址欄不會改變。
2)只能轉(zhuǎn)發(fā)到當(dāng)前web應(yīng)用內(nèi)部資源阵赠。
3)處于同一次請求涯塔〖〉荆可以使用request域?qū)ο髞砉蚕頂?shù)據(jù)
5)讀取web項(xiàng)目的資源文件
java.lang.String getRealPath(java.lang.String path) 得到資源文件的絕對路徑
java.io.InputStream getResourceAsStream(java.lang.String path)
java.net.URL getResource(java.lang.String path)
注意:
1)在java項(xiàng)目中ecplise工具,把java命令的運(yùn)行根目錄設(shè)置到項(xiàng)目根目錄下匕荸。
2)在web項(xiàng)目中. 表示從tomcat的bin開始爹谭,因?yàn)閖ava命令從bin目錄開始執(zhí)行。