全球球精選!狂神說 javaweb

2022-12-14 11:11:24 來源:51CTO博客

javaweb

1、基本概念

web開發:


【資料圖】

web靜態web動態web淘寶,不斷變化技術棧:Servlet/JSP ASP PHP

1.2、web應用程序

web應用程序:可以提供瀏覽器訪問的程序

能訪問的任何頁面都存在于世界的某個角落URL這些同意的web資源會被放到同一個文件夾 Tomcat一個web 組成html css jsjsp servletjava程序jar包配置文件(Properties)

外部訪問需要服務器統一管理

1.3、靜態web

2、web服務器

ASP:

微軟:HTML中嵌入VB腳本

PHP

PHP開發速度快,功能強大,跨平臺,代碼簡單無法承載大訪問量的情況

JSP/Servlet

B/S

C/S

sun公司主推的B/S基于Java承載三高帶來的影響語法像ASP

2.2、web服務器

一種被動的操作 處理用戶強求和信息

IIS

微軟的 ASP window自帶

Tomcat

百度百科

手寫Tomcat

3、Tomcat

啟動關閉

Tomcat:8080

mysql:3306

hTTP:80

HTTPS:443

可以配置主機的名稱

默認主機名為:默認網站

高難度面試題

請你談談網站是如何進行訪問的!

輸入域名,回車檢查本機C:\Windows\System32\deivews\ect\hosts配置文件下有沒有這個映射有:直接返回對應的IP地址,在這個地址中,有我們需要訪問的web程序 直接訪問
127.0.0.1   www.mink.com
沒有:去DNS服務器上找,找到的話就返回,找不到返回找不到

3.4、發布一個web網站

先模仿

將自己寫的網站,放到Tomcat的webapps(應用的文件夾)下

網站應該有的結構

--webapps:Tomcat服務器的web目錄    -ROOT    -kuangstudy:網站的目錄名        -WEB-INF            -calsses:Java程序            -lib.xml :網站配置文件        -index.html  默認的首頁        -static            -css                -style.css            -js            -img        -.......

4、HTTP

4.1、什么是HTTP

HTTP 簡單的請求響應協議,通常運行在TCP之上

文本超文本

https:安全的

443

4.2、兩個時代

http1.0HTTP/1.0 :客戶端與服務器連接后,只能獲得一個web資源,斷開連接http2.0HTTP/1.1:客戶端與服務器連接后,能獲得多個web資源

4.3、HTTP請求

客戶端--發請求(request)--服務器

百度:

Request URL: https://www.baidu.com/  請求地址Request Method: GET 請求方式/POSTStatus Code: 200 OK 狀態碼:200Remote(遠程) Address: 110.242.68.3:443Referrer Policy: strict-origin-when-cross-origin
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cache-Control: max-age=0Connection: keep-aliveCookie: PSTM=1642766731; BAIDUID=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_UPN=12314753; BIDUPSID=09E509314F3EB3812F3612BCD6996E78; __yjs_duid=1_87aeb27da8e0a5310018c003dc9c8a141642819771266; BDSFRCVID_BFESS=vM4OJexroG0RE6oHNZuLhC45X-mPxN5TDYLEOwXPsp3LGJLVgaSTEG0PtfppquI-2ZlgogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=JJkO_D_atKvDqTrP-trf5DCShUFsKnolB2Q-XPoO3KJCsDQvyMTEbfAJLN8tXIrLLTbw_xbgylRp8P3y0bb2DUA1y4vpK-ogQgTxoUJ25tJ2qt5Vqj5Ah--ebPRi3tQ9QgbXopQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MC09j6KhDTPVKgTa54cbb4o2WbCQQ-Jd8pcN2b5oQT8wQHjyBU605G635K-ayT6VV-n8jqOUWfAkXpJvQnJjt2JxaqRC5bj6Sh5jDh3MbR8QKqoAe6jzaIvy0hvc0J5cShnkDMjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjGtOtjDttb32WnTJ25rHDbTw5tI_-P4DeUTWBxRZ56bHWh0MLqK-Dpn8MtoBMMJ3jJAL2lOOBJTnKUT1366OMCblK-RGQj-d3xJKQh343bRTLnQM-PjhOjC4W4vJhP-UyP5-Wh37aJRlMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafDDbbD0xj6LBePtjMfbWetoQ265tWjrJabC3EfTJXU6qLT5X5tn8bxQqWgo0aPcS0K-hoKoOjTOTyl0njxQyWt7EtTRlanvy2DQGDbOCjMonDh8n3H7MJUntKHcAoj6O5hvvER5O3M7_DMKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_Etj-OJJutoKvt-5rDHJTg5DTjhPrM54FJWMT-MTryKKJ43CQoOhrL5fvsLT30W2cLQnvwJGnRhlRNB-3iV-OxDUvnyxAZbUQgLUQxtNRJ0tJM-45zKDoLh-JobUPULxo9LUvXtgcdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLK-oj-DK6DTu53q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_HOME=1; H_PS_PSSID=35839_35104_31254_34584_35491_35872_35541_35796_35315_26350_35743; BA_HECTOR=018h01808lala5855p1h0m9ok0qHost: www.baidu.comsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
1、請求行
請求行中的請求方式:GET請求方式:GETPOST,HEAD,DELETE,PUT,TRACT...get:請求能夠攜帶的參數比較少,大小有限制,會在瀏覽器的URL顯示內容,不安全,但高效post:相反
2、消息頭
Accept:告訴瀏覽器,他所支持的數據類型Cache-Control:緩存控制    Connection:告訴瀏覽器斷開還是連接

4.4、HTTP響應

服務器--響應--客戶端

百度

Bdqid: 0xe82971940005867b  緩存控制Connection: keep-alive    連接:保持連接Content-Encoding: gzip    編碼Content-Type: text/html;charset=utf-8 類型
1.響應體
Accept:告訴瀏覽器,它所支持的數據類型Accept-Encoding:支持哪種編碼格式 GBK UTF-8 GB2312 IS08859-1Accept-Language:告訴瀏覽器,它的語言環境Cache-Control:緩存控制Connection:告訴瀏覽器,請求完成是斷開還是保持連接HOST: 主機..../.Refresh:告訴客戶端,多久刷新1次;Location:讓網頁重新定位;
2、響應狀態碼(重點)

200:成功 200

3**:請求重定向

重定向:重新到新位置去302

4**:找不到資源404

資源不存在

5**:服務器代碼錯誤 500 502:網關錯誤

常見面試:

當你的瀏覽器中地址欄輸入地址并回車的一瞬間到頁面展示出來,經歷了什么

5、Maven

我為什么要學習這個技術?
在Javaweb中需要導入大量jar包,需要手動導入如何能讓一個東西自動幫我導入和配置jar包所以有了maven

5.1、Maven項目架構管理工具

就是方便導入jar包的

Maven的核心思想:約定大于配置

有約束,不要去違反

Maven會規定好應該如何寫Java

5.2、下載安裝Maven

官網

下載完解壓即可:

狂神建議:電腦上的所有環境都放在喲個文件夾下

5.3、環境變量配置

在我們的系統環境變量配置中配置如下配置:

M2_HOME maven目錄下的bin目錄MAVEN_HOME maven的目錄在系統的path中配置%MAVEN_HOME%\bin

5.4、阿里云鏡像

鏡像:mirrors作用加速在setttins.xml文件中找到標簽對,進行修改:
             nexus-aliyun        *,!jeecg,!jeecg-snapshots        Nexus aliyun        http://maven.aliyun.com/nexus/content/groups/public      

5.5、本地倉庫

在本地的倉庫,遠程倉庫;

建立一個本地倉庫:

D:\Java_IDE\apache-maven-3.8.4\maven-repo

5.6、在IDEA中使用Maven

啟動idea‘創建一個Maven項目等待初始化完畢觀察倉庫的變化,多了什么東西?IDEA中的maven設置注意更改默認位置over

5.7、創建一個普通的maven項目

這個只有在web下才有

5.8、在idea中標記

配置Tomcat

解決警告問題為什么會有這個問題:我們訪問一一個網站,需要指定一個文件夾名字;****

5.10、POM文件

maven由于約定大于配置,我們之后的可能遇到我們寫的配置文件無法導出

                                        src/main/resources                                    **/*.properties                    **/*.xml                                false                                        src/main/java                                    **/*.properties                    **/*.xml                                false                        

5.12、IDEA操作

目錄樹

5.13、解決遇到的問題

Maven 3.6.2解決方法:退Tomcat閃退Idea中每次都要重復配置Maven在IDEA的全局默認配置去配Maven項目中Tomcat中不能配置.亂碼:
resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");
.
Maven倉庫的使用

官網:??https://mvnrepository.com/??

6、什么是servlet

6.1、servlet簡介

sun開發動態web的一門技術sun在這些api中提供了一個接口叫servlet,開發的兩個步驟編寫一個類,實現servlet接口把開發好的java類部署到web服務器中

把實現了servlet接口的Java程序叫做 servlet

6.2、HelloServlet

servlet接口在sun公司有兩個默認的的實現類:

HttpServlet,GenericServlet

構建一個普通的maven項目,刪掉里面的里面的scr目錄,以后就在這里面建立model,這個空的工程就是文件的主工程關于maven父子工程的理解:父項目中會有
        servlet-01    
子項目中會有
沒了  javaweb-02-servlet  com.mink  1.0-SNAPSHOT

繼承差不多

Maven環境優化
修改web.xml為最新 (與tomcat匹配)
  
將整個maven的架構搭建完整
編寫一個servlet程序
編寫一個普通類實現servlet接口,這里我們直接繼承HttpServlet
public class HelloServlet extends HttpServlet {    //由于get或者post知識請求的實現的不同方式,可以相互調用    public HelloServlet() {    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        PrintWriter writer = resp.getWriter();        writer.println("你好,mink");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        super.doPost(req, resp);    }}
編寫servlet的映射為何什么要映射?我寫的是Java,但是要通過瀏覽器訪問,瀏覽器需要連接web服務器,所以我們需要在web服務器中注冊我寫的servlet,還需要給他一個瀏覽器訪問的路徑
    hello    com.mink.servlet.HelloServlet            hello        /hello    
配置tomcat啟動測試 ok

6.3、servlet原理

servlet是由web服務器調用,web服務器在收到瀏覽器請求之后會:

6.4、mapping問題

一個servlet可以指定一個映射路徑一個servlet可以指定多個映射路徑
            hello        com.mink.servlet.HelloServlet                hello        /hello                hello        /hello/1                hello        /hello/2                hello        /hello/3    
一個servlet可以指定通用映射路徑
        hello        /hello/*    
請求默認路徑
            hello        /*    
指定后綴或前綴等
            hello        /*    
優先級問題指定了固有的映射路徑優先級最高,如果找不到就會走默認的處理請求;
        error        com.mink.servlet.ErrorServlet                error        /*    

6.5、ServletContext

web容器在啟動的時候,它會為每個web程序都創建一個對應的ServletContext對象, 它代表了當前的web應用;

1、共享數據
在這個servlet保存的數據可以在另一個拿到
public class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //this. getInitParameter()        初始化參數        //this. getServletConfig()                Servlet配置        //this. getServLetContext()        Servlet上下文        ServletContext context = this.getServletContext();        String name="韓明";        context.setAttribute("name",name);//將一個數據保存在context中        resp.getWriter().print("hello");        System.out.println("hello");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
public class GetServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        ServletContext context = this.getServletContext();        String name = (String) context.getAttribute("name");        resp.getWriter().print(("名字"+name));    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
Archetype Created Web Application      hello    com.mink.servlet.HelloServlet        hello    /hello        getc    com.mink.servlet.GetServlet        getc    /getc  
2、獲取初始化參數
      url    jdbc:mysql//localhost:3306/mybatis  
public class ServletDemo03 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        ServletContext context = this.getServletContext();        String url = context.getInitParameter("url");        resp.getWriter().print(url);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
3、請求轉發
public class ServletDemo04 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        System.out.println("進去了04");        ServletContext context = this.getServletContext();        context.getRequestDispatcher("/gp").forward(req,resp);//        RequestDispatcher gp = context.getRequestDispatcher("gp");//        gp.forward(req,resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
    sd3    com.mink.servlet.ServletDemo03        sd3    /gp        sd4    com.mink.servlet.ServletDemo04        sd4    /sd4  
4、讀取資源文件

Properties

在java目錄下新建properties在resources下新建properties

兩個都被打包到理同意路徑下:classes,我們俗稱這個路徑為classpath

思路:需要一個文件流

public class ServletDemo05 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");        Properties prop = new Properties();        prop.load(is);        String uname = prop.getProperty("username");        String pwd = prop.getProperty("password");        resp.getWriter().print(uname+":"+pwd);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

訪問測試即可ok!!!

6.6、HttpResponse

web服務器接收到客戶端的http請求,針對這個請求分別創建一個代表請求的request對象,代表響應的一個HttpServletResponse;

我們如果要獲取客戶端親求過來的參數,找如果IP要給客戶端響應一些信息:找HttpServletResponse
1、簡單分類

負責向瀏覽器發送數據的方法

ServletOutputStream getOutputStream() throws IOException;    PrintWriter getWriter() throws IOException;

負責向瀏覽器發送一些響應頭的信息

//interface ServletResponsevoid setCharacterEncoding(String var1);    void setContentLength(int var1);    void setContentType(String var1);    void setBufferSize(int var1);//interface HttpServletResponse  void setIntHeader(String var1, int var2);    void addIntHeader(String var1, int var2);    void setStatus(int var1);

http狀態碼

public interface HttpServletResponse extends ServletResponse {    int SC_CONTINUE = 100;    int SC_SWITCHING_PROTOCOLS = 101;    int SC_OK = 200;    int SC_CREATED = 201;    int SC_ACCEPTED = 202;    int SC_NON_AUTHORITATIVE_INFORMATION = 203;    int SC_NO_CONTENT = 204;    int SC_RESET_CONTENT = 205;    int SC_PARTIAL_CONTENT = 206;    int SC_MULTIPLE_CHOICES = 300;    int SC_MOVED_PERMANENTLY = 301;    int SC_MOVED_TEMPORARILY = 302;    int SC_FOUND = 302;    int SC_SEE_OTHER = 303;    int SC_NOT_MODIFIED = 304;    int SC_USE_PROXY = 305;    int SC_TEMPORARY_REDIRECT = 307;    int SC_BAD_REQUEST = 400;    int SC_UNAUTHORIZED = 401;    int SC_PAYMENT_REQUIRED = 402;    int SC_FORBIDDEN = 403;    int SC_NOT_FOUND = 404;    int SC_METHOD_NOT_ALLOWED = 405;    int SC_NOT_ACCEPTABLE = 406;    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;    int SC_REQUEST_TIMEOUT = 408;    int SC_CONFLICT = 409;    int SC_GONE = 410;    int SC_LENGTH_REQUIRED = 411;    int SC_PRECONDITION_FAILED = 412;    int SC_REQUEST_ENTITY_TOO_LARGE = 413;    int SC_REQUEST_URI_TOO_LONG = 414;    int SC_UNSUPPORTED_MEDIA_TYPE = 415;    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;    int SC_EXPECTATION_FAILED = 417;    int SC_INTERNAL_SERVER_ERROR = 500;    int SC_NOT_IMPLEMENTED = 501;    int SC_BAD_GATEWAY = 502;    int SC_SERVICE_UNAVAILABLE = 503;    int SC_GATEWAY_TIMEOUT = 504;    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;    void addCookie(Cookie var1);    boolean containsHeader(String var1);    String encodeURL(String var1);    String encodeRedirectURL(String var1);    /** @deprecated */    @Deprecated    String encodeUrl(String var1);    /** @deprecated */    @Deprecated    String encodeRedirectUrl(String var1);    void sendError(int var1, String var2) throws IOException;    void sendError(int var1) throws IOException;    void sendRedirect(String var1) throws IOException;    void setDateHeader(String var1, long var2);    void addDateHeader(String var1, long var2);    void setHeader(String var1, String var2);    void addHeader(String var1, String var2);    void setIntHeader(String var1, int var2);    void addIntHeader(String var1, int var2);    void setStatus(int var1);    /** @deprecated */    @Deprecated    void setStatus(int var1, String var2);    int getStatus();    String getHeader(String var1);    Collection getHeaders(String var1);    Collection getHeaderNames();    default void setTrailerFields(Supplier> supplier) {    }    default Supplier> getTrailerFields() {        return null;    }}
2、常見應用
向瀏覽器輸出消息下載文件要獲取下載文件的路徑文件名讓瀏覽器支持我們下載的東西獲取下載文件的輸入流創建緩沖區獲取OutputStream對象將FileOutputStream流寫入到buffer緩沖區使用OutputStream將緩沖區中的數據輸出到客戶端
下載文件
public class FileServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        1. 要獲取下載文件的路徑        String realPath = "D:\\git\\gitcode\\kuangstudy\\javaweb\\javaweb-02-servlet\\response\\target\\classes\\bmw.jpg";        System.out.println("下載路徑為:"+realPath);//        2. 文件名        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);        System.out.println("文件名為:"+fileName);//        3. 讓瀏覽器支持我們下載的東西        resp.setHeader("Content-Disposition","attachment;filename"+ URLEncoder.encode(fileName,"utf-8"));//        4. 獲取下載文件的輸入流        FileInputStream is = new FileInputStream(realPath);//        5. 創建緩沖區        int len;        byte[] buffer = new byte[1024];//        6. 獲取OutputStream對象        ServletOutputStream os = resp.getOutputStream();//        7. 將FileOutputStream流寫入到buffer緩沖區//        8. 使用OutputStream將緩沖區中的數據輸出到客戶端        while ((len= is.read(buffer))>0){            os.write(buffer,0,len);        }        is.close();        os.close();    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
3、驗證功能驗證碼

驗證怎么來的

前端后端實現,需要java的圖片類
4、實現重定向

一個web資源收到客戶端請求后,通知客戶端去訪問另一個web資源,這就叫重定向

常見場景:

用戶登錄

response

void sendRedirect(String var1) throws IOException;    resp.sendRedirect();狀態碼:302
public class RedirectServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        resp.setHeader("Location","/respomse_war/image");//        resp.setStatus(302);        resp.sendRedirect("/response_war/image");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
面試題:請你聊聊請求轉發和重定向的區別?
相同點都會跳轉不同點請求轉發url不變,307重定向地址欄變化為重定向地址 302
6.7、HttpServletResquest

HttpServletRequest代表客戶端的請求,用戶通過Http協議訪問服務器,HTTP請求中的所有信息會被封裝到HttpServletRequest,通過這個HttpServletRequest的方法,獲得客戶端的所有信息;

1、獲取前端傳遞的參數
2、請求轉發

重定向寫 / 表示本項目; 轉發不用寫

轉發是在服務器內部流轉的

p16

7、Cookie、Session

7.1、會話

會話:用戶打開瀏覽器,打開了很多超鏈接,逐個關閉這個過程就是會話

有狀態會話:

你能怎么證明你是西開的學生?哈哈

你 西開

發票學校登記

一個網站,怎么證明你來過?

客戶端 服務端

服務端給客戶端一個信件,客戶端下次訪問服務端帶上信件就可以了cookie服務器標記你來過了,下次來的時候匹配你 session

7.2、保存回家的兩種技術

cookie

客戶端技術(響應,請求)

session

服務器技術,利用這個技術,可以保存用戶的會話信息?我們可以把信息或數據保存在session中

7.3、Cookie

從請求中拿到cookie信息服務器響應給客戶端cookie
Cookie[] cookies = req.getCookies();//獲得一個cookieCookie cookie = cookies[i];cookie.getName();//獲取keycookie.getValue();//獲得cookie的valueCookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//resp.addCookie(cookie);//響應給客戶端cookiecookie.setMaxAge(60*60*21);//設置cookie的有效期

一個網站cookie是否存在上限!

一個cookie只能保存一個信息一個web站點可以給瀏覽器發送多個cookie,最多20個cookie大小限制4kb300個cookie瀏覽器上限

刪除Cookie

不設置有效期,關閉瀏覽器,自動失效設置有效期時間為0
中文編碼解碼:

7.4、Session(重點)

什么是session:

服務器會給每一個用戶(瀏覽器)創建一個session對象一個session獨占一個瀏覽器,只要瀏覽器沒關,這個session就存在用戶登陸之后,整個網站都可以訪問---->保存購物車信息保存用戶信息
Session和cookie的區別: .
Cookie是把用戶的數據寫給用戶的瀏覽器,瀏覽器保存(可以保存多個)Session把用戶的數據寫到用戶獨占Session中,服務器端保存(保存重要的信息, 減少服務器資源的浪費)Session對象由服務創建;

使用場景:

保存一個登錄用戶的信息;購物車信息;在整個網站中經常會使用的數據,我們將它保存在Session中; .

使用session

會話過期,在web.xml中配置

    1

8、JSP

8.1、 什么是jsp

java Server pages : Java服務器端頁面,和servlet一樣,用于動態web

最大特點:

寫jsp就像在寫html區別HTML只給用戶靜態jsp可以嵌入Java 為用戶提供動態

8.2、jsp原理

思路:jsp如何執行

代碼層面簡單服務器內部工作tomcat中有一個work目錄idea中使用tomcat的會在idea的tomcat中生產一個work

2018以后的IDEA在隱藏圓錄AppData/ JetBrains里面

瀏覽器向服務器發送請求,不管訪問什么資源,其實都是在訪問servlet

jsp最終也會被轉換成一個Java類

jsp本質上就是一個servlet
//初始化public void_  public void _jspInit() {  }//銷毀  public void _jspDestroy() {  }// jsp Service  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)      throws java.io.IOException, javax.servlet.ServletException {
判斷對象內置一些對象
final javax.servlet.jsp.PageContext pageContext;//頁面上下文    final javax.servlet.ServletContext application;//applicationContext    final javax.servlet.ServletConfig config;//config    javax.servlet.jsp.JspWriter out = null;//    final java.lang.Object page = this;//page當前頁    javax.servlet.jsp.JspWriter _jspx_out = null;    javax.servlet.jsp.PageContext _jspx_page_context = null;
輸出頁面前增加的代碼
response.setContentType("text/html; charset=UTF-8");      pageContext = _jspxFactory.getPageContext(this, request, response,            null, false, 8192, true);      _jspx_page_context = pageContext;      application = pageContext.getServletContext();      config = pageContext.getServletConfig();      out = pageContext.getOut();      _jspx_out = out;
以上的對象我們可以在jsp頁面中直接使用

在jsp頁面中,只要是Java代碼就會原封不動的輸出;

如果是HTML代碼,就會被轉換為

out.weite("\r\n")

8.3、jsp基礎語法

任何語言都有自己的語法,

JSP作為Java技術的一種應用,它擁有一些自己擴充的語法(了解即可),Java所有語法都支持

jsp表達式
<%--  jsp表達式作用:用來將程序的輸出,輸出到客戶端<%= 變量或表達式%>--%><%= new java.util.Date()%>
jsp腳本片段
<%--jsp腳本語言--%><%  int sum=0;  for (int i = 1; i <= 100; i++) {    sum+=i;  }  out.println("

sum="+sum+"

");%>
<%--  套娃--%>  <%    for (int i = 0; i < 5; i++) {  %>  

hello mink

<% } %>
jsp 聲明
<%!    static {      System.out.println("loding servlet");    }    private int globalVar = 0;    private void mink(){      System.out.println("進入了方法MINK");    }  %>

JSP聲明:會被編譯到SP生成Java的類中!其他的,就會被生成到jspService方法中!

在jsp,嵌入java代碼即可

幾種格式

8.4、jsp指令

<%@page args.... %><%@include file=""%>    <%--將兩個頁面合二為一--%><%@ include file="common/header.jsp" %>

主題內容

<%@include file="common/footer.jsp"%>
<%--jsp標簽拼接頁面,本質還是三個--%>

hhhhhhh

8.5、九大內置對象

PageContext 存Request 存ResponseSession 存Application 【ServletContext】 存東西config 【ServletConfig】outpageexception
<%    pageContext.setAttribute("name1","mink001");//保存的數據只在一個界面中有效    request.setAttribute("name2","mink002");//保存的數據只在一次請求中有效,請求轉發會攜帶    session.setAttribute("name3","mink003");//保存的數據只在一次會話中有效,從打開瀏覽器到關閉瀏覽器    application.setAttribute("name4","mink004");//只在服務器中有效,從打開服務器到關閉%>

request:客戶端向服務器發送請求,產生的數據,用戶看完就沒用了,比如:新聞,用戶看完沒用的!session:客戶端向服務器發送請求,產生的數據,用戶用完一會還有用, 比如:購物車;

application:客戶端向服務器發送請求,產生的數據,個用戶用完了, 其他用戶還可能使用,比如:聊天數據;

p20????????????????????????????

8.6、jsp標簽,jstl標簽,EL表達式

EL表達式:${}

獲取數據執行運算獲取web開發的常用對象
jsp標簽
<%--jsp: include--%><%--http://localhost: 8080/jsptag. jsp?name-kuangshen&age=12--%>
JSTL表達式

彌補html的不足

核心標簽(掌握部分)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用步驟

引入隊應的taglib
格式化標簽
SQL標簽
XML標簽

9、JavaBean

實體類

實體類JavaBean有特定的寫法:●必須要有一個無參構造●屬性必須私有化●必須有對應的get/set方法;

一般用來和數據庫的字段做映射 ORM;

ORM:對象關系映射

表-->類字段-->屬性行記錄-->對象

id

name

age

address

1

秦將1號

3

2

秦將2號

18

3

秦將3號

100

????????????????????????

10、MVC三層框架

Model

View

Controller

10.1、早些年

Servlet和Jsp都可以寫ava代碼;為了易于維護和使用;Servlet專注于處理請求,以及控制視圖跳轉JSP專注于顯示數據

用戶直接訪問控制層,控制層就可以直接操作數據庫;

servlet--CRUD-->數據庫弊端:程序十分臃腫,不利于維護servlet的代碼中:處理請求、響應、視圖跳轉、處理JDBC、處理業務代碼、處理邏輯代碼架構:沒有什么是加一-層解決不了的!程序猿調用|JDBC|Mysq1 Oracle Sq1Server

10.2、MVC三層架構

Model

業務處理:業務邏輯(Service)數據持久層:CRUD(Dao)

View

展示數據提供連接發送Servlet請求

Controller

接受用戶請求交給業務層處理響應的代碼控制視圖的跳轉
登錄--->接收用戶的登錄請求--->處理用戶的請求(獲取用戶登錄的參數,username, password) ---->交給業務層處理登錄業務(判斷用戶名密碼是否正確:事務) --->Dao層查詢用戶名和密碼是否正確-->數據庫

11、Filter

Filter:過濾器,過濾網站數據

處理中文亂碼登錄驗證

servlet版本3.1.0

12、監聽器

實現一個監聽器的接口:(有N種)

13、過濾器、監聽器常見應用

監聽器:GUI種常用

用戶登錄后才能進入主頁

標簽: 配置文件 發送請求 初始化參數

上一篇:世界視訊!【算法實踐】| 一步步帶你實現尋找最大公約數
下一篇:每日熱聞!C語言大一期末復習基礎知識點