servlet工作原理
原理:
1.當使用者請求一個servlet
2.伺服器會查找web.xml檔案,掃描該檔案中servlet-mapping的url-pattern
3.找到比對的url-pattern
4.找到與url-pattern綁定的servlet的邏輯名稱
5.根據servlet邏輯名稱查找servlet的聲明部分,找到與之比對的邏輯名
6.根據該邏輯名稱找到對應的servlet-class
7.更加servlet-class提供的類的全名加載servlet
8.執行個體化和初始化servlet
9.調用該servlet方法提供對應的服務
注意:servlet是由程式員定義的,使用者隻需要去通路,其他的工作(建立執行個體、初始化、接受請求)全部由伺服器完成
servletConfig
servletConfig:代表servlet的配置資訊,每一個servlet都有一個servletConfig對象
servletConfig對象是什麼?
封裝了servlet在web.xml檔案中配置
方法:
1.getServletName():擷取配置檔案中<servlet-name>元素的内容
2.getInitParameter():根據<init-param>中的<param-name>擷取<param-value>
<init-param>
<param-name>name</param-name>
<param-value>tom</param-value>
</init-param>
3.getInitParameterNames:表示傳回所有的<param-name>
4.getServletContext();
功能:
讀取servlet的初始化配置參數,
getInitParameter:根據servlet的初始化參數擷取初始化參數的值
getInitParameterNames:傳回servlet初始化參數的名稱
例如:通過servletConfig擷取初始化參數
/**
* Created by Administrator on 2017/7/12.
* //擷取初始化參數
*/
public class InitParmaServletDemo extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html;charset=UTF-8");
//擷取servletConfig
ServletConfig config=getServletConfig();
//根據參數的名稱擷取對應的值
String paramValue=config.getInitParameter("driver");
//擷取所有的參數的名稱的枚舉
Enumeration<String> paramNames=config.getInitParameterNames();
//周遊名稱的枚舉
while (paramNames.hasMoreElements()){
//取得一個參數的名稱
String paramName=paramNames.nextElement();
//根據參數名擷取值
String value=config.getInitParameter(paramName);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request,response);
}
}
通過servletconfig擷取servletContext
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;
/**
* Created by Administrator on 2017/7/12.
* 通過servletconfig擷取servletContext
*/
public class ServletConfigGetServletContext extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html;charset=UTF-8");
//擷取servletConfig
ServletConfig config=getServletConfig();
//通過servletconfig擷取servletContext
ServletContext context=config.getServletContext();
}
public void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request,response);
}
}
ServletContext
定義:
代表目前的web應用(一個web應用隻有一個servletContext對象),該對象随着web應用被伺服器加載而建立
作用:
擷取應用程式的配置資訊
例如:
/**
* Created by Administrator on 2017/7/12.
* 通過servletContext擷取配置資訊
*/
public class InitParamServletContext extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html;charset=UTF-8");
//擷取servletConfig
ServletConfig config=getServletConfig();
//通過servletconfig擷取servletContext
ServletContext context=config.getServletContext();
//擷取參數(第一種)
String url=context.getInitParameter("url");
String user=context.getInitParameter("user");
//第二種擷取servletContext的方法
ServletContext context1=getServletContext();
Enumeration<String> names=context.getInitParameterNames();
while (names.hasMoreElements()){
String name=names.nextElement();
String value=context.getInitParameter(name);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request,response);
}
}