<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Servlet——其實(shí)就是一個(gè)java程序,運(yùn)行在web服務(wù)器上,用于接收和響應(yīng)客戶端的http請求,更多的是配合動(dòng)態(tài)資源的使用,無論訪問靜態(tài)資源還是動(dòng)態(tài)資源,都會(huì)用到Servlet,Tomcat是servlet的容器,不過Tomcat里面已經(jīng)定義好了一個(gè)DefalutServlet

       

       1、新建一個(gè)類,實(shí)現(xiàn)Servlet接口,不過要重寫5個(gè)方法,可以繼承HttpServlet,重寫service方法

      2、配置Servlet,告訴服務(wù)器,我們的應(yīng)用有這么些個(gè)servlet

        2.1在web.xml配置以下信息:

          向Tomcat報(bào)告,我這里有個(gè)servlet,名字叫HelloServlet,具體路徑就是包名+類名

          <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>包名+類名</servlet-class>
          </servlet>

          注冊servlet的映射,servlet-name:找到上面注冊的具體servlet;

                   url-pattern:在地址欄上的path,要以/開頭
          <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/index</url-pattern>
          </servlet-mapping>

       

      get請求會(huì)進(jìn)入doGet,post請求會(huì)進(jìn)入doPost,還有doPut,doDelete,這個(gè)涉及一種叫Rest開發(fā)風(fēng)格,有時(shí)間可以深度學(xué)習(xí),這里暫時(shí)知道

       

      servlet的生命周期:

        實(shí)例化:當(dāng)有第一次對應(yīng)的servlet請求到達(dá)時(shí)就會(huì)實(shí)例化,只會(huì)創(chuàng)建一次,就是該類的構(gòu)造函數(shù)隨著容器啟動(dòng)就創(chuàng)建該servlet對象,可以在Web.xml中配置<load-on-startup>0</load-on-startup> 大于等于0,值越小優(yōu)先級越高,在對應(yīng)的servlet-class下面放置即可,一開服務(wù)器就會(huì)初始化,通常從2開始

        初始化:實(shí)例化后馬上初始化,自動(dòng)調(diào)用init的方法,也是只是運(yùn)行一次,可以將只加載一次的工作放在init方法里面,例如是配置連接池,init有一個(gè)帶參數(shù)的重載方法,如果調(diào)用了帶參的方法,系統(tǒng)會(huì)默認(rèn)調(diào)用帶參的方法,不會(huì)調(diào)用無參的方法,如果帶參函數(shù)里面有調(diào)用super,則會(huì)先調(diào)用無參的init的方法

        就緒:就緒狀態(tài),能夠接受請求,準(zhǔn)備運(yùn)行service

          1.Servlet被初始化以后就處于能夠響應(yīng)請求的就緒狀態(tài)。
          2.每個(gè)對Servlet的請求由一HttpServletRequest對象代表。
          3.Servlet給客戶端的響應(yīng)由一個(gè)HttpServletResponse對象代表。
          4.當(dāng)客戶端有一個(gè)請求時(shí),容器就會(huì)將請求與響應(yīng)對象轉(zhuǎn)給Servlet,以參數(shù)的形式傳給service方法。

        銷毀:當(dāng)服務(wù)器停止或重新啟動(dòng)時(shí),自動(dòng)銷毀servlet對象,調(diào)用destroy方法

          1. Servlet容器在銷毀Servlet對象時(shí)會(huì)調(diào)用destroy方法來釋放資源。
          2.通常情況下Servlet容器停止或者重新啟動(dòng)都會(huì)引起銷毀Servlet對象的動(dòng)作:  

            2.1. 該項(xiàng)目從tomcat的里面移除。
            2.2. 正常關(guān)閉tomcat就會(huì)執(zhí)行 shutdown.bat

       

      ServletConfig——可以獲取servlet在配置的一些信息,有以下的方法

      getServletName()——獲取到的是配置servlet里面servlet-name的文本<servlet-name>標(biāo)簽里面的內(nèi)容

      getInitParameter("address")——可以獲取具體的初始化參數(shù),入?yún)?lt;param-name>,但是比較少用,配置如下,也是配置再servlet-class標(biāo)簽下,得到的是param-value值

      <init-param>

        <param-name>address</param-name>

        <param-value>bejing</param-value>

      </init-param>

      getInitParameterNames()——獲取所有的param-name,返回的是Enumeration<String>

      getServletContext()——返回一個(gè)ServletContext對象,該對象包含關(guān)于servlet運(yùn)行環(huán)境的信息

      作用:

      1. 未來我們自己開發(fā)的一些應(yīng)用,使用到了一些技術(shù),或者一些代碼,我們不會(huì)。 但是有人寫出來了。它的代碼放置在了自己的servlet類里面。

      2. 剛好這個(gè)servlet 里面需要一個(gè)數(shù)字或者叫做變量值。 但是這個(gè)值不能是固定了。 所以要求使用到這個(gè)servlet的公司,在注冊servlet的時(shí)候,必須要在web.xml里面,聲明init-params

       

       

      HttpServletRequest——請求對象,封裝了客戶端提交過來的一切數(shù)據(jù)

        getParameter("name")——獲取請求體,簡單來說可以獲取form表單里面的input輸入框?qū)?yīng)name值的數(shù)據(jù)

        getHeaderNames()——獲取一個(gè)枚舉集合的請求Enumeration<String>

        getHeader(String name)——獲取對應(yīng)的請求頭數(shù)據(jù)

        getHeader("User-Agent")——獲取客戶端類型:火狐:Firefox,

       

      HttpServieResponse——響應(yīng)對象

        setStatus()——設(shè)置狀態(tài)碼,302重新定位狀態(tài)碼

        setHeader(“Location”,"xxx.html")——設(shè)置響應(yīng)頭,Location定位跳轉(zhuǎn)的位置

        以上兩個(gè)方法相當(dāng)于重定向,不過這種是早期的寫法

        

      字符串亂碼問題:

      接收數(shù)據(jù):

        如果get請求:username = new String(username.getBytes("ISO-8859-1") , "UTF-8");也可在Tomcat里面設(shè)置以下內(nèi)容:

        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

        如果是post請求:request.setCharacterEncoding("UTF-8");不過要在獲取數(shù)據(jù)前

      發(fā)送數(shù)據(jù):response.setCharacterEncoding("UTF-8");

           setHeader("Content-Type", "text/html;charset=UTF-8");——設(shè)置這份數(shù)據(jù)使用的碼表

           getOutputStream().write("中文".getBytes("UTF-8"));——使用字節(jié)流的輸出的時(shí)候設(shè)置格式

           setContentType("text/html;charset=UTF-8");——不管是字節(jié)流還是字符流,直接使用一行代碼就可以了。

       

      路徑匹配:以 / 開始,如果以 * 開頭代表任何請求都進(jìn)入該方法

       

      轉(zhuǎn)發(fā)與重定向:

      請求次數(shù)、地址欄是否改變、跨域、生成資源問題(是否可以訪問WEB-INF下的內(nèi)容)
      轉(zhuǎn)發(fā)的方法:
        request.getRequestDispatcher("/這里寫網(wǎng)頁的路徑,如:/WEB-INF/mypage/loginsuccess.jsp").forward(request,response);

      重定向的方法:
        response.sendRedirect("跳轉(zhuǎn)的位置");如果需要跳轉(zhuǎn)到WEB-INF文件外面的網(wǎng)頁,直接寫網(wǎng)頁名即可,如果帶了斜杠,則需要加上項(xiàng)目名才可以
      轉(zhuǎn)發(fā)和重定向不會(huì)結(jié)束方法,如果想調(diào)用了轉(zhuǎn)發(fā)和重定向后結(jié)束方法,可以補(bǔ)一個(gè)return

       

      轉(zhuǎn)發(fā):

        1.地址欄不會(huì)改變
        2.可以直接訪問WEB-INF里面的資源
        3.轉(zhuǎn)發(fā)中的路徑項(xiàng)目根目錄:http://localhost:8080/webTest2/
        4.只發(fā)一次請求
        5.因?yàn)槭窃陧?xiàng)目根目錄,所以不能跨域
        6.因?yàn)橹话l(fā)一次請求,所以速度回比較快
        7.共享域 請求對象都是同一個(gè)request,所以共用同一個(gè)request的作用域
        8.行為者 行為者是請求對象requset

      重定向:

        1.地址欄會(huì)改變
        2.不可以直接訪問WEB-INF里面的資源
        3.重定向中的斜杠代表服務(wù)器根目錄:http://localhost:8080/
        4.會(huì)發(fā)兩次請求
        5.因?yàn)槭窃陧?xiàng)目根目錄,所以能跨域,直接訪問其他頁面
        6.因?yàn)闀?huì)發(fā)兩次請求,所以速度回比較慢,客戶端發(fā)送了第一次請求,服務(wù)器會(huì)返回具體的路徑給客戶端,然后客戶端再重新發(fā)送一次請求訪問具體的路徑
        7.共享域 請求對象是不同的request,所以不能共用同一個(gè)request的作用域
        8.行為者,行為者是響應(yīng)response,所以會(huì)丟失之前的請求數(shù)據(jù)和對象

      重定向到轉(zhuǎn)發(fā):

      先重定向發(fā)送一個(gè)請求,匹配到web.xml,web.xml再匹配到一個(gè)java類,java里面有轉(zhuǎn)發(fā)的方法,轉(zhuǎn)發(fā)到WEB-INF里面的資源,實(shí)現(xiàn)將所有的頁面放到WEB-INF里面受到保護(hù)

      頁面請求的資源:

      請求的資源包括圖片,jq包等,因?yàn)轫撁嬲埱蟮馁Y源也相當(dāng)于是一次重定向,而重定向是以服務(wù)器的根目錄,相當(dāng)于是WebContent開始,所以不需要加斜杠,直接寫資源所在的位置,例如:jq放在WebContent里面的一個(gè)js文件夾里面,直接寫js/jquery-1.11.3.js既可以

       

      ServletContext——上下文,每個(gè)web工程都只有一個(gè)ServletContext對象,在哪里獲取到的ServletContext對象都是同一個(gè)

      全局參數(shù)

      <context-param>

        <param-name>address</param-name>

        <param-value>深圳寶安</param-value>

      </context-param>

      ServletContext的獲?。?br>  1.GenericeServlet(HttpServlet)提供的 getServletContext()
        2.ServletConfig提供的 getServletContext()
        3.HttpSession提供的 getServletContext()
        4.FilterConfig提供的 getServletContext()
        5.HttpServletRequest
      以上的方法都能獲取到上下文的對象、
      作用:
        1.在Web范圍內(nèi)獲取共享的資源:
          setAttribute("名字",對象),設(shè)置數(shù)據(jù)在上下文
          getAttribute("名字")獲取對應(yīng)的數(shù)據(jù)

          getInitParamater("全局參數(shù)的名字");獲取web.xml全局參數(shù)<context-param>

        2.訪問Web應(yīng)用的靜態(tài)資源:
          getRealPath(String path);
      就是訪問該項(xiàng)目WebContent里面的資源,path就是路徑,如果寫空字符,會(huì)得到項(xiàng)目在tomcat里面的根目錄

          getResourceAsStram(String path);直接根據(jù)給定的文件的相對路徑獲取一個(gè)流

          這里的相對路徑:工程在tomcat里面的根目錄

          

      ServletContext生命周期:

        服務(wù)器啟動(dòng)的時(shí)候創(chuàng)建,會(huì)位托管的每一個(gè)web應(yīng)用程序,創(chuàng)建一個(gè)ServletContext對象

        從服務(wù)器移除托管,或者關(guān)閉服務(wù)器的時(shí)候銷毀

      ServletContext作用范圍:只要在該項(xiàng)目里面,都可以取,

       

      下載:

      1、直接以超鏈接的方式下載,不寫任何代碼,也能夠下載東西下來

      讓tomcat的默認(rèn)servlet去提供下載:<br>
      <a href="download/aa.jpg">aa.jpg</a><br>
      <a href="download/bb.txt">bb.txt</a><br>
      <a href="download/cc.rar">cc.rar</a><br>

      原因是tomcat里面有一個(gè)默認(rèn)的Servlet -- DefaultServlet 。這個(gè)DefaultServlet 專門用于處理放在tomcat服務(wù)器上的靜態(tài)資源。

      2、手動(dòng)下載:

      //前端:

      <br>手動(dòng)編碼提供下載。:<br>
      <a href="Demo01?filename=aa.jpg">aa.jpg</a><br>
      <a href="Demo01?filename=bb.txt">bb.txt</a><br>
      <a href="Demo01?filename=cc.rar">cc.rar</a><br>

      <a href="Demo01?filename=中文.rar">cc.rar</a><br>



      后端Servlet對應(yīng)的代碼:
           //
      1. 獲取要下載的文件名字 aa.jpg --- inputStream String fileName = request.getParameter("filename"); //如果前端的編碼格式與后端的編碼格式不一致,可以使用下面的代碼解決亂碼問題
           filename = new String(fileName.getBytes("前端編碼格式"),"后端編碼格式")
      //2. 獲取這個(gè)文件在tomcat里面的絕對路徑地址 String path = getServletContext().getRealPath("download/"+fileName);
           
      //讓瀏覽器收到這份資源的時(shí)候, 以下載的方式提醒用戶,而不是直接展示。 response.setHeader("Content-Disposition", "attachment; filename="+fileName); //3. 轉(zhuǎn)化成輸入流 InputStream is = new FileInputStream(path); OutputStream os = response.getOutputStream(); int len = 0 ; byte[]buffer = new byte[1024]; while( (len = is.read(buffer)) != -1){ os.write(buffer, 0, len); } os.close(); is.close();
      posted on 2019-12-12 11:29  大景少  閱讀(136)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 熟女精品视频一区二区三区| 色欲AV无码一区二区人妻| av午夜福利一片免费看久久| 91精品91久久久久久| 少妇被黑人到高潮喷出白浆| 色翁荡息又大又硬又粗又视频图片| 亚洲另类激情专区小说图片| 思思久99久女女精品| 欧美福利电影A在线播放| 亚洲国产成人精品av区按摩| 人妻少妇偷人无码视频| 久久人妻少妇嫩草av无码专区| 尤物yw193无码点击进入| 亚洲一级特黄大片一级特黄| 女人被爽到高潮视频免费国产| 亚洲色欲色欱WWW在线| 国产69成人精品视频免费| 亚洲精品动漫免费二区| 亚洲AV无码一二区三区在线播放| 国产超高清麻豆精品传媒麻豆精品 | 亚洲色大成网站www在线| 国产精品亚洲综合一区二区| 最近中文国语字幕在线播放| 国产尤物精品自在拍视频首页| 尤物国精品午夜福利视频| 六月丁香婷婷色狠狠久久| 成年入口无限观看免费完整大片| av永久免费网站在线观看| 亚洲V天堂V手机在线| 日韩欧美一中文字暮专区| 国产99在线 | 欧美| 国产高清精品一区二区三区| 国产乱人伦av在线无码| 色五月丁香五月综合五月| 国产日韩入口一区二区| 白嫩少妇激情无码| 网友偷拍视频一区二区三区| 素人视频亚洲十一十二区| 精品无码一区在线观看| 亚洲精品入口一区二区乱| 亚洲禁精品一区二区三区|