1. 程式人生 > >初識和利用Servlet,獲取和顯示頁面提交的資料以及對MySQL資料庫的簡單操作 7.04

初識和利用Servlet,獲取和顯示頁面提交的資料以及對MySQL資料庫的簡單操作 7.04

Servlet:web伺服器端的程式設計技術。是繼承了javax.servlet.http.HttpServlet類的Java類。由支援servlet的web伺服器(tomcat)呼叫和啟動執行。一個servlet負責對應的一個或一組url的訪問請求,並返回相應的響應內容。
C/S:客戶機和伺服器架構,伺服器負荷輕,維護升級成本高。
B/S:瀏覽器和伺服器架構,伺服器負荷重,維護升級成本低。
B/S:工作原理:
瀏覽器--伺服器--資料庫
通過Url來訪問伺服器,在瀏覽器裡傳送請求(傳遞引數)給伺服器,伺服器呼叫dao類(有引數先接收引數)操作資料庫。

servlet建立步驟:

專案結構圖:

1.建立一個繼承類(extends javax.servlet.http.HttpServlet):

2.重寫三個方法:
生命週期:訪問時開始:init()→service()→destroy()
1).public void init(){
super.init();
}
2).protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
super.service(req, resp);
}
3)public void destroy() {
super.destroy(); 
}
3.給servlet配備一個URL地址,供瀏覽器訪問servlet用。
開啟WebRoot/WEB-INF/web.xml檔案,新增<servlet>和<servlet-mapping>兩個標籤
<servlet>
<servlet-name>FirstServlet<servlet-name>
<servlet-class>com.xxx.servlet.web.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern><!-/first代表localhost:80/專案名稱/first>

</servlet-mapping>

實際例子:

eg.

500錯誤:伺服器內部錯誤。
404錯誤:找不到網頁,網頁地址錯誤。
一個類被修改後要重新啟動Tomcat釋出。

servlet的三個方法:
init()方法:
預設情況下:第一次訪問servlet時被呼叫(該servlet被初始化),且只能被呼叫一次。
service()方法:
servlet的主方法,每訪問一次就呼叫一次。
destroy()方法:
在伺服器關閉的時候,被呼叫(該servlet被銷燬)

網頁引數的接收與返回:(關鍵程式碼示例)
接收:HttpServletRequest request
String username = request.getParameter("name");
返回:HttpServletResponse response
PrintWriter out = response.getWriter();
out.print("接收到的名字:"+username+"<br>");
網頁的編碼集:
接收中文的處理:
req.setCharacterEncoding("UTF-8");(gb2312也可以)
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");

表單資訊的提交與頁面對錶單資訊的獲取主要步驟:
1.新建一個jsp網頁,繪製一個簡單的使用者登入表單。
2.新建一個servlet類,在service()方法中進行引數的獲取(request)和返回顯示(response).(注意該servlet類url地址的註冊)
3.通過表單屬性actoin提交輸入資訊到伺服器,並轉到所建立的servlet類。

4.servlet獲取引數,並在網頁中顯示。

網頁例項:




提交網頁資料,遍歷資料庫,返回顯示遍歷判斷結果:
1.新建jsp網頁,servlet類。(參考上一個例子)
2.建立操作資料庫的類(UserDao)(注意驅動,連線引數等的配置,詳情請參考7.03的那篇文章)
3.在UserDao中建立查詢的方法。(使用者名稱和密碼作為條件,同時滿足(and))
String sql = "select * from userInfor where userName = ? and userPassword = ? ";
4.在servlet類中的service方法中獲取網頁資料。(方法參考上一個例子)
5.通過UserDao user = UserDao.getInstance();
Map<String,String> map = new HashMap<String, String>();
map.put(key,value);分別鍵入鍵值對資料(userName和userPassword)啟用UserDao中的查詢方法遍歷資料庫。

6.根據查詢結果判斷使用者資訊是否存在,在網頁中顯示判斷結果。

資料庫表格及結果例項:

關於500錯誤:

由於我選擇的是本地的Tomcat,而不是系統自帶的,JDBC的驅動是從其他專案複製過去的,但初次執行的時候報了500錯誤:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver導致專案無法正常執行。

這個錯誤主要是由於我選擇的Tomcat所在路徑的lib資料夾下面沒有JDBC驅動:mysql-connector-java-5.1.5-bin.jar。

解決辦法:

必須把mysql-connector-java-5.1.5-bin.jar匯入到tomcat的lib目錄下面! 

在java專案中,只需要引入mysql-connector-java-5.1.5-bin.jar就可以執行java專案。

在web專案中,當Class.forName("om.mysql.jdbc.Driver");時myeclipse是不會去查詢字串,不會去查詢驅動的。所以

就需要把

mysql-connector-java-5.1.5-bin.jar拷貝到tomcat下lib目錄下了。


本地Tomcat lib資料夾: