Day91.Servlet基本內容① -Servlet、jsp和表示式
Servlet基本內容①
1. Servlet 技術
a.什麼是Servlet
1. Servlet是JavaEE規範之一。 規範就是 介面
2. Servlet是JavaWeb三大元件之一。 三大元件分別是:Servlet程式、Filter過濾器、Listener監聽器。
3. Servlet是執行在伺服器上的一個Java小程式,他可以接收客服端送過來的請求,並響應資料給客戶端。
.
b.手動實現Servlet程式
1. 編寫一個類去實現Servlet介面
2. 實現service方法,處理請求,並響應資料
3. 到web.xml中配置servlet程式的訪問地址
.
c.Servlet 程式的示例程式碼:
- 常見錯誤1:url-pattern 中配置的路徑沒有以斜槓打頭。
.
- 常見錯誤2:servlet-name 配置的值不存在:
<servlet>標籤和<servlet-mapping>標籤的<servlet-name>標籤的內容不一致
.
- 常見錯誤3:servlet-class 標籤的全類名配置錯誤:
.
d.url地址到Servlet程式的訪問原理
.
e.Servlet 的生命週期
1. 執行Servlet構造器方法
2. 執行init()初始化方法
3. 執行service()方法
4. 執行destroy()銷燬方法
說明:
第一、第二步,是在第一次訪問時,建立Servlet程式會呼叫
第三步,都會呼叫service方法
第四步,在web工程停止的時候呼叫
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 構造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
service()方法是專門用來處理請求和響應的
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service == Hello Servlet 被訪問了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 destroy銷燬方法");
}
}
f.GET 和 POST 請求的分發處理
public class HelloServlet implements Servlet {
/*
service()方法是專門用來處理請求和響應的
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service == Hello Servlet 被訪問了");
//型別轉換
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//獲取請求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
getmethod();
}else if ("POST".equals(method)){
getmethod();
}
}
public void getmethod(){
System.out.println("get請求");
System.out.println("get請求");
System.out.println("get請求");
}
public void postmethod(){
System.out.println("post請求");
System.out.println("post請求");
System.out.println("post請求");
}
//省略getServletInfo、destroy、getServletConfig、init、HelloServlet方法
}
.
g.通過繼承 HttpServlet 實現 Servlet 程式
一般在實際開發專案中,都是使用繼承HttpServlet類的方式去實現Servlet程式。
- 編寫一個類去繼承HttpServlet類
- 根據業務需要重寫doGet或doPost方法
- 到web.xml中配置Servlet程式的訪問地址
Servlet 類的程式碼:
public class HelloServlet2 extends HttpServlet {
//doGET()方法 在GET請求的時候呼叫
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet()方法");
}
//doPost()方法 在Post請求的時候呼叫
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPOST()方法");
}
}
web.xml 中的配置
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.achang.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
.
h.使用 IDEA 建立 Servlet 程式
- 選單:new->Servlet 程式
- 配置 Servlet 的資訊:
自動在資料夾下生成HelloServlet3類與doPost()、doPost
public class HelloServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("helloservlet3的doPost方法");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("helloservlet3的doGET方法");
}
}
自動在web.xml檔案下生成<servlet>標籤,
然後自己建立servlet-mapping指定url-pattern和url-pattern即可
<servlet>
<servlet-name>HelloServlet3</servlet-name>
<servlet-class>com.achang.servlet.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<url-pattern>HelloServlet3</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
.
i.Servlet類的繼承體系
.
2. ServletConfig類
ServletConfig類從類名上來看,就知道是Servlet程式的配置資訊類
Servlet程式和ServletConfig物件都是由Tomcat伺服器負責建立,我們負責使用
Servlet程式預設是第一次訪問的時候建立,ServletConfig是每個Servlet程式建立時就建立一個對應的ServletConfIg物件
.
a.ServletConfig類的三大作用
- 可以獲取Servlet程式的別名servlet-name的值
- 獲取初始化引數init-param
- 獲取ServletConfig物件
- web.xml 中的配置:
<!-- servlet標籤給Tomcat伺服器配置Servlet程式 -->
<servlet>
<!-- servlet-name標籤 是給Servlet程式起一個別名 (一般是類名)-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class標籤 是Servlet程式的全類名 -->
<servlet-class>com.achang.servlet.HelloServlet</servlet-class>
<!--init-param 是初始化引數-->
<init-param>
<!--引數名-->
<param-name>username</param-name>
<!--引數值-->
<param-value>root</param-value>
</init-param>
<init-param>
<!--引數名-->
<param-name>url</param-name>
<!--引數值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
- Servlet 中的程式碼:
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
// 1. 可以獲取Servlet程式的別名servlet-name的值
System.out.println("HelloServlet程式的別名是: "+ servletConfig.getServletName());
// 2. 獲取初始化引數init-param
System.out.println("初始化引數username的值是: "+servletConfig.getInitParameter("username"));
System.out.println("初始化引數username的值是: "+servletConfig.getInitParameter("url"));
// 3. 獲取ServletContext物件
System.out.println(servletConfig.getServletContext());
}
.
3. ServletContext類
a.什麼是ServletContext?
1.ServletContext是一個介面,它表示Servlet上下文物件
2.一個web工程,只有一個ServletContext物件例項
3.ServletContext物件是一個域物件。
4.ServletContext是在web工程部署啟動的時候建立。在web工程停止的時候銷燬。
- 什麼是域物件?
域物件,是可以像Map一樣存取資料的物件。叫域物件
這裡的域指的是,存取資料的操作範圍,整個web工程。
存資料 取資料 刪資料
Map put() get() remove()
域物件 setAttribute() getAttribute() removeAttribute()
.
b.ServletContext類的四個作用
1.獲取web.xml中配置的上下文引數context-param
2.獲取當前的工程路徑, 格式:/工程路徑
3.獲取工程部署後在伺服器磁碟上的絕對路徑
4.像Map一樣存取資料
ContextServlet演示程式碼:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.獲取web.xml中配置的上下文引數context-param
ServletContext servletContext = getServletConfig().getServletContext();
String username = servletContext.getInitParameter("username");
System.out.println("context-param引數username的值是: "+username);
System.out.println("context-param引數password的值是: "+servletContext.getInitParameter("password"));
// 2.獲取當前的工程路徑, 格式:/工程路徑
System.out.println("當前工程路徑: "+servletContext.getContextPath());
// 3.獲取工程部署後在伺服器磁碟上的絕對路徑
/*
/ 斜杆被伺服器解析地址為:http://ip:port/工程名/ 對映到IDEA程式碼的webapp目錄
*/
System.out.println("工程部署的路徑是: "+servletContext.getRealPath("/"));
}
web.xml 中的配置:
<!--context-param是上下文引數(它屬於整個web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
- ServletContext 像 Map 一樣存取資料:
Context1Servlet程式碼:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取ServletContext物件
ServletContext context = getServletContext();
System.out.println(context);//org.apache.catalina.core.ApplicationContextFacade@77aaf677
System.out.println("儲存之前: context中獲取資料key1的value值是: "+context.getAttribute("key1"));//null
context.setAttribute("key1","value1");
System.out.println("Context1Servlet中獲取資料key1的value值是: "+context.getAttribute("key1"));//key1
}
Context2Servlet程式碼:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取ServletContext物件
ServletContext context = getServletContext();
System.out.println(context);//org.apache.catalina.core.ApplicationContextFacade@11f32f19
System.out.println("Context2Servlet中獲取資料key1的value值是: "+context.getAttribute("key1"));//key1
}
不管是Context1Servlet還是Context2Servlet的context地址值為: org.apache.catalina.core.ApplicationContextFacade@11f32f19
表示它是在web工程銷燬前都是一個物件,一個web工程就一個。
後續繼續學習更新!!!
相關文章
- jsp隱式物件-Servlet物件JS物件Servlet
- EL 表示式對照 JSP 內建物件表JS物件
- jsp進階教程和ServletJSServlet
- JSP 表示式語言概述JS
- Jsp和Servlet有什麼區別?JSServlet
- maven中新增Servlet和jsp依賴MavenServletJS
- VS 正規表示式替換內容
- 匹配<form>表單內所有內容正規表示式ORM
- 使用CSS /動態表示式修復內容CSS
- tomact和javaee、jsp、servlet對應的版本MacJavaJSServlet
- JSP(JSTL EL表示式 三個指令 六個動作標籤 九個JSP內建物件)JS物件
- 表示式和基本語句的規範
- 正規表示式:後面不要包含指定的字串內容字串
- wireshark 實用過濾表示式(針對ip、協議、埠、長度和內容)協議
- JSp頁面使用El表示式取不到值JS
- 6 年前,只會 JSP 和 Servlet 就可以找到工作JSServlet
- Java lambda表示式基本使用Java
- 基本正規表示式概念
- Jsp+JavaBean模式,Jsp+Servlet模式,MVC模式介紹JSJavaBean模式ServletMVC
- 基於jsp和servlet簡單的java web開發(idea)JSServletJavaWebIdea
- JSP規範、Servlet關係、基礎JSServlet
- Linux中基本正規表示式Linux
- 正規表示式基本規則
- 正規表示式基本概念
- JSP基本語法JS
- 6個使用正規表示式搜尋文字中內容的工具
- jsp+servlet登入註冊頁面JSServlet
- 小米商城專案(JSP+Servlet專案)JSServlet
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- 正規表示式的基本語法
- shell基礎 — 基本正規表示式
- 正規表示式小指令碼(對輸入內容進行處理)指令碼
- 正規表示式中使用變數擷取某字串前後內容變數字串
- SpringMVC中JSP頁面不顯示EL表示式的原因SpringMVCJS
- jsp+servlet+mysql多條件模糊查詢JSServletMySql
- Servlet與JSP進階五:瀏覽器CookieServletJS瀏覽器Cookie
- 解決javax.servlet.jsp.JspException cannot be resolved to a typeJavaServletJSException
- JDK1.8新特性:Lambda表示式語法和內建函式式介面JDK函式