在Servlet中連接MySQL數據庫


今天學到Servlet,簡單說下如何在Servlet程序中連接數據庫。

 

首先,先解決Tomcat的部署。我們所寫的Servlet程序,如何才能在Tomcat服務器上運行呢?

1、進入Tomcat所在目錄-->webapp目錄-->在里面新建一個文件夾,名字隨便取(我這里的是my)-->在里面新建一個名為WEB-INF文件夾(這是規范)

-->在其文件夾內新建一個classes文件夾,一個lib文件夾,一個web.xml文件。

classes文件夾用來存放編譯好的class文件,lib文件夾用來存儲程序中要用到的jar包。web.xml是對Servlet程序的配置。

2、接下來在數據庫中創建相應的庫,表,並插入記錄。然后編寫Servlet程序連接數據庫。

 1 package com.HelloSevrlet;
 2 import javax.servlet.ServletException;
 3 import javax.servlet.http.HttpServlet;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpServletResponse;
 6 import java.io.IOException;
 7 import java.io.PrintWriter;
 8 import java.sql.*;
 9 
10 /**
11  * Created by Lin-953 on 2016/3/13.
12  */
13 public class ServletToJDBC extends HttpServlet {
14     @Override
15     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16         resp.setContentType("text/html");
17         resp.setCharacterEncoding("gb2312");
18         Connection connection = null;
19         Statement statement = null;
20         ResultSet resultSet = null;
21         PrintWriter printWriter = resp.getWriter();
22         try {
23             Class.forName("com.mysql.jdbc.Driver");
24             String url = "jdbc:mysql://127.0.0.1/testing";
25             connection = DriverManager.getConnection(url, "root", "57295320.");
26             statement = connection.createStatement();
27             resultSet = statement.executeQuery("SELECT  Sname FROM test");
28             printWriter.print("<html><head><title>Servlet連接數據庫</title></head>");
29             printWriter.print("<body><table border=1 align=\"center\"><tr><td>Sname</td></tr>");
30             while (resultSet.next()) {
31                 printWriter.print("<tr>");
32                 printWriter.print("<td>" + resultSet.getString("Sname") + "</td>");
33                 printWriter.print("</tr>");
34             }
35             printWriter.print("</table>");
36             printWriter.print("</html>");
37 
38         } catch (ClassNotFoundException e) {
39             e.printStackTrace();
40         } catch (SQLException e) {
41             e.printStackTrace();
42         } finally {
43             try {
44                 if (resultSet != null) {
45                     resultSet.close();
46                     resultSet = null;
47                 }
48 
49                 if (statement != null) {
50                     statement.close();
51                     resultSet = null;
52                 }
53 
54                 if (connection != null) {
55                     connection.close();
56                     connection = null;
57                 }
58             } catch (SQLException e) {
59                 e.printStackTrace();
60             }
61         }
62         printWriter.close();
63     }
64 
65     @Override
66     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
67         doGet(req, resp);
68     }
69 }

為什么從HttpServlet繼承?

GenericServlet中描述的比較通用的Servlet程序,對於特定的Http請求無任何反應。而HttpServlet類從GenericServlet類繼承而來,並且實現了Servlet接口。可以對特定的Http請求做出響應。

 

為什么重寫doGet和doPost這兩個方法,而不是其他的方法?

想要解決這個問題,必須先了解一個Servlet的生命周期。

Servlet的生命周期分為三個階段:初始,響應及終止。

初始階段:在此階段Servlet容器會對Servlet類進行裝載,裝載完成后對其初始化。

      1、當Servlet容器啟動的時候,會對Servlet進行裝載。

      2、當客戶端首次請求訪問Servlet時,Servlet容器會對Servlet類裝載。

      3、當有Servlet類文件更新時,Servlet容器會對Servlet重新裝載。

 

      裝載完成之后,調用init()方法對Servlet對象進行初始化。

 

響應階段:當客戶端請求訪問Servlet資源時,Servlet對象會調用Service方法響應用戶請求,

而Service方法會調用doPosst或doGet方法,這也是為什么要重寫這兩個方法的原因。在此階段,

Servlet容器將用戶請求包裝成一個HttpRequest對象,最后將結果包裝成一個HttpResponse對

象返回客戶端。

 

終止階段:當Web容器或者Sevlet容器關閉之后,Servlet對象會調用destory()方法來釋放該Servlet對象所占的內存空間。

 

 

到這里了,又有個疑問了,web容器和Servlet容器到底是什么東東呢?

 

web容器是用來部署和管理Web應用程序的,Servlet容器是管理Servlet的生命周期的。

 

3、Tomcat和Intellij IDEA的配置

  打開IDEA,新建一個WebApplication項目,新建成功后,在web目錄下的WEB-INF目錄下新建一個classpath文件夾和一個lib文件夾

          -->File-->Project Structure-->Modules-->Dependencies-->選擇“+”號-->JARordirectorys添加所需jar包

          (我這里的是Tomcat,mysql--connector--java-bin.jar,),將我們剛才新建的lib的絕對路徑也添加上去。-->

          切換到Module--path,在Compiler Output欄中選擇“use modules compiler output path”,然后指定我們剛才新建

          的class目錄。

  將WEB-INF文件夾下的web.xml文件的內容拷貝到my中的WEB-INF文件夾下的web.xml文件中。根據自己所寫的Servlet程序進行配置。以下

是我的配置信息。

 1 <?xml version="1.0" encoding="GBK"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5          version="3.1">
 6 
 7     <servlet>
 8         <servlet-name>HelloServlet</servlet-name>
 9         <servlet-class>com.HelloSevrlet.HelloSevlet</servlet-class>
10     </servlet>
11     <servlet-mapping>
12         <servlet-name>HelloServlet</servlet-name>
13         <url-pattern>/HelloSevlet</url-pattern>
14     </servlet-mapping>
15 
16     <servlet>
17         <servlet-name>TestLifeCircleSevlet</servlet-name>
18         <servlet-class>com.HelloSevrlet.TestLifeCircleSevlet</servlet-class>
19     </servlet>
20     <servlet-mapping>
21         <servlet-name>TestLifeCircleSevlet</servlet-name>
22         <url-pattern>/TestLifeCircleSevlet</url-pattern>
23     </servlet-mapping>

一個servlet標簽和一個servlet-mapping標簽是一對,servlet-name標簽的內容可以隨便寫,但必須和servlet-mapping標簽內的servlet-name標簽的內容一致。servlet-class標簽的內容是類所處的位置。url-pattern中的/代表的是客戶端請求訪問某個Servlet的地址的父路徑(相對Servlet路徑來說)。因此url-pattern是設置訪問此servlet程序的路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM