成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Servlet第三篇【request和response簡(jiǎn)介、response的常見(jiàn)應(yīng)用】

Youngs / 664人閱讀

摘要:什么是對(duì)象響應(yīng)由狀態(tài)行實(shí)體內(nèi)容消息頭一個(gè)空行組成。為什么使用方法能夠正常向?yàn)g覽器輸出中文呢你好呀我是中國(guó)這句代碼在轉(zhuǎn)成數(shù)組的時(shí)候默認(rèn)查的是編碼,而你好呀我是中國(guó)支持編碼,所以可以正常顯示出來(lái)。

response、request對(duì)象
Tomcat收到客戶端的http請(qǐng)求,會(huì)針對(duì)每一次請(qǐng)求,分別創(chuàng)建一個(gè)代表請(qǐng)求的request對(duì)象、和代表響應(yīng)的response對(duì)象

既然request對(duì)象代表http請(qǐng)求,那么我們獲取瀏覽器提交過(guò)來(lái)的數(shù)據(jù),找request對(duì)象即可。response對(duì)象代表http響應(yīng),那么我們向?yàn)g覽器輸出數(shù)據(jù),找response對(duì)象即可。

什么是HttpServletResponse對(duì)象?

http響應(yīng)由狀態(tài)行、實(shí)體內(nèi)容、消息頭、一個(gè)空行組成。HttpServletResponse對(duì)象就封裝了http響應(yīng)的信息。

HttpServletResponse的應(yīng)用 調(diào)用getOutputStream()方法向?yàn)g覽器輸出數(shù)據(jù)

調(diào)用getOutputStream()方法向?yàn)g覽器輸出數(shù)據(jù),getOutputStream()方法可以使用print()也可以使用write(),它們有什么區(qū)別呢?我們?cè)囼?yàn)一下。代碼如下

        //獲取到OutputStream流
        ServletOutputStream servletOutputStream = response.getOutputStream();

        //向?yàn)g覽器輸出數(shù)據(jù)
        servletOutputStream.print("aaaa");

成功輸出,好像沒(méi)什么毛病。

我們?cè)囍敵鲋形脑囋?/p>

        //獲取到OutputStream流
        ServletOutputStream servletOutputStream = response.getOutputStream();

        //向?yàn)g覽器輸出數(shù)據(jù)
        servletOutputStream.print("中國(guó)!");

出異常了?。?!

為什么會(huì)出現(xiàn)異常呢?在io中我們學(xué)過(guò),outputStream是輸出二進(jìn)制數(shù)據(jù)的print()方法接收了一個(gè)字符串,print()方法要把“中國(guó)”改成二進(jìn)制數(shù)據(jù),Tomcat使用IOS 8859-1編碼對(duì)其進(jìn)行轉(zhuǎn)換,“中國(guó)”根本對(duì)ISO 8859-1編碼不支持。所以出現(xiàn)了異常

我們?cè)倏纯磜rite()方法,先向?yàn)g覽器輸出英文數(shù)據(jù)

        response.getOutputStream().write("aaa".getBytes());

沒(méi)有問(wèn)題

再試試輸出中文數(shù)據(jù)

     response.getOutputStream().write("你好呀我是中國(guó)".getBytes());

貌似也沒(méi)有問(wèn)題。

為什么使用write()方法能夠正常向?yàn)g覽器輸出中文呢?"你好呀我是中國(guó)".getBytes()這句代碼在轉(zhuǎn)成byte[]數(shù)組的時(shí)候默認(rèn)查的是gb2312編碼,而"你好呀我是中國(guó)"支持gb2312編碼,所以可以正常顯示出來(lái)。

但是,程序要實(shí)現(xiàn)通用性,應(yīng)該使用的是UTF-8編碼,我們?cè)?strong>字符串轉(zhuǎn)換成字節(jié)數(shù)組時(shí)指定UTF-8編碼,看看會(huì)怎么樣。

     response.getOutputStream().write("你好呀我是中國(guó)".getBytes("UTF-8"));

好的,成功把它搞成亂碼了?。。?/p>

為什么它變成了亂碼呢?原因是這樣的:我在向服務(wù)器輸出的中文是UTF-8編碼的,而瀏覽器采用的是GBK,GBK想顯示UTF-8的中文數(shù)據(jù),不亂碼才怪呢!

既然如此,我將瀏覽器的編碼改成UTF-8試試。

亂碼問(wèn)題又解決了。可是,每次編寫(xiě)UTF-8程序時(shí)都要去網(wǎng)頁(yè)上改編碼格式嗎?這樣明顯不可能的

既然HTTP響應(yīng)有對(duì)瀏覽器說(shuō)明回送數(shù)據(jù)是什么類型的消息頭,那么HttpServletResponse對(duì)象就應(yīng)該有相對(duì)應(yīng)的方法告訴瀏覽器回送的數(shù)據(jù)編碼格式是什么

于是乎就去查找Servlet API,找到了設(shè)置消息頭的方法

        //設(shè)置頭信息,告訴瀏覽器我回送的數(shù)據(jù)編碼是utf-8的
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
        
        response.getOutputStream().write("你好呀我是中國(guó)".getBytes("UTF-8"));


瀏覽器在顯示數(shù)據(jù)時(shí),自動(dòng)把頁(yè)面的編碼格式置換成UTF-8,亂碼問(wèn)題也解決了

另外,除了使用HttpServletResponse對(duì)象設(shè)置消息頭的方法,我可以使用html的標(biāo)簽?zāi)M一個(gè)http消息頭

下面是代碼:

        //獲取到servletOutputStream對(duì)象
        ServletOutputStream servletOutputStream = response.getOutputStream();


        //使用meta標(biāo)簽?zāi)Mhttp消息頭,告訴瀏覽器回送數(shù)據(jù)的編碼和格式
        servletOutputStream.write("".getBytes());

        servletOutputStream.write("我是中國(guó)".getBytes("UTF-8"));

亂碼問(wèn)題也可以解決

調(diào)用getWriter()方法向?yàn)g覽器輸出數(shù)據(jù)

對(duì)于getWriter()方法而言,是Writer的子類,那么只能向?yàn)g覽器輸出字符數(shù)據(jù),不能輸出二進(jìn)制數(shù)據(jù)

使用getWriter()方法輸出中文數(shù)據(jù),代碼如下:

        //獲取到printWriter對(duì)象
        PrintWriter printWriter = response.getWriter();
        printWriter.write("看完博客點(diǎn)贊!");

喜聞可見(jiàn)的事又出現(xiàn)了,我又出現(xiàn)亂碼了。

為什么出現(xiàn)亂碼了呢?由于Tomcat是外國(guó)人的寫(xiě),Tomcat默認(rèn)的編碼是ISO 8859-1,當(dāng)我們輸出中文數(shù)據(jù)的時(shí)候,Tomcat會(huì)依據(jù)ISO 8859-1碼表給我們的數(shù)據(jù)編碼,中文不支持這個(gè)碼表呀,所以出現(xiàn)了亂碼

既然如此,我設(shè)置一下編碼不就好了嗎,代碼如下:

        

        //原本是ISO 8859-1的編碼,我設(shè)置成UTF-8
        response.setCharacterEncoding("UTF-8");

        //獲取到printWriter對(duì)象
        PrintWriter printWriter = response.getWriter();
        printWriter.write("看完博客點(diǎn)贊!");


我再訪問(wèn)了一下,我的天!看起來(lái)更亂了!

為什么亂碼問(wèn)題還沒(méi)有解決?細(xì)心的朋友會(huì)發(fā)現(xiàn),我只是在中文轉(zhuǎn)換的時(shí)候把碼表設(shè)置成UTF-8,但是瀏覽器未必是使用UTF-8碼表來(lái)顯示數(shù)據(jù)的呀

好的,我們來(lái)看看瀏覽器的編碼格式,果然,瀏覽器使用GB2312顯示UTF-8的數(shù)據(jù),不亂碼才怪呢

這個(gè)問(wèn)題我們?cè)谏厦嬉呀?jīng)是有兩種方法解決了【使用標(biāo)簽?zāi)M消息頭、設(shè)置消息頭】,Servlet還提供了一個(gè)方法給我們

        //設(shè)置瀏覽器用UTF-8編碼顯示數(shù)據(jù)
        response.setContentType("text/html;charset=UTF-8");

好的,我們?cè)賮?lái)訪問(wèn)一下

既然Servlet有那么多方法解決亂碼問(wèn)題,是不是有一種是最簡(jiǎn)便的呢?沒(méi)錯(cuò)!下面這個(gè)方法是最簡(jiǎn)便的,它不僅設(shè)置瀏覽器用UTF-8顯示數(shù)據(jù),內(nèi)部還把中文轉(zhuǎn)碼的碼表設(shè)置成UTF-8了,也就是說(shuō),response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8")的事情也干了!

使用getWriter()顯示中文數(shù)據(jù),只需要一個(gè)方法就搞掂了!

        //設(shè)置瀏覽器用UTF-8編碼顯示數(shù)據(jù),
        response.setContentType("text/html;charset=UTF-8");

        //獲取到printWriter對(duì)象
        PrintWriter printWriter = response.getWriter();
        printWriter.write("看完博客點(diǎn)贊!");

實(shí)現(xiàn)文件下載

下載資源我們?cè)谌粘V幸埠艹S茫窃趺醋龅降哪兀?strong>要能夠給別人下載,服務(wù)器就應(yīng)該有這個(gè)資源

現(xiàn)在我web站點(diǎn)下有一個(gè)圖片了!

既然瀏覽器發(fā)送所有的請(qǐng)求都是去找Servlet的話,那么我就寫(xiě)一個(gè)Servlet,當(dāng)別人訪問(wèn)我這個(gè)Servlet的時(shí)候,它們就可以下載我這個(gè)圖片了!

java的文件上傳下載都是通過(guò)io流來(lái)完成的,既然要下載圖片,首先要能夠讀取到它

        //獲取到資源的路徑
        String path = this.getServletContext().getRealPath("/download/1.png");

        //讀取資源
        FileInputStream fileInputStream = new FileInputStream(path);

        //獲取到文件名,路徑在電腦上保存是形式的。
        String fileName = path.substring(path.lastIndexOf("") + 1);

告訴瀏覽器,我要下載這個(gè)文件

        //設(shè)置消息頭,告訴瀏覽器,我要下載1.png這個(gè)圖片
        response.setHeader("Content-Disposition", "attachment; filename="+fileName);

將讀取到的內(nèi)容回送給瀏覽器

        //把讀取到的資源寫(xiě)給瀏覽器
        int len = 0;
        byte[] bytes = new byte[1024];
        ServletOutputStream servletOutputStream = response.getOutputStream();

        while ((len = fileInputStream.read(bytes)) > 0) {
            servletOutputStream.write(bytes, 0, len);
        }

        //關(guān)閉資源
        servletOutputStream.close();
        fileInputStream.close();

當(dāng)我訪問(wèn)時(shí),瀏覽器就提示下載了。

也可以成功打開(kāi)!

現(xiàn)在問(wèn)題又有了,如果我文件的名字是中文呢?

我們?cè)僭L問(wèn)一下,發(fā)現(xiàn)名字亂碼了(怎么都是亂碼)

為了解決文件名亂碼,我們要進(jìn)行URL編碼,代碼如下:

        response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

再次訪問(wèn)時(shí),文件名亂碼問(wèn)題就解決了!

實(shí)現(xiàn)自動(dòng)刷新

以規(guī)定的時(shí)間讓頁(yè)面刷新,更新資源

讓瀏覽器實(shí)現(xiàn)自動(dòng)刷新,那肯定又是修改消息頭了。

        //每3秒自動(dòng)刷新網(wǎng)頁(yè)一次
        response.setHeader("Refresh", "3");

為了更好的看效果,我們加入時(shí)間值進(jìn)去

    response.getWriter().write("time is :" + System.currentTimeMillis());
    

每三秒時(shí)間值就會(huì)發(fā)生變化

學(xué)完上面的,好像沒(méi)有什么用,自己上網(wǎng)的時(shí)候誰(shuí)看得見(jiàn)這樣的東西。自動(dòng)刷新,能夠?qū)崿F(xiàn)頁(yè)面的跳轉(zhuǎn)

我們登陸完網(wǎng)站,很多時(shí)候都會(huì)看見(jiàn)【登陸成功,3秒后自動(dòng)跳轉(zhuǎn)....】,其實(shí)這個(gè)就是用Refresh來(lái)完成的。

          response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("3秒后跳轉(zhuǎn)頁(yè)面.....");

        //三秒后跳轉(zhuǎn)到index.jsp頁(yè)面去,web應(yīng)用的映射路徑我設(shè)置成/,url沒(méi)有寫(xiě)上應(yīng)用名
        response.setHeader("Refresh", "3;url="/index.jsp"");

看下效果

設(shè)置緩存

瀏覽器本身就存在著緩存機(jī)制

當(dāng)我第一次訪問(wèn)index.jsp時(shí),瀏覽器向服務(wù)器發(fā)了兩次請(qǐng)求【一個(gè)是網(wǎng)頁(yè)的,一個(gè)是圖片的】

當(dāng)我第二次訪問(wèn)index.jsp的時(shí)候,瀏覽器將圖片緩存起來(lái)了!圖片不是重新加載的,是從緩存里面取出來(lái)的。

像股票類型的網(wǎng)頁(yè)是不能取緩存的數(shù)據(jù)的,數(shù)據(jù)都是要不斷更新的。下面我就禁止緩存的功能

        //瀏覽器有三消息頭設(shè)置緩存,為了兼容性!將三個(gè)消息頭都設(shè)置了
        response.setDateHeader("Expires", -1);
        response.setHeader("Cache-Control","no-cache");
        response.setHeader("Pragma", "no-cache");


        //這里為了看效果
        PrintWriter printWriter = response.getWriter();
        printWriter.print("你好啊" + new Date().toString());

當(dāng)然了,如果頁(yè)面有些數(shù)據(jù)不長(zhǎng)期更新,你就將它設(shè)置成緩存,這樣可以提高服務(wù)器的性能

實(shí)現(xiàn)數(shù)據(jù)壓縮

網(wǎng)頁(yè)上的信息量是很大的,如果不將數(shù)據(jù)壓縮再回送給瀏覽器,這樣就十分耗費(fèi)流量

現(xiàn)在我有一篇文章要輸出給瀏覽器

        response.setContentType("text/html;charset=UTF-8");

        String ss = "fsdfhsdfhuisdhfusdhfuids" +
                "fsdfdsfsdfsdfdsfdafdsfhsdjfhsdjkfhkjds" +
                "fdsfjdslkfjsldkfjsdlkfjsdkfsdjkff" +
                "fsjdfjdsklfjdsklfjkldsfjlksdjflksdjflkds" +
                "dsjfklsdjflsdjfkldsfkjsdkfjsldkfjsdlfk" +
                "fdsjlkfjdslkfjsdlkfjlkasjflk";
        response.getWriter().write("原來(lái)的長(zhǎng)度是:"+ss.getBytes().length+"
"); //輸出給瀏覽器 response.getWriter().write(ss);

訪問(wèn)一下可以看到,原來(lái)的長(zhǎng)度是201

壓縮的原理是什么?我們知道getOutputStream()和getWriter()都是直接把數(shù)據(jù)輸出給瀏覽器的?,F(xiàn)在我要做的就是讓數(shù)據(jù)不直接輸出給瀏覽器,先讓我壓縮了,再輸出給瀏覽器。java提供了GZIP壓縮類給我們

就讓我們使用GZIP類來(lái)對(duì)數(shù)據(jù)壓縮吧

        //GZIP的構(gòu)造方法需要一個(gè)OutputStream子類對(duì)象,究竟哪個(gè)對(duì)象適合,我們看下write()方法
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream();

        //查看了下API,write()接收的是byte[]類型的。
        gzipOutputStream.write();

于是我就在構(gòu)造函數(shù)上傳遞個(gè)ByteArrayOutputStream給它


        //既然是byte[]類型,那么我就給他一個(gè)ByteArrayOutputStream
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(new ByteArrayOutputStream());

而用GZIPOutputStream寫(xiě)數(shù)據(jù)的時(shí)候,是把數(shù)據(jù)寫(xiě)到ByteArrayOutputStream上的,等會(huì)還要把數(shù)據(jù)取出來(lái),再寫(xiě)給瀏覽器,于是就不能以匿名內(nèi)部類的方式給GZIPOutputStream,必須把ByteArrayOutputStream定義出來(lái),

        //創(chuàng)建GZIPOutputStream對(duì)象,給予它ByteArrayOutputStream
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);

        //GZIP對(duì)數(shù)據(jù)壓縮,GZIP寫(xiě)入的數(shù)據(jù)是保存在byteArrayOutputStream上的
        gzipOutputStream.write(ss.getBytes());

        //gzipOutputStream有緩沖,把緩沖清了,并順便關(guān)閉流
        gzipOutputStream.close();

壓縮后的數(shù)據(jù)取出來(lái),寫(xiě)給瀏覽器

          //將壓縮的數(shù)據(jù)取出來(lái)
        byte[] bytes = byteArrayOutputStream.toByteArray();

        //將壓縮的數(shù)據(jù)寫(xiě)給瀏覽器
        response.getOutputStream().write(bytes);

我們來(lái)對(duì)比一下壓縮前的大小和壓縮后的大小

數(shù)據(jù)的確是壓縮了,然而,為什么又亂碼了???很簡(jiǎn)單,既然你壓縮了數(shù)據(jù),你寫(xiě)給瀏覽器,瀏覽器是不知道你這是壓縮后的數(shù)據(jù),它是以正常的方式打開(kāi)數(shù)據(jù)的。這當(dāng)然造成亂碼啦!,現(xiàn)在我要告訴瀏覽器我這是壓縮數(shù)據(jù)

        //告訴瀏覽器這是gzip壓縮的數(shù)據(jù)
        response.setHeader("Content-Encoding","gzip");

        //再將壓縮的數(shù)據(jù)寫(xiě)給瀏覽器
        response.getOutputStream().write(bytes);

再次訪問(wèn)一下

生出隨機(jī)圖片

生成隨機(jī)圖片這是非常常見(jiàn)的。在我們登陸的時(shí)候經(jīng)常要寫(xiě)驗(yàn)證碼,而那些驗(yàn)證碼是一張圖片,就是通過(guò)HttpServletResponse寫(xiě)給瀏覽器的。

要生成一張圖片,java提供了BufferedImage類供我們使用


        //在內(nèi)存中生成一張圖片,寬為80,高為20,類型是RGB
        BufferedImage bufferedImage = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);

        //獲取到這張圖片
        Graphics graphics = bufferedImage.getGraphics();

        //往圖片設(shè)置顏色和字體
        graphics.setColor(Color.BLUE);
        graphics.setFont(new Font(null, Font.BOLD, 20));

        //往圖片上寫(xiě)數(shù)據(jù),先寫(xiě)個(gè)12345,橫坐標(biāo)是0,縱坐標(biāo)是20【高度】
        graphics.drawString("12345", 0, 20);

好的,現(xiàn)在我們?cè)趦?nèi)存中創(chuàng)建了一張圖片,并寫(xiě)上了12345。接著,我們要把圖片寫(xiě)給瀏覽器了。把圖片寫(xiě)給瀏覽器,java又提供了圖片流【ImageIO】給我們使用

        //要往瀏覽器寫(xiě)一張圖片,那要告訴瀏覽器回送的類型是一張圖片
        response.setHeader("ContentType", "jpeg");
        
        //java提供了圖片流給我們使用,這是一個(gè)工具類
        //把圖片傳進(jìn)去,類型是jpg,寫(xiě)給瀏覽器
        ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

我們來(lái)訪問(wèn)一下,看下圖片長(zhǎng)什么樣

這樣太丑了,我們把背景改成白色看看

        //把白色填充整張圖片
        graphics.setColor(Color.white);
        graphics.fillRect(0, 0, 80, 20);

再看看效果,這明顯好看多了

好的,我們的圖片數(shù)字不可能是人工寫(xiě)的,數(shù)字應(yīng)該是隨機(jī)產(chǎn)生的!這個(gè)就簡(jiǎn)單了?,F(xiàn)在我要生成7位的隨機(jī)數(shù),生成隨機(jī)數(shù)的方法如下


    private String makeNum() {

        Random random = new Random();

        //這樣就會(huì)生成0-7位的隨機(jī)數(shù),現(xiàn)在問(wèn)題又來(lái)了,如果隨機(jī)數(shù)不夠7位呢?如果不夠7位,我們加到7位就行了
        int anInt = random.nextInt(9999999);

        //將數(shù)字轉(zhuǎn)成是字符串
        String num = String.valueOf(anInt);

        //判斷位數(shù)有多少個(gè),不夠就加
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < 7 - num.length(); i++) {
            stringBuffer.append("0");
        }

        return stringBuffer.append(num).toString();
        
    }

如果要生成中文,就找中文映射表即可。

重定向跳轉(zhuǎn)

什么是重定向跳轉(zhuǎn)呢?點(diǎn)擊一個(gè)超鏈接,通知瀏覽器跳轉(zhuǎn)到另外的一個(gè)頁(yè)面就叫重定向跳轉(zhuǎn)。是通知瀏覽器去跳轉(zhuǎn),這很重要。頁(yè)面之間的跳轉(zhuǎn)有兩種方式:重定向和轉(zhuǎn)發(fā),至于什么時(shí)候用重定向,什么用轉(zhuǎn)發(fā),我在講完HttpServletRequest對(duì)象的時(shí)候會(huì)詳細(xì)說(shuō)明。

我們來(lái)使用以下HttpServletResponse對(duì)象的重定向

        //重定向到index.jsp頁(yè)面
        response.sendRedirect("/zhongfucheng/index.jsp");

瀏覽器的地址欄訪問(wèn)Servlet222

跳轉(zhuǎn)到index.jsp頁(yè)面,地址欄發(fā)生了變化

我們?cè)賮?lái)看看http協(xié)議發(fā)生了什么

從圖上看,我們看到了兩個(gè)狀態(tài)碼,一個(gè)是302。一個(gè)是200。302狀態(tài)碼在http協(xié)議中代表的是臨時(shí)重定向。舉個(gè)例子:我找紀(jì)律委員說(shuō):給我一份請(qǐng)假表,我要回家。紀(jì)律委員告訴我:我這里沒(méi)有請(qǐng)假表,你去找輔導(dǎo)員吧。再看回我訪問(wèn)Sevlet222時(shí):我找Servlet222,Servlet222告訴瀏覽器:我沒(méi)有你想要的資源,你要的資源在index.jsp頁(yè)面中,你自己去找吧。

很容易看出重定向是通過(guò)302狀態(tài)碼和跳轉(zhuǎn)地址實(shí)現(xiàn)的。于是乎,我們?cè)O(shè)置http消息頭就可以實(shí)現(xiàn)重定向跳轉(zhuǎn)

        //設(shè)置狀態(tài)碼是302
        response.setStatus(302);

        //HttpServletResponse把常用的狀態(tài)碼封裝成靜態(tài)常量了,所以我們可以使用SC_MOVED_TEMPORARILY代表著302
        response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);

        //跳轉(zhuǎn)的地址是index.jsp頁(yè)面
        response.setHeader("Location", "/zhongfucheng/index.jsp");

其實(shí)sendRedirect()方法就是對(duì)setStatus()和setHeader()進(jìn)行封裝,原理就是setStatus()和setHeader()

getWriter和getOutputStream細(xì)節(jié)

getWriter()和getOutputStream()兩個(gè)方法不能同時(shí)調(diào)用。如果同時(shí)調(diào)用就會(huì)出現(xiàn)異常

Servlet程序向ServletOutputStream或PrintWriter對(duì)象中寫(xiě)入的數(shù)據(jù)將被Servlet引擎從response里面獲取,Servlet引擎將這些數(shù)據(jù)當(dāng)作響應(yīng)消息的正文,然后再與響應(yīng)狀態(tài)行和各響應(yīng)頭組合后輸出到客戶端

Servlet的serice()方法結(jié)束后【也就是doPost()或者doGet()結(jié)束后】,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對(duì)象是否已經(jīng)調(diào)用過(guò)close方法,如果沒(méi)有,Servlet引擎將調(diào)用close方法關(guān)閉該輸出流對(duì)象.

如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章的同學(xué),可以關(guān)注微信公眾號(hào):Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68410.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫(xiě)的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫(xiě)的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡(jiǎn)單 注解就這么簡(jiǎn)單 Druid數(shù)據(jù)庫(kù)連接池...

    KevinYan 評(píng)論0 收藏0
  • JSP 學(xué)習(xí)記錄

    摘要:對(duì)象具有請(qǐng)求域,即完成客戶端的請(qǐng)求之前,該對(duì)象一直有效。提交的數(shù)據(jù)量最多不超過(guò)。安全性較低但效率比方式高。適合提交數(shù)據(jù)量大,安全性高的用戶信息。除非本次會(huì)話的所有頁(yè)面都關(guān)閉后再重新訪問(wèn)某個(gè)或者,將會(huì)創(chuàng)建新的會(huì)話。 JSP 簡(jiǎn)介 全名為Java Server Pages,其根本是一個(gè)簡(jiǎn)化的Servlet設(shè)計(jì),實(shí)現(xiàn)了在Java當(dāng)中使用HTML標(biāo)簽。JSP是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),也是Java...

    BearyChat 評(píng)論0 收藏0
  • 小白爬蟲(chóng)scrapy三篇

    摘要:基于的樹(shù)狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。起初的提出的初衷是將其作為一個(gè)通用的介于與間的語(yǔ)法模型。 在你的spiders目錄下創(chuàng)建自己第一個(gè)爬蟲(chóng)項(xiàng)目,我我這兒命名為AiquerSpider.py然后編輯文件 # !/usr/bin/python # -*- coding: UTF-8 -*- import scrapy from scrapy.http import Reque...

    laznrbfe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Youngs

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<