JavaWeb(1)

1.簡介

JDBC接口:Java代碼和數據庫之間交互的規則
Servlet接口:服務器軟件和Java代碼之間交互的規則
http協議:瀏覽器和服務器軟件之間交互的規則

2.Web開發常用的概念

Web資源:
存在于Web服務器, 供外界訪問的資源就是Web資源.
例如: 存在于Web服務器內部的: html,js,圖片, 視頻等資源.
分類:
靜態資源: 指web頁面中供人們瀏覽的數據是始終不變的.
例如: 圖片, 視頻, 音頻, html文件, js文件等.
例如:優酷上掛的電影,寫的html頁面。
動態資源: 指web頁面中供人們瀏覽的數據是由程序產生的, 不同的時間點訪問web頁面看到的內容各不相同.
Javaweb領域的動態資源: 指通過Java代碼生成html, 例如: JSP/Servlet, ASP, PHP等.
例如:12306買票:不同時刻票數不同。
常用的Web服務器:
Tomcat:它是一個免費,開源的web服務器,支持servlet規范和jsp規范,它不支持JavaEE的13種規范, 所屬公司為: Apache公司。
//tomcat軟件早期屬于sun公司,是sun公司的架構師詹姆斯·鄧肯·戴維森開發的,后來sun公司為了推動Java語言的發展,無償將Tomcat捐助給Apache公司。
Weblogic: 大型的收費服務器, 它完美支持JavaEE的所有規范,所屬公司:Oracle。
Websphere:大型的收費服務器,它完美支持JavaEE的所有規范,所屬公司: IBM。

3.Servlet簡介

Servlet 概述:服務器認識Java代碼的規則

步驟:
1.新建一個類實現Servlet接口
2.重寫接口中的所有方法
3.在web.xml中注冊和映射
eg:  <!--設置Demo1Servlet的信息-->
    <!--設置具體的要訪問的: Java代碼-->
    <servlet>
        <servlet-name>Demo1Servlet</servlet-name>
        <servlet-class>com.itheima_01.Demo1Servlet</servlet-class>
    </servlet>
    <!--設置瀏覽器訪問Java代碼的具體: 路徑-->
    <servlet-mapping>
        <servlet-name>Demo1Servlet</servlet-name>
        <url-pattern>/demo1Servlet</url-pattern>
    </servlet-mapping>
注意: 
        request: 請求, 瀏覽器給服務器傳輸的數據.
        response: 響應, 服務器給瀏覽器傳輸的數據.
4.Servlet的細節:

4.1 根據ip和端口號, 找到對應的軟件: tomcat.
4.2 tomcat根據項目名找到對應的項目, 進而可以找到web.xml文件.
4.3 再根據web.xml文件中的資源路徑找到對應類的全路徑.
4.4 服務器將其(第三步)找到的 全路徑的類.

5.Servlet生命周期

5.1構造Servlet,然后使用init方法將其初始化
5.2處理來自客戶端的對service()方法的所有調用.
5.3從服務中取出Servlet,然后使用destroy()方法銷毀它,最后進行垃圾回收并終止它.
規律:
1) 每次訪問Servlet, 都會調用service()方法.
2) 第一次訪問, 會調用構造和初始化方法, 只會調用一次.
3) 當前Servlet類被銷毀時才會調用銷毀方法.

6. servlet和httpServlet的關系

每次我們都需要新建一個類, 然后去實現Servlet接口, 重寫接口中所有的方法, 最后在配置web.xml文件. 這樣做比較麻煩, 我們就想著, 能不能優化這個步驟呢?
新建一個 servlet即可(程序會自動讓該類去繼承HttpServlet, 然后自動配置web.xml文件).

關系:
    Servlet接口:      
        //定義了服務器和Java代碼交互的規則
    
    GenericServlet類:    
        //一般的servlet, 只是實現了方法, 注意: 不針對任何協議.
    
    HTTPServlet類:
        //針對HTTP協議做的實現.
        //HTTP有8種不同的請求方式, 其中get和post是最常見的請求方式.

    自定義的Servlet:  
        //例如:Demo1Servlet類
        //只需要重寫: doGet()方法和doPost()方法即可.

    service()方法和 doGet(),doPost()方法的聯系?
        1. 在service()方法中, 獲取請求的方式.
        2. 判斷:
            如果是get請求方式, 調用doGet()方法.
            如果是post請求方式, 調用doPost()方法.
7. 給瀏覽器響應中文內容
doGet()方法:
    作用: 處理get方式的請求
    
    哪些請求方式屬于get方式?
        1. <form>表單, method="get"
        2. 超鏈接<a>
        3. 通過地址欄直接訪問.

doPost()方法:
    作用: 處理post方式的請求
    
    哪些請求方式屬于post方式?
        表單<form>, method="post"
        
配置服務器編解碼一致://response.setContentType("text/html;charset=utf-8");
8. URL-Pattern的書寫方式

我們目前寫的<url-pattern>是全路徑方式訪問, 可以寫多個.
//全路徑訪問方式: http://ip:端口號/項目名/文件名
例如:

        <servlet-mapping>
            <servlet-name>Demo3</servlet-name>
            <url-pattern>/demo3</url-pattern>
            <url-pattern>/demo3/aaa</url-pattern>
            <url-pattern>/demo3/aaa/bbb</url-pattern>
            <url-pattern>/demo3/aaa/bbb/ccc</url-pattern>
        </servlet-mapping>

可以優化為: 通過 通配符匹配, 要求前半部分一樣.

    格式: 
        // <url-pattern>/名字/*</url-pattern>
    特點: 
        前半部分(*之前的部分)一樣, 
        后半部分(*之后的部分)可以隨便寫(因為 * 代表所有)

也可以優化為: 通過 擴展名匹配, 要求后綴名一樣.

    格式:
        <url-pattern>*.do</url-pattern>
        //后綴名可以自定義.

優先級如下:
全路徑 > 通配符 > 擴展名
總結:
如果級別相同, 取相似度最高的.

9. 獲取參數

用戶在瀏覽器可能通過<form>標簽提交到服務器一些數據, 怎么知道用戶提交的是什么標簽, 什么值呢?
這就需要用到: 獲取參數.

HTTPServletRequest類中的方法:
    String getPrrameter(String name);   //根據表單項name的屬性值, 獲取非多選框的值.
    String[] getParameterValues(String name);  //根據表單項name的屬性值, 獲取多選框的值.
    Map getParameterMap();  //由服務器創建的map, 表單項的name屬性值作為key, 用戶填寫或者選擇的值作為值.



面試題:

1. Writer,    字節緩沖流,      字符緩沖流的默認緩沖區的大小分別是多少?
    2KB       8kb(8192字節)    16KB(8192字符)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容