Servlet學習
1. Servlet與jsp的關系
2. Servlet的聲明周期
3. 一個簡單的Servlet的使用方法
什么是Servlet? 什么又是JSP?
繼承了javax.servlet的一些類的程序 , 已經具有了Servlet的特征
但是Servlet的可視性不是太好, JSP可以彌補這一點 , jsp是Java Server Pagers , 是一種使用java作為腳本的語言, 在web服務器中可以轉化為Servlet , 在傳統的HTML網頁中使用<% java語言 %> 就可以嵌入java代碼了
Servlet是服務器端的小程序 , 可以用來通過多種方法擴充一個Web服務器.
PS:這句話告訴我們:
1. Servlet 是一個java寫的程序
2. Servlet是運行在服務器端的 , 而不是Client
3. 寫Servlet的最終目的是為了讓服務器幫我們做事情
Servlet與JSP的關系:相同點: JSP最終會轉化為一個Servlet
不同點:
1 Servlet是持久的 , 僅需要Web服務器加載一次
2 Servlet是可擴展的 , 因為java是面向對象的
3 JSP是為了解決Servlet中的編程困難為開發的技術 , jsp是腳本語言 , Servlet是java語言
4 Servlet必須在編譯之后才可以進行
5 第一次運行時 , JSP需要轉化為Servlet然后在編譯 , 才可以運行 . 而Servlet直接就編譯了 .(所謂的第一次就是web容器中沒有存在一模一樣的文件)
6 servel寫業務邏輯十分強大 . jsp寫視圖層效果很好
Servlet生命周期:
Servlet是javax.Servlet.httpServlet的子類.
1 裝載Servlet
2 調用構造函數 實例化一個Serlet對象 , 這個對象的名字有<servelt-name/>指定
3 調用init()方法
4 服務Service()
5卸載destoory()
Demo:
目錄結構:
Web.xml
----------------------------Test1.java----------------------------------------------------------
package com.controller;
import java.io.IOException;
import java.io.PRintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Test1
*測試聲明周期
*/
@WebServlet("/Test1")
public class Test1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Test1() {
super();
System.out.println("----------------construction----------------");
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("---------init------------");
System.out.println(this.getClass());
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
super.destroy();
System.out.println("----------------destroy-----------");
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("------service---------------");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
System.out.println("---------------默認調用doget()------------");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
out.println("-------------------書寫內容-------------------------") ;
out.flush();
out.close();
}
}
index.jsp
效果圖:
PS: 請注意地址欄的變化
這個時候發現沒有調用doget()方法
原因是: 于是這樣寫了一下:
發現還是沒有>>>>>>>>>>>>>>>這時你發現你寫的這個類上的Service方法是這樣寫的:
對! 就是覆蓋了了父類的方法了 ,如此一來,Servlet的Service()只會運行Syso了
為此應該改成:
這是這個類成了這樣的:
package com.controller;import java.io.IOException;import java.io.PrintWriter;
import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
/** * Servlet implementation class Test1 *測試聲明周期 */@WebServlet("/Test1")public class Test1 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Test1() { super(); System.out.println("----------------construction----------------"); // TODO Auto-generated constructor stub }
/** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub System.out.println("---------init------------"); System.out.println(this.getClass()); }
/** * @see Servlet#destroy() */ public void destroy() { super.destroy(); System.out.println("----------------destroy-----------"); // TODO Auto-generated method stub }
/** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub super.service(request, response); System.out.println("------service---------------"); }
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); System.out.println("---------------doget()------------"); }
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); out.println("-------------------content-------------------------") ; out.flush(); out.close(); }
}
---------------------------------------------------
效果是:
在啟動之后
顯示

后臺輸出信息為:

點擊連接之后:

控制臺輸出信息是

新聞熱點
疑難解答