推薦學習:《》
Servlet執行在伺服器端(tomcat)的java程式。是sun公司的一套規範,就是動態資源。
Servlet作用
用來接收使用者端的請求,處理請求,響應給瀏覽器的動態資源。
但Servlet本質就是java程式碼,通過java的API動態的向用戶端傳輸資料內容。
Servlet與普通的java程式的區別:
1,必須實現Servlet介面
2,必須在servlet容器(tomcat伺服器)中執行
3,servlet程式可以接收使用者請求的引數以及向瀏覽器輸出資料。
Servlet介面並不是JDK中的介面,所以我們需要匯入jar包。javaweb專案是在WEB-INF/lib目錄中存放jar包。tomcat是一個庫,裡面有Servlet的jar包,所以我們可以不用在lib目錄中匯入了。通過maven也可以依賴。
怎麼通過瀏覽器存取Servlet呢?
可以通過設定web.xml對映路徑,使用場景:不是自己寫的Servlet,或者jar包中的Servlet,你沒法在別人寫的程式碼上加註解,所以就得使用設定web.xml對映路徑的方式去使用別人寫的servlet.
<servlet> <!--自定義,一般為類名--> <servlet-name>servletDemo1</servlet-name> <!--一定是package + .類名--> <servlet-class>day08_servlet.ServletDemo1</servlet-class> </servlet> <!--給Servlet提供(對映)一個可供使用者端存取的URI--> <servlet-mapping> <!--和servlet中的name必須相同--> <servlet-name>servletDemo1</servlet-name> <!-- servlet的對映路徑 --> <!-- 全路徑匹配/servlet 或者/*萬用字元匹配 或者擴充套件名匹配*.do--> <url-pattern>/servlet</url-pattern> </servlet-mapping>
第二種方式@WebServlet註解。自己寫的Servlet通過註解@WebServlet方式比較方便
@WebServlet(name = "helloServlet", value = "/hello-servlet")
Servlet生命週期:
1,預設是第一次有請求存取這個servlet的時候建立,建立出來之後會將這個Servlet的物件儲存到tomcat容器當中。
2,當服務關閉時,Servlet物件才會銷燬
Servlet生命週期方法:
1,init()會在Servlet初始化出來的時候使用,會呼叫一次
能否設定Servlet在伺服器啟動的時候就建立呢?
可以在web.xml中設定,例如DefaultServlet(靜態資源存取)就是在tomcat的組態檔中設定好了
如果不用組態檔設定可以使用@WebServlet註解中的loadOnStarup設定。
2,service()會在Servlet接收到請求時候呼叫
3,destroy()會在servlet物件被銷燬之前呼叫
ServletConfig物件的介紹;用於獲取servlet設定時候的初始化引數的
idea新建一個Servlet快捷方式
HttpServletRequest
請求轉發:只能轉發到專案類的路徑,並且瀏覽器端url不跳轉,原理是伺服器請求轉發
request.getRequestDispatcher("/test.jsp").forward(request, response);
如果一個資源在WEB-INF目錄下,只能使用請求轉發才能存取到
request作為域物件,可以在不同的Servlet之間進行資料共用,但是它只能在同一次請求中進行資料共用。
HttpServletResponse
HttpServletResponse詳解_平庸的俗人的部落格-CSDN部落格_httpservletresponse
向用戶端寫資料
//用字元流向瀏覽器輸出文字 PrintWriter writer = response.getWriter(); //write()方法只能輸出字串,如果輸入int,float等型別,則會有問題 writer.write("嘻嘻"); //println方法可以輸出純數位,字串 writer.println(88); //1.獲取位元組輸出流 ServletOutputStream sos = response.getOutputStream(); //2.輸出資料 sos.write("hello你好".getBytes("utf-8"));
ServletContext作用
作為域物件存取資料,讓Servlet共用,所有的請求都可以進行資料共用
ServletContext servletContext = getServletContext(); servletContext.setAttribute("username","zhangsan"); servletContext.getAttribute("username");
獲得檔案的MIME型別(檔案下載)
ServletContext servletContext = getServletContext(); servletContext.getMimeType("檔名");
獲得全域性初始化引數
獲得web資源路徑,可以將web資源轉換為位元組輸入流
@WebServlet(name = "Test2Servlet", value = "/Test2Servlet") public class Test2Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 把檔案轉成流的幾種方式 */ //方式一 FileInputStream fileInputStream = new FileInputStream("E:\\java重新學習\\demo\\src\\main\\webapp\\2222.jpg"); //方式二,使用類載入器將檔案轉換成流 //只能讀取到resources目錄下面的檔案, //resources是類路徑,編譯後的路徑classes。 //Test2Servlet.class.getClassLoader()類載入器預設能找到類路徑(classes) //如果你要找webapp下路徑的檔案得../../ InputStream resourceAsStream = Test2Servlet.class.getClassLoader().getResourceAsStream("2222.jpg"); //使用ServletContext可以獲取webapp裡面資源的真實路徑 ServletContext servletContext = getServletContext(); String realPath = servletContext.getRealPath("2222.jpg"); //然後通過真實路徑 FileInputStream fileInputStream1 = new FileInputStream(realPath); //或者servletContext是webapp路徑 InputStream resourceAsStream1 = servletContext.getResourceAsStream("2222.jpg"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
在web專案中,將檔案轉換成流,通常使用這兩種方式:
1,如果檔案在resources中,就使用類載入器
2,如果檔案在webapp目錄下,就使用ServletContext
ServletContext介紹及用法_白襯衫丶的部落格-CSDN部落格_servletcontext
推薦學習:《》
以上就是簡單介紹Java Servlet程式的詳細內容,更多請關注TW511.COM其它相關文章!