java學習之路(1)-jsoup,tomcat故障排除,servlet的簡單實用

java學習之路(1)

1.jsoup選擇器

select方法本來是element的,但是document是繼承element所以可以用document來選擇。

select方法的幾個速記點:

  1. https://www.open-open.com/jsoup/selector-syntax.htm 官方的cookbook做自己的參考手冊
  2. 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之後的動作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章