文章目錄
java學習之路(1)
1.jsoup選擇器
select方法本來是element的,但是document是繼承element所以可以用document來選擇。
select方法的幾個速記點:
- https://www.open-open.com/jsoup/selector-syntax.htm 官方的cookbook做自己的參考手冊
- Jsoup.parse 是html和xml的解析手段,可以直接傳入字符串的html,也可以使用new file的方式指定文件路徑傳入。
String path1 = JsoupDemo1.class.getClassLoader().getResource("FirstXML.xml").toURI().getPath();Document parse = Jsoup.*parse*(new File(path1),"utf-8");
3.解析文件之後得到的是Document對象,可以使用dom方法和選擇器來進行數據抽取。
Elements name = parse.getElementsByTag("name");
String text = name.text();
Elements head = document.select("head");
System.out.println(head);
4.對於選擇器的具體語法可以在https://jsoup.org/apidocs/裏面查詢selector 類,然後可以看到Selector syntax。 https://jsoup.org/apidocs/org/jsoup/select/Selector.html。
2.java的命名規範
1.類名稱是單詞首字母大寫,比如PaymentOrder。
2.方法第一個單詞首字母小寫,後面單詞的首字母大寫。如sendMessage。
3.常量名:全大寫,下劃線分割
4.包名小寫
3.XPath
1.可以用來解析xml和html。
2.使用Jsoup的Xpath需要額外導入jar包。
3.參考文檔: https://www.w3cschool.cn/xpath/
4.tomcat
4.1 安裝bug
1黑窗口一閃而過:
原因: 沒有正確配置JAVA_HOME環境變量
解決方案:正確配置JAVA_HOME環境變量
2.啓動報錯:
原因:端口占用
解決: 暴力:找到佔用的端口號,並且找到對應的進程,殺死該進程
溫柔:修改自身的端口號 找到 conf/server.xml 將
一般會將tomcat的默認端口號修改爲80。80端口號是http協議的默認端口號。 * 好處:在訪問時,就不用輸入端口號
4.2 關閉
1.正常關閉: * bin/shutdown.bat * ctrl+c
2.強制關閉: * 點擊啓動窗口的×
4.3項目部署,建議直接結合開發工具
1.手動:https://www.bilibili.com/video/BV11741127ic?p=114
2.結合idea:
5.Servlet
1.簡介
Servlet實質上就是接口,定義了java類被瀏覽器訪問到tomcat的規則。
將來我們自定義一個類,實現servlet類接口,重寫方法。
2.在web.xml寫註釋配置servlet
其中,pattern定義的是瀏覽器的輸入模式,然後name定義的是servlet類的名字,利用這個名字在上面找到servlet的類。當瀏覽器輸入地址的時候,通過主機端口找到對應的資源。在webxml中找demo的資源,利用資源名找到對應的類,然後通過反射機制,將全類名對應的字節碼加載進內存,創建對象,調用service方法。
3.在tomcat已經運行的情況下瀏覽器沒能訪問服務
自己tomcat一直沒有找到路徑的原因是因爲採用了war_exploded方式,所以正確的路徑是 http://localhost:8080/TomcatPractice_war_exploded/hello。
在tomcat的按鈕可以按下去的時候,尤其是本地的控制檯已經提示成功連接的時候,說明tomcat和程序已經跑起來了。這個時候如果瀏覽器無法訪問服務就要考慮是否是輸錯了地址。
4.sevlet的初始化方法
默認情況下只有在某個類被訪問的時候纔會調用,所以只是將服務器打開是不會使用初始化方法的。在xml中可以指定servlet的創建時機。
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>slowsail.javaweb.servlet.HelloServlet</servlet-class>
<!-- 指定servlet的創建時機
1.第一次訪問的時候創建配置值爲負數。
2.在服務器啓動的時候創建則配置爲非負數。
-->
<load-on-startup> -1</load-on-startup>
</servlet>
servelet的init方法只執行一次,說明servelet是單例的。
service destroy只有在服務器正常關閉的時候纔會執行。在servlet銷燬之前執行。
5.sevlet的線程安全問題
多個用戶同時訪問時可能存在線程安全問題:解決方案:儘量不在servlet對象中定義成員變量,而是在方法中定義局部變量。即使定義了成員變量,也不要對其賦值。
6.方便的註解配置
在類中進行註解。
@WebServlet(urlPatterns = "/demo")
public class SevletDemo implements Servlet {
其中註解也可以簡寫
其中註解也可以簡寫
@WebServlet("/demo")
public class SevletDemo implements Servlet {
7.Servlet的體系結構
Servlet – 接口 | GenericServlet – 抽象類 | HttpServlet – 抽象類
GenericServlet:將Servlet接口中其他的方法做了默認空實現,只將service()方法作爲抽象將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可
HttpServlet:對http協議的一種封裝,簡化操作
1. 定義類繼承HttpServlet
2. 複寫doGet/doPost方法
區別於servlet接口,上述的兩個類都是抽象類,所以繼承用的是extends。
實際我們多用HttpServlet,因爲實際上我們多用get和post方法。在service中我們常常需要判斷到底是用何種方法,而HttpServlet只用我們實現在判斷完是用post還是get之後的動作。