jsp+Servlet學習(一)簡單實例

現在以實現功能效果爲目的,至於裏面的原理,底層的細節暫不考慮,先學會咋麼使用。細節,理論方面的在以後慢慢領悟。

直接上代碼。這是一個jsp+servlet的簡單實例。項目結構如下:

①開發工具eclipse,新建一個動態web項目,配置服務器。

②創建自定義的servlet類,這裏創建TestServlet,代碼如下:

public class TestServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("get into testServlet doPost method.");
		String name = req.getParameter("name");
		String[] sports = req.getParameterValues("sport");
		System.out.println("name:"+name);
		System.out.print("sport:");
		for(String s : sports){
			System.out.print(s+" ");
		}
		System.out.println();
		System.out.println("---------------");
		
	}
}

③配置web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
	<servlet>
		<servlet-name>testServlet</servlet-name>
		<servlet-class>com.zhongqian.servlet.TestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>testServlet</servlet-name>
		<url-pattern>/testServlet.do</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

④創建index.jsp頁面,如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>fristPage</title>
</head>
<body>
<form method="post" action="testServlet.do">
	name:<input type="text" name="name"/><br/>
	favorite sport:<input type="checkbox" name="sport" value="basketball"/>basketball
	               <input type="checkbox" name="sport" value="football"/>football
	              <br/>
	<input type="submit" value="submit"/>
</form>
</body>
</html>

運行效果如下:

點擊提交後,在控制檯打印:

ok,第一個實例運行成功。~


     以前我們寫代碼都是從main函數開始運行,那麼在servlet中沒有main方法啊,他是如何運行的呢?它受控制於另一個java應用,這個java應用稱爲容器(Container)。

     Tomcat就是這樣一個容器。Web服務器應用得到一個指向servlet的請求時,服務器不是把這個請求交個servlet本身,而是交給部署該servlet容器。要由容器向servlet提供HTTP請求和響應,而且要求容器調用servlet的方法(如doPost()或doGet())

     我們知道由容器來管理和運行servlet,那麼容器做了哪些事情呢?①通信支持。利用容器提供的方法,我們能輕鬆地讓servlet與web服務器對話。②生命週期管理。容器控制着servlet的生與死。它會負責加載類。實例化和初始化servlet、調用servlet方法,以及使servlet實例能夠被垃圾回收。③多線程支持。容器會自動地爲它接受的每個servlet請求創建一個新的java線程。④聲明方式實現安全。利用容器,可以使用xml不是秒殺文件來配置安全性,而不必將其硬編碼寫到servlet類代碼中。⑤jsp支持。將jsp頁面轉換成servlet。

   容器處理請求過程如下:


由上可知用戶發送請求時,容器會根據請求找到相應的servlet,並創建或分配線程來處理請求。那麼servlet是在什麼時候創建的呢?

我們創建自定義servlet時,繼承了HttpServlet,那麼我們繼承了哪些東西呢?如下:


servlet生命週期的三個重要時刻:


我們知道創建一個對象需要調用構造函數,然後調用init()方法,這個方法和destroy()方法在servlet整個生命週期中只調用一次。如果我們在配置servlet時,添加了<load-on-startup>容器在啓動時就會創建servlet實例,並調用init方法。如果沒有,則需要用戶第一次發送請求時,才創建該servlet實例,用戶第二次及以後訪問時都不會再創建servlet實例,請求到來後,容器會根據請求找到相應的servlet,並創建相應的線程來處理請求,然後調用service()方法,來判定是調用doPost()或doGet()方法。當容器停止運行時,servlet調用destroy方法,銷燬。這個過程中,servlet都是單實例的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章