1. 程式人生 > >TomCat伺服器搭建及初識servlet

TomCat伺服器搭建及初識servlet

Tomcat伺服器搭建
第一章 web開發概述
1-1 C/S架構和B/S架構
(1)C/S架構:Client/Server 客戶端/伺服器。要求客戶端電腦安裝 一個客戶端程式。
常見應用:QQ,迅雷,阿里旺旺等
 優點:
使用者體驗好,效果炫
應用伺服器執行資料負荷較輕,部分計算功能在客戶端完成。
 缺點:
佔用硬碟空間
維護麻煩
安裝使用依賴其他條件
(2)B/S架構:Browser/Server 瀏覽器/伺服器。通過瀏覽器與服務 器互動,不需要安裝其他程式
 常見應用:淘寶,京東 12306 等
 優點:
訪問只需要瀏覽器即可
維護非常方便
 缺點:
動畫效果受瀏覽器限制
應用伺服器執行資料負荷較重。大部分計算都在伺服器端,增 加伺服器壓力。使用Ajax可以改善部分使用者體驗。

甲方是一家正常運營的企業
企業中有200人

甲方委託我們乙方做一個OA專案
該專案公司200人都要用

我們作為乙方,假設我們是專案經理,我們考慮應該使用CS架構還是BS架構來完成這個OA專案???

CS

BS

1-2 web簡介
(1)什麼是web通訊(簡稱web)
WEB採用B/S通訊模式,通過超文字傳送協議(HTTP, Hypertext transport protocol)進行通訊。通過瀏覽器位址列編寫URL,向伺服器傳送一個請求,伺服器端根據請求進行相應的處理,處理完成之後,會向瀏覽器作出一個響應,及將伺服器端資源傳送給瀏覽器。
(2)什麼是web資源
儲存在伺服器上的資源,提供給瀏覽器訪問用的資源都叫做web資源.

在這裡插入圖片描述

a、靜態資源:HTML 內容不可變的資源

今日頭條:世界盃冠軍即將誕生

b、動態資源:JSP/SERVLET 內容可變的資源
String news = 從資料庫取得的今天的新聞資料

今日頭條:news

第二章 Tomcat伺服器概述
2-1 伺服器硬體和伺服器軟體概述
伺服器的作業系統:linux

2-2 市場上常見的web伺服器介紹
Tomcat:Apache組織提供一個免費的小型的伺服器軟體。
支援Servlet和JSP規範。
WebLogic:BEA公司的一個收費的大型的伺服器軟體,後被 Oracle收購。支援EE的所有的規範
WebSphere:IBM公司的一個收費的大型的伺服器軟體,支援EE的所有的規範。
JBoss:Redhat公司提供,是一個基於J2EE的開放原始碼的應用伺服器。使用JBoss的最大的好處是可以方便的管理EJB。

EJB

spring

2-3 Tomcat簡介
Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP 程式的首選。
支援Servlet和JSP 規範,且最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現。

2-4 Tomcat版本介紹
版本 完美對應jdk版本 支援servlet版本
6.0.x jdk5 (1.5) 2.5
7.0.x jdk6 (1.6) 2.5、3.0
8.0.x jdk7 (1.7) 2.5、3.0、3.1
9.0.x jdk8 (1.8) 2.5、3.0、3.1、4.0

servlet:2.5 最基礎的版本,所有的servlet開發的元件都會在此版本中體現出來.
servlet3.0以上的版本,支援註解式開發(Annotation),這種開發形式是為了給我們提供便利的.好多servlet應用的核心元件都被隱藏包裝起來了,我們是看不到的.

2-5 Tomcat資料夾結構

在這裡插入圖片描述
解析:
bin:可執行程式指令碼目錄
啟動指令碼:startup.bat
停止指令碼:shutdown.bat

conf:配置檔案目錄
	核心配置檔案:server.xml
	所有web專案預設配置檔案:web.xml
lib:依賴庫,tomcat和web專案中需要使用的jar包
logs:日誌檔案
temp:臨時檔案目錄,資料夾內內容可以任意刪除。
webapps:預設情況下發布WEB專案所存放的目錄。
work:tomcat處理JSP的工作目錄。

第三章 Tomcat伺服器應用
3-1 在webapps資料夾中模擬建立專案_釋出並訪問專案
實戰演示
(1) 在webapps資料夾下模擬建立一個專案,裡面有一個index.html資源(一會我們開啟瀏覽器要訪問的資源)
在這裡插入圖片描述
(2)啟動伺服器
在這裡插入圖片描述

對於伺服器的啟動,雙擊以上startup.bat
雙擊之後,可能會出現兩種結果
結果1:彈出了一個黑色背景的控制檯,控制檯始終存在,顯示我們伺服器啟動時的相關資訊.伺服器啟動成功
結果2: 彈出了一個黑色背景的控制檯,但是控制檯一閃而過,馬上消失掉.伺服器啟動失敗.
如果出現結果2:
查詢環境變數有沒有配置JAVA_HOME
JAVA_HOME要求配置的為jdk安裝的根路徑

在這裡插入圖片描述
在這裡插入圖片描述

如果配置完以上環境變數,啟動伺服器控制檯還是一閃而過.
檢視你的tomcat的路徑中有沒有出現中文或是空格
如果經過以上配置,控制檯還是一閃而過.
試著以管理員的身份來啟動tomcat
如果以管理員身份執行還是一閃而過,說明你的系統裡曾經安裝過與tomcat不相容的軟體或者是你的window作業系統的子版本號根本就不相容tomcat.等待下節課我麼將tomcat整合到eclipse中一定是好用的.

伺服器啟動之後,我們來開啟瀏覽器訪問相關專案下的資源

訪問方式:
協議://ip地址:埠號/專案名/具體的資源路徑

http://localhost:8080/project1/abc/index.html

3-2 Eclipse整合Tomcat的詳細步驟
實戰演示
window-》屬性在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

調出server檢視,該檢視用來操作tomcat伺服器
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
以上步驟操作之後,我們會看到如下兩項資訊
操作tomcat元件的檢視資訊
在這裡插入圖片描述
在這裡插入圖片描述

還有一項資訊是,我們在專案的選單欄多了一項

該專案是為我們提供服務的相關專案,千萬不要去碰這個專案,也不要刪除,不要關閉
在這裡插入圖片描述

為以上檢視元件做右鍵操作
我們會看到如下選項
start:開啟伺服器
stop:關閉伺服器
debug:以debug除錯的形式來啟動伺服器
add and remove:部署專案/移除專案
restart:重新啟動伺服器
restart in debug:以debug除錯的形式來重新啟動伺服器

對於伺服器的關閉
有兩種關閉方式
方式1:
按照上述點選stop的形式來正常關閉伺服器
方式2:
強制關閉伺服器
我們以後的實際專案開發應用的是方式2在這裡插入圖片描述

3-3 建立web專案的步驟
實戰演示
3-4 Eclipse釋出專案並訪問專案
實戰演示
3-5 WEB-INF資料夾的作用

3-6 404和500錯誤的說明

3-7 Servlet初識演示

第四章 JAVA EE 簡介
4-1 什麼是JAVA EE

4-2 JAVA EE API及13個技術規範
API是應用程式程式設計介面,在Java中呈現為一套類庫
任何一個API都包括三要素:API原始碼、API位元組碼、API幫助文件
JavaSE API:Java標準類庫
JavaEE API:支撐完成企業級專案開發的另一套類庫
JavaEE下的13個技術規範(表示能夠應用在JAVA EE中的核心開發技術)。
在這裡插入圖片描述

4-3 JAVA EE 和 JAVA WEB的關係
JAVA EE包含一系列的技術規定,比如jdbc,ejb,jndi,jsf一系列的技術,這些技術主要是為了解決90年代開發企業應用的一些難題的,其中主推的是ejb。但是,由於這些技術很多是由專家委員會拍腦袋做出來的,再加上時代的原因,很多技術根本不好用,甚至不能用,比如所謂的分散式ejb,多客戶端支援,在02年以後用的人越來越少,最後差不多也就沒人用了。
JAVA WEB就是用java來開發web程式,然後裡面使用了一些j2ee的技術,比如jsp,servlet等。

第五章 Tomcat對於執行緒併發問題的處理
5-1 Tomcat執行緒池概述

5-2 Tomcat對於執行緒併發數的設定
<Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort="8443"maxThreads=“200” acceptCount=“100”/>
maxThreads:tomcat起動的最大執行緒數,即同時處理的任務個數,預設值為200
acceptCount:當tomcat起動的執行緒數達到最大時,接受排隊的請求個數,預設值為100

5-3 Tomcat的執行緒併發處理_場景解析
情況1:接受一個請求,此時tomcat起動的執行緒數沒有到達maxThreads,tomcat會起動一個執行緒來處理此請求。
情況2:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,tomcat會把此請求放入等待佇列,等待空閒執行緒。
情況3:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,等待佇列中的請求個數也達到了acceptCount,此時tomcat會直接拒絕此次請求。


1.Servlet在web開發中的作用*
接收web端瀏覽器發出的請求,並做出響應

2.Java開發中如何寫一個Servlet*

servlet的建立步驟
  • 1.建立一個普通的java類,繼承javax.servlet.http.HttpServlet;
  • 2.重寫父類中的兩個方法,分別是doGet方法和doPost方法
  •  這兩個方法就是servlet用來接收並處理瀏覽器的請求的核心方法
    
  • 3.將方法體中的所有的內容去掉
  • 4.將方法中的引數的變數名修改為 request response
  • 5.完成方法體

3.Servlet物件生命週期*
☆☆☆☆☆
servlet的生命週期,表示的是servlet從建立到銷燬的全過程
第1步:啟動伺服器,servlet沒有建立
第2部:當我們的瀏覽器發生請求,用到指定servlet時候,servlet物件才開始建立。serlet建立後
當第二~第n次訪問的時候就不重新建立物件了,而是使用第一次建立的那個物件(單例)
第3步:當servlet物件建立完成之後,馬上呼叫init方法進行初始化操作。
4.我們以後的請求真正是由doGet/doPost方法來進行處理。
5.關閉伺服器,servlet物件銷燬
6.如果只是正常的關閉伺服器servlet在銷燬前,要呼叫distory的方法進行最後的處理工作
7.加入load-on-startup可以更改servlet的建立時機,由以前的用到時建立更改為啟動伺服器的時候就建立
(從單例來考量,是由懶漢式轉為餓漢式)
8.servlet是單例,但是一種假單例。
真單例是new不出來第二個物件,假單例,我們用的是以單例的形式存在的物件,但是可以手動new出來其他物件
servlet在外部類new出來其他類物件沒有任何意義。

4.web.xml檔案在伺服器啟動階段被解析*

   <load-on-startup>1</load-on-startup>就儲存在XML中的,在啟動伺服器的時候如果不加上前面內容就不會建立servlet物件

5.什麼是Gof*

《Design Patterns: Elements of Reusable Object-Oriented Software》
(即後述《設計模式》一書),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides
合著(Addison-Wesley,1995)。
這幾位作者常被稱為"四人組(Gang of Four)"。

6.會寫單例模式嗎*
單例是一種軟體設計模式,一個類只有一個例項,也就是說只有一個物件。
單例模式之餓漢式
public class FootBall{
private FootBall(){}//構造方法必須私有化,防止其他類呼叫。
private static FootBall fb = new FootBall();//靜態/私有的物件
public static FootBall getFootBall(){//靜態的方法
return fb;
}
}
單例設計模式之懶漢式
public class FootBall2{
private FootBall2(){}
private static FootBall2 fb;
public static FootBall2 getFootBall(){
if(fb==null){
system.out.print(“建立了fb”)
fb ==new FootBall2();
return fb;
}
}

7.單例包括真單例和假單例,Servlet屬於假單例*

  真單例是new不出來第二個物件,假單例,我們用的是以單例的形式存在的物件,但是可以手動new出來其他物件
  servlet在外部類new出來其他類物件沒有任何意義。

8.tomcat伺服器預設最多支援200個執行緒同時併發訪問,這個可以配置嗎,在哪裡配置?*

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
 redirectPort="8443"maxThreads="200" acceptCount="100"/>   

在tomcat伺服器 的配置檔案中 D:\tomcat\tomcat9\apache-tomcat-9.0.0.M10\conf\server.xml 下面的63行
修改成如上:
就是在後面加上 maxThreads=“200” acceptCount=“100”,預設是200但是經過開發試驗最好不要超過300,因為跟
伺服器的硬體等配置有關並不是越高越好,物極必反也是這個道理。

9.如何在伺服器啟動階段例項化(建立)Servlet*

在XML檔案中新增 在class標記下面1

10.HTTP協議包括請求協議和響應協議,瀏覽器傳送給伺服器的是請求協議,伺服器傳送給瀏覽器的是響應協議*

理解

11.get和post請求有什麼區別?怎麼選擇使用?*

get提交
引數傳遞
顯示的將引數掛在url路徑的後面
安全性 低
大量引數的傳遞可能傳遞的不全
引數的中文的支援性
對於我們的示例,get請求提交的中文引數servlet接收到之後,顯示的仍然是中文,沒有出現亂碼.
但是以上結果,完全在於是我們的tomcat9的環境完美支援get請求中文引數的傳遞.
如果企業裡面使用的是較低版本的tomcat,那麼中文引數有可能會出現亂碼.
我們要為get請求方式設定utf-8的字元編碼
在tomcat conf/server.xml 6x行
URIEncoding=”UTF-8”就可以解決tomcat版本低get中文引數出現亂碼的問題
執行效率
get請求執行效率較高

post提交
引數傳遞
引數沒有顯示的掛在url路徑的後面
(引數是以http協議請求體打包的形式進行傳遞)
安全性 高
不用擔心大量引數傳遞的問題(位址列不顯示,不用擔心超出瀏覽器位址列的字元數)
引數的中文的支援性
經過示例,post提交,中文引數出現了亂碼問題,servlet接收引數前,需要對接收的引數進行字元編碼處理.
以上程式碼僅針對post請求引數處理.
(3)執行效率
與get請求方式比較起來,執行效率相對較低.

在我們的實際專案開發中,對於get提交和post提交如何選擇:

如果不涉及到安全性問題,如果不涉及到大量的引數的傳遞問題,一律使用get方式提交效率較高,否則一律建立表單使用post方式提交.

在我們實際專案開發中,servlet模板習慣於這樣來改造:
this.doGet代替執行this.doPost

12.響應狀態碼404,500都是代表什麼*
執行流程
從瀏覽器發出的請求的路徑為:
http://localhost:8080/servlet1/myServlet1.do

	該路徑在web.xml中會進行檢索(檢索web.xml中的url-pattern)
	
	以上訪問路徑會自動的被我們的系統拆分成為兩部分
	第一部分 從開始到專案名  http://localhost:8080/servlet1 注意路徑後面沒有/
	第二部分 第一部分剩下的部分/myServlet1.do 注意前面有/
	
	系統會拿著第二部分路徑與web.xml中的url-pattern做匹配
	如果匹配不上,說明訪問的路徑不正確,會出現404現象。


	如果能夠匹配上,會根據servlet-name的配置找到相應的servlet類來處理瀏覽器的請求
	在servlet類中由doGet或者doPost方法來處理我們的請求 ,這時候如果出現500異常,那就是xml配置檔案有問題。

13.瀏覽器向web伺服器提交資料的格式是怎樣的(傳引數的格式)*

url?key1=value&key2=value2&key3=value3

14.能夠使用response向瀏覽器響應HTML,並且可以處理響應時的中文亂碼。*

request.setCharacterEncoding(“UTF-8”);
request.getParameter(“userName”);

15.能夠使用request介面獲取表單提交的資料*
request.getParameter(“userName”);

16.web伺服器啟動時報錯,如何進行排查*

如果伺服器中沒有專案存在,啟動伺服器報錯,說明伺服器本身出現了問題.
有可能是某些配置檔案被我們破壞掉.在某些情況下檔案被破壞掉了沒有辦法排查,
所以最簡單的方式是從新解壓一份tomcat伺服器,重新整合到eclipse.

如果伺服器中有專案存在,啟動伺服器報錯,說明是專案的問題,
就去檢視專案中的web.xml檔案配置有沒有錯誤.
url-pattern前面沒加/
servlet-name沒有匹配項
servlet-class配置錯誤,伺服器啟動不報錯,但是訪問返回500響應碼

17.修改web應用當中的哪些檔案需要重啟伺服器*
修改前端檔案,不用重新啟動伺服器
修改後端servlet檔案,不用重新啟動伺服器,
但是需要等待java檔案重新編譯成class檔案重新載入的過程.
在本階段,老師在修改完servelt檔案之後,為了保證程式測試的正確性,每一次都會重新啟動伺服器.
修改web.xml檔案,必須重新啟動伺服器.
注意:我們在對專案進行移入移除的過程中,必須首先關閉伺服器.

18.在eclipse當中如何修改一個web應用的名稱,以及在eclipse當中copy一個專案的時候需要注意什麼*

右鍵工程詳見2.5

19.url-pattern的編寫方式都有哪些*
/abc/servlet1.do:精確路徑匹配
/abc/:部分路徑匹配
/
:萬用字元匹配
*.do:字尾名匹配

20.ctrl+shift+delete刪除瀏覽器記憶體的

21.domain在JAVA中被稱作領域模型,就是資料庫裡的表,比如員工表對應JAVA中一個類,就是資料庫與java的一一對應模式


1.轉發和重定向在原理上有什麼區別,程式碼分別怎麼實現?*

最簡單理解:轉發—請求沒有中斷;而重定向—請求產生中斷了。獲取新路徑了

轉發  :一次請求一次響應;請求的路徑停留在第一次請求的路徑,伺服器內部資源指向了web-INf,直接訪問接收不到。

request.getRequestDispatcher("/myServlet1.do").forward(request,response);
伺服器直接內部指向資源。

重定向: 將重定向資源的路徑作為新資源的路徑,全程兩次請求兩次響應。請求的路徑停留在新資源的路徑

		response.sendRedirect("/project2/index.html");//必須是傳統的絕對路徑。

瀏覽器指向資源(重定向只傳給我們路徑,我們自己找資源)

2.ServletContext是什麼,代表什麼,該物件什麼時候被建立,建立幾次,什麼時候被銷燬。*
ServletContex是專案中的全域性管理者。 可以應用在每個servlet中,也服務於每個servlet。當伺服器啟動時,
伺服器會自動的為我們建立一個上下文物件以單例的形式存在於伺服器上,關閉伺服器的時候銷燬。
取得方式一。 ServletContext application= this.getServletContext(); 建立1次

3.在web.xml檔案中使用context-param配置給Servlet傳值,通過這種方式所有的Servlet物件都是可以共享這個資料的。*

		    這種方式是配置全域性引數   <context-param>
		       <param-name>encoding</param-name>
		       <param-value>utf-8</param-value>
			</context-param>

4.能夠向application範圍中繫結資料,從application範圍中讀取資料*
ServletContext application = this.getServletContext();
application.setAttribute(String key,Object value);
application.getAttribute(String key)Object;

5.ServletConfig是什麼,代表什麼,它和Servlet什麼關係*

ServletConfig物件是Servlet物件的配置物件.Servlet物件在建立完畢後,系統會馬上為我們創建出來一個相應的ServletConfig物件作為Servlet物件的配置物件.
ervletConfig物件是可以有多個的(每有一個servlet物件,就有一個ServletConfig物件)

在我們實際專案開發中,如果是對於企業級的專案開發,那麼ServletConfig物件肯定用不到.
ServletConfig物件主要是針對於將來的表現層框架的開發而使用的.

6.在web.xml檔案中通過init-param配置可以給Servlet傳值,這種方式傳遞的資料只有當前的Servlet物件可以使用,其它Servlet不能用。*

        這種方式是配置全域性引數在xml配置檔案中新增   <context-param>
		       <param-name>encoding</param-name>
		       <param-value>utf-8</param-value>
			</context-param> 
			ServletContext application = this.getServletContext();
			String str1 = application.getInitParameter("encoding");
			System.out.println(str1);
			獲得的結果就是utf-8.

7.什麼是字元編碼方式,常見的字元編碼方式有哪些?*

unicode/utf-8/JBK

8.亂碼是怎麼產生的,編碼和解碼分別是什麼*
不同編碼/解碼環境下進行資料交流就會產生亂碼。
編碼:web開發時出現的中文亂碼問題。

  1. get請求引數字元編碼的處理:conf/servr.xml 63行埠號的後面加入
    URIEncoding=“UTF-8”
  2. 在html中meta charSet=“UTF-8”;
    3.post請求引數字元編碼的處理:request.setCharacterEncoding(“UTF-8”);
    4.響應流字元編碼的處理。response.setContentType(“text/html;charSet=utf-8”);
    5.?characterEncoding=UTF-8"

總結在html中會用charSet=utf-8
在其他中比如xml中用encoding=“utf-8”;

編碼:將程式程式碼轉化為二進位制儲存在計算機的過程稱為編碼反之解碼。

9.資料儲存之後的亂碼怎麼解決*(資料儲存之後就到資料庫裡面了)

private static final String url = "jdbc:mysql:192.168.148.8:3306/test     這裡加入這句話?CharacterEncoding=UTF-8";

10.資料庫中的亂碼怎麼解決*
通過jdbc往資料庫裡面存值的字元編碼的處理
要求資料
後臺 utf-8
資料庫安裝的過程中,配置的是UTF-8環境
建立的資料庫為UTF-8的格式

在 private static final String url = "jdbc:mysql:192.168.148.8:3306/test     這裡加入這句話?CharacterEncoding=UTF-8";

11.資料傳遞過程中的亂碼包括三種方式:第一種方式為萬能方式。
第二種方式request.setCharacterEncoding(“encoding”),但這種方式只對請求體編碼,所以只能解決POST請求亂碼。
第三種方式修改server.xml檔案,但這種方式只能對請求行編碼,所以只能解決GET請求亂碼。*

  String str11=new String(str1.getBytes("ISO8859-1"),"utf-8");

12.怎麼設定web站點歡迎頁面*

把url路徑僅僅只是顯示到了專案,沒有指定具體的資源路徑,那麼我們配置的歡迎頁面會響應出來。

//以下方法結合了javaScript知識把預設的歡迎頁跳轉到下個頁面。//開發中常用。

13.web站點的歡迎頁面預設為index.html/index.htm/index.jsp,為什麼*

不論我們配置的歡迎頁是一種什麼型別的頁面,我們習慣於將歡迎頁命名為index,
因為index是我們web開發中一種約定俗成的初始頁名字的叫法.

14.web站點的歡迎頁面可以是一個Servlet*

  <welcome-file-list>
<welcome-file>index.html</welcome-file>
    <welcome-file>myLoginServlet.do</welcome-file>

url-pattern去掉“/”

15.Servlet存線上程安全問題嗎,為什麼不建議在Servlet中使用成員變數*
使用成員變數,在Servlet中存線上程安全問題
//以後不用servlet中的成員變量了,使用區域性變數,每根執行緒來了以後,區域性變數為每一個執行緒獨立的分配一份空間,
絕對不會出現執行緒安全問題。
public class MyServlet5 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	System.out.println("進入servlet5");
	
	String username = request.getParameter("username");
	
	System.out.println(username);
	
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	this.doGet(request, response);

}

}

16.能夠獨立的封裝DBUtil嗎?*

package com.wkcto.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {

private DBUtil(){}

static{
	
	try {
		Class.forName("com.mysql.jdbc.Driver");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
	
}

private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String user = "root";
private static final String password = "root";

//建立連線 返回連線
public static Connection getConn() throws SQLException{
	
	Connection conn = DriverManager.getConnection(url, user, password);
	
	return conn;
	
}


//關閉相關資源
public static void myClose(Connection conn,PreparedStatement ps,ResultSet rs) throws SQLException{
	
	//關閉資源的順序為  按照建立的順序 逆序關閉
	if(rs!=null){
		rs.close();
	}
	
	if(ps!=null){
		ps.close();
	}
	
	if(conn!=null){
		conn.close();
	}
	
}

}

null和沒有值是兩個不同的概念

比如 棧中有s1 當為空時表示不指向堆, 沒有值得情況是新建了一個物件,但是裡面沒有值指向了堆

點選 超連結後面可以掛引數