實現servlet介面並優化程式碼解讀
3.2.1 方式一:直接實現類實現servlet介面,並全部重寫servlet介面中的方法
實現類:
//Servlet 介面是用來獲取瀏覽器請求(request)的資料,以及將處理完的資料響應(response)給瀏覽器
public class ServletDemo1 implements Servlet {
//第一次請求訪問
public void init(ServletConfig servletConfig) throws ServletException { }
//處理請求資料(業務邏輯的處理);每當獲取一個請求,返回一個響應資訊
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out
Web.xml配置檔案:
<!--配置servlet具體資訊-->
<servlet>
<!--註冊的servlet的名稱-->
<servlet-name>demo1</servlet-name>
<!--servlet
+ 域名(www.baidu.com or ip地址) +埠號(預設80.瀏覽器自動新增) + 資源位置(index.com) +
+ 鍵值對 (id = ?) --> <!--元件的訪問路徑--> <url-pattern>/demo1</url-pattern> </servlet-mapping>
瀏覽器訪問:
3.2.2 方式二:GenericServlet優化方案
3.2.2.1 自己定義的GenericServlet優化實現
實現:
1.自定義抽象類GenericServlet實現servlet介面,獲取servlet所有方法,並將service()方法定義為抽象方法
2.自定義servletdemo類繼承抽象類GenericServlet,實現並重寫service方法
實現類
public abstract class GenericServletDemo1 implements Servlet { public void init(ServletConfig servletConfig) throws ServletException { } public ServletConfig getServletConfig() { return null; } //抽象方法定義格式 // void destroy(); //抽象方法 -- 修飾符 abstract 返回值型別 方法名 (引數列表); public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ; //一般方法 public String getServletInfo() { return null; } public void destroy() { } }
繼承類
public class ServletDemo2 extends GenericServletDemo1 { public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("實現了servlet"); } }
Web.XML配置檔案
<!--配置servlet具體資訊--> <servlet> <servlet-name>demo2</servlet-name> <servlet-class>com.heima.cn.a_servlet.ServletDemo2</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping> <servlet-name>demo2</servlet-name> <url-pattern>/demo2</url-pattern> </servlet-mapping>
結果
網頁輸入 控制檯輸出
3.2.2.2 系統定義的GenericServlet優化實現
實現類
public class ServletDemo3 extends GenericServlet { public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("系統定義的servlet優化實現"); } }
web.xml配置檔案
<!--配置servlet具體資訊--> <servlet> <servlet-name>demo3</servlet-name> <servlet-class>com.heima.cn.a_servlet.ServletDemo3</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping> <servlet-name>demo3</servlet-name> <url-pattern>/demo3</url-pattern> </servlet-mapping>
結果:
網頁輸入資料 控制檯輸出結果
3.2.3 方式三: HttpServlet 優化方案
實現 ---- 區分表單(from)中提交的方法(method= get or method = post)
1.自定義抽象類HttpServlet繼承抽象類GenericServlet類,實現service方法
2.呼叫service方法,將引數型別(ServletRequest servletRequest, ServletResponse servletResponse)強轉為HttpServletRequest(提供請求資訊)和 HttpServletResponse(傳送響應資訊)介面
多型轉換:Interface HttpServletRequest implements ServletRequest(介面)
3.呼叫HttpServletRequest介面中的public String getMethod()方法,用來區分表單提交的方法
4.判斷表單提交方法型別,分別實現doGet()方法 和doPost()方法
5.自定義servlet類繼承抽象類HttpServlet,呼叫並重寫doGet()方法 和doPost()方法
6.注意點:表單當中的action引數需要和配置檔案web.xml中url地址一致
<form action="/demo4" method="get" > 表單資訊
<url-pattern>/demo4</url-pattern> 對映檔案資訊
抽象類
public abstract class HttpServlet extends GenericServlet(系統自定義優化實現) { public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //Interface HttpServletRequest implements ServletRequest(介面) ---> 擴充套件 javax.servlet.ServletRequest 介面,為 HTTP servlet 提供請求資訊。
多型強制轉換型別,呼叫HttpServletRequest中的getmethod方法,獲取發出請求的http方法名稱(get或post) HttpServletRequest request = (HttpServletRequest) servletRequest; //Interface HttpServletResponse implements servletResponse(介面)--> 擴充套件 ServletResponse 介面以提供特定於 HTTP 的傳送響應功能 HttpServletResponse response = (HttpServletResponse) servletResponse; service(request,response); } public void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //HttpServletRequest介面中的getmethod方法 // public String getMethod() --> 返回用於發出此請求的 HTTP 方法的名稱,例如 GET、POST 或 PUT。 String req = request.getMethod(); if(req.equalsIgnoreCase("get")){ //System.out.println("get方法獲取表單"); doGet(request,response); }else if (req.equalsIgnoreCase("post")){ //System.out.println("post方法獲取表單"); doPost(request,response); }else { System.out.println("servlet"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) { } public void doGet(HttpServletRequest request, HttpServletResponse response) { } }
實現類
public class ServletDemo4 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) { //super.doPost(request, response); System.out.println("獲取post方法提交的表單"); } public void doGet(HttpServletRequest request, HttpServletResponse response) { // super.doGet(request, response); System.out.println("獲取get方法提交的表單"); } }
index.html 表單資訊
<body> <form action="/demo4" method="get" > 跳轉的url地址 <input type="submit" value="提交"> </form> </body>
Web.xml 配置檔案(servlet資訊)
<!--配置servlet具體資訊-->
<servlet>
<servlet-name>demo4</servlet-name>
<servlet-class>com.heima.cn.a_servlet.ServletDemo4</servlet-class>
</servlet>
<!--配置servlet對映路徑-->
<servlet-mapping>
<servlet-name>demo4</servlet-name>
<url-pattern>/demo4</url-pattern> 表單的action
</servlet-mapping>
結果:
網頁資訊介面 控制檯資訊介面
系統定義的HttpServlet
自定義類
public class ServletDemo5 extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.println("這是系統的doGet方法");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/// super.doPost(req, resp);
System.out.println("這是系統的doPost方法");
}
}
配置檔案web.xml
<!--配置servlet具體資訊--> <servlet> <servlet-name>demo5</servlet-name> <servlet-class>com.heima.cn.a_servlet.ServletDemo5</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping> <servlet-name>demo5</servlet-name> <url-pattern>/demo5</url-pattern> </servlet-mapping>
表單資訊
<body> <form action="/demo5" method="get"> <input type="submit" value="註冊"> </form> </body>