Servlet是Sun公司提供的一門用於開發動態web網頁的技術。Sun公司在API中提供了一個servlet接口,咱們若是想使用java程序開發一個動態的web網頁,只須要實現servelet接口,並把類部署到web服務器上就能夠運行了。html
通俗一點,只要是實現了servlet接口的java程序,均稱Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小應用程序),Servlet是在服務器端運行的小程序。java
一、咱們先寫一個簡單的HTML,能夠在WebRoot新建,也能夠複製一個寫好的HTML,咱們用post提交方式,固然也能夠用get提交,你們能夠本身嘗試一下。程序員
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>登陸</title> </head> <body> <form action="http://localhost:8080/loginServlet/LoginServlet" method="post"> 用戶:<input type="text" name="username" /><br/> 密碼:<input type="password" name="password" /><br/> <input type="submit" value="登陸" /> </form> </body> </html>
//引入所須要的包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { //重寫doGet方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); //服務器端打印信息 //System.out.println("username=" + username); //System.out.println("password=" + password); //設置編碼格式 response.setContentType("text/html;charset=GB18030"); //返回html頁面 response.getWriter().println("<html>"); response.getWriter().println("<head>"); response.getWriter().println("<title>登陸信息</title>"); response.getWriter().println("</head>"); response.getWriter().println("<body>"); response.getWriter().println("歡迎【" + username + "】用戶登陸成功!!!"); response.getWriter().println("</body>"); response.getWriter().println("</html>"); } //重寫doPost方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
三、在WebRoot下的WEB-INF的web.xml,部署咱們的Servlet,啓動服務器。web
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> </web-app>
實例的demo:http://download.csdn.net/detail/jiuqiyuliang/7593641數據庫
==============================================================================================================================小程序
若是不知道怎麼配置java Web項目,能夠移駕到個人上篇博客(一步步教你使用MyEclipse搭建java Web項目開發環境(一)),下面咱們詳細介紹Servlet的基礎知識。瀏覽器
==============================================================================================================================安全
解讀API對於拒絕學習API的程序員們是一種煎熬,但它倒是咱們學習和進步的最好工具,且學且珍惜。服務器
你們能夠在點進去看一看,從上圖,能夠看出Servlet接口定義三個實現類,分別是FacesServlet, GenericServlet, HttpServlet。下面咱們簡單的介紹一下。多線程
(1)FacesServlet是一個用於管理利用JSF(JavaServer Faces)構建用戶界面的web應用程序請求處理生命週期的Servlet。(FacesServletis a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.),你們若是想深刻的學習,能夠點這裏。
(2)GenericServlet是HttpServlet的父類,包含了servlet的經常使用方法。GenericServlet使得程序員寫servlets更加簡單,它提供了初始化和銷燬生命週期的方法,以及實現了寫日誌文件的方法。
(3)HttpServlet指可以處理HTTP請求的servlet。這是開發人員在編寫Servlet時,一般應繼承這個類便可。
對於這三個實現類,只爲你們作一個簡單的介紹,若是想深刻的研究,直接看API就好。
客戶端經過URL地址訪問web服務器中的資源,因此若想訪問Servlet必需要把servlet程序映射到一個URL地址上,在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,如上面的實例。
*<servlet>用於註冊Servlet,包含了<servlet-name>和<servlet-class>兩個子元素,分別用於設置servlet的名稱以及servlet的類名。
*<servlet-mapping>用於映射上面<servlet>中的對外訪問路徑,一樣包含<servlet-name>和<url-pattern>兩個元素,分別用於設置servlet的名稱以及servlet的對外訪問路徑。
在servlet映射到URL有兩種格式:
1.「*.擴展名」
2.以正斜槓(/)開頭並以「/*」結尾。
servlet對url的匹配規則以及路徑問題,你們能夠上網查,有不少相關的資料,例如:http://blog.csdn.net/xh16319/article/details/8014107
servlet程序是由web服務器調用,web服務器實現了對servlet生命週期的管理。servlet的生命週期分爲四步:
1)實例化以及加載servlet,new的過程。
2)初始化init(ServletConfig)。
3)處理請求,調用servlet的service,doget,dopost方法將Request和Response,做爲參數傳遞。
4)退出服務,調用destory方法釋放資源。
注意:
一、servlet只實例化一次。感受有點單例模式的意思,你們能夠研究一下Tomcat的實現原理。
二、init方法也只執行一次。servlet實例只建立一次,因此init初始化只調用一次。
當多個客戶端併發訪問同一個Servlet時,web服務器會爲每個客戶端的訪問請求建立一個線程,並在這個線程上調用service方法,所以,service方法內若是訪問了同一個資源的話,就有可能引起線程安全問題。你們重點理解下面兩句便可:
(1) Servlet是單實例多線程的,若是存在能夠修改的成員變量將會出現線程安全問題。
(2) 使用Servlet最好保證Servlet是無狀態的,也就是沒有能夠修改的成員變量。
這篇博文只是介紹了Servlet基礎知識,你們還有什麼疑問能夠給我留言,我會及時給你們解決。
=============================================================================================================================
下篇博文,咱們作一個JDBC鏈接Oracle數據庫的實例,欲知後事如何,請看下回分曉!
=============================================================================================================================