Servlet3.0新特性

1 Servlet3.0新特性概述

  使用要求:MyEclipse10.0或以上版本,發布到Tomcat7.0或以上版本,創建JavaEE6.0應用!
  Servlete3.0的主要新特性如下三部分:
    使用@WebServlet、@WebFilter、@WebListener三個注解來替代web.xml文件中的Servlet、Filter、Listener的配置;
    Servlet異步處理:當Servlet處理比較費時的問題時,這會讓客戶感覺到很卡(原來(Servlete2.5),在服務器沒有結束響應之前,瀏覽器是看不到響應內容的,只有響應結束時,瀏覽器才能顯示結果!)。當使用異常處理時可以把已經處理好的內容先一步響應給客戶端瀏覽器,然后使用另一個線程來完成費時的操作,也就是把內容一部分一部分的顯示出來;
    上傳組件:不用再使用commons-fileupload等第三方的上傳組件,使用Servlet3.0的上傳組件會更方便。

2 @WebServlet、@WebFilter、@WebListener(使用前提:刪除web.xml文件,好處:配置信息少,缺點:不方便修改) 

@WebServlet( urlPatterns="/AServlet", initParams={    //初始化參數@WebInitParam(name="p1", value="v1"),@WebInitParam(name="p2", value="v2")},//標記容器是否在啟動的時候就加載這個servlet(實例化并調用其init()方法),值代表優先級,正數的值越小,優先級越高,啟動時就越先加載loadOnStartup=1    
)
public class AServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.getWriter().print("hello servlet3.0!!");}
}
@WebFilter(urlPatterns="/*")
public class AFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse repsonse,FilterChain chain) throws IOException, ServletException {System.out.println("過濾器。。。。。。。。。。。。");chain.doFilter(request, repsonse);}@Overridepublic void destroy() {}@Overridepublic void init(FilterConfig arg0) throws ServletException {}
}
@WebListener
public class AListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {System.out.println("死掉了");}@Overridepublic void contextInitialized(ServletContextEvent arg0) {System.out.println("出生了");}
}

3 Servlet異步處理
  Servlet異步處理就是讓Servlet在處理費時的請求時不要阻塞,而是一部分一部分的顯示。也就是說,在使用Servlet異步處理之后,頁面可以一部分一部分的顯示數據,而不是一直卡,等到請求響應結束后一起顯示。
  在使用異步處理之前,一定要在@WebServlet注解中給出asyncSupported=true,不然默認Servlet是不支持異步處理的。如果存在過濾器,也要設置@WebFilter的asyncSupportedt=true。注意,響應類型必須是text/html,所以要設置:response.setContentType(“text/html;charset=utf-8”);

  使用異步處理大致可以分為兩步:Servlet正常響應數據,Servlet異常響應數據。

  在Servlet正常響應數據時,沒什么可說的,可通知response.getWriter().print()來向客戶端輸出,但輸出后要使用response.getWriter().flush()刷新,不然數據只是在緩沖區中,不能向客戶端發送數據的。
  異步響應數據需要使用request.startAsync()方法獲取AsyncContext對象。然后調用AsyncContext對象的start()方法啟動異步響應,start()方法需要一個Runnable類型的參數。在Runnable的run()方法中給出異步響應的代碼。注意在異步處理線程中使用response做響應后,要使用response.getWriter().flush()來刷新流,不然數據是不能響應到客戶端瀏覽器的。

@WebServlet(urlPatterns="/AServlet", asyncSupported=true)
public class AServlet extends HttpServlet {public void doGet(final HttpServletRequest req, final HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");//兼容IE!如果輸出不足512B,IE沒有異步效果!for(int i = 0; i <= 512; i++) {resp.getWriter().print("a");}resp.getWriter().flush();//得到異步上下文對象final AsyncContext ac = req.startAsync(req, resp);/*** 設置超時時間為10秒,Tomcat需要知道異步響應是否結束,如果響應不結束,雖然客戶端瀏覽器會看到響應的數據,但是鼠標上只是有個圈圈的不行的轉啊轉的,表示還沒有結束響應。Tomcat會等待到超時為止,這個超時的時間可以通過AsyncContext類的getTimeout()方法獲取,Tomcat默認為20000毫秒。當然也可以通過此方法方法設置*/ac.setTimeout(1000*10);//給上下文對象一個Runnable對象,讓它執行這個任務ac.start(new Runnable() {public void run() {println("現在馬上開始<br/>", resp);sleep(2000);for(char c = 'A'; c <= 'Z'; c++) {println(c+"", resp);sleep(250);}ac.complete();// 通知Tomcat我們已經執行結束了!
            }});}public void println(String text, HttpServletResponse resp) {try {resp.getWriter().print(text);resp.getWriter().flush();} catch (IOException e) {}}public void sleep(long ms) {try {Thread.sleep(ms);} catch (InterruptedException e) {}}
}

4 文件上傳
  Servlet3.0提供了文件上傳的處理方案。只需要在Servlet上添加@MultipartConfig注解即可。

  當然也可以為@MultipartConfig注解指定屬性值,它有四個屬性:
    int filesizeThreshold:指定緩存的大小,當超出這個大小后,文件會保存到磁盤上;
    String location:指定臨時文件的目錄;
    long maxFilesize:指定上傳單個文件的大小限制,如果上傳的誰的超出了這個大小,那么就會拋出異常;
    long maxRequestSize:指定整個表單的大小限制。

  當在Servlet上使用了@MultipartConfig注解后,那么就可以使用request.getPart(“fieldName”)來獲取<input:file>的內容,其中Part表示一個文件表單項。

<form action="<c:url value='/AServlet'/>" method="post" enctype="multipart/form-data">用戶名:<input type="text" name="username"/><br/>簡 歷:<input type="file" name="resume"/><br/><input type="submit" value="注冊"/>
</form>
@WebServlet(urlPatterns="/AServlet")
@MultipartConfig(maxFileSize=1024*1024)
public class AServlet extends HttpServlet {@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");//getParameter()方法可以使用了!!!String username = req.getParameter("username");//可以使用了!!!//獲取文件表單字段,對應的Part對象Part part = req.getPart("resume");//從Part中獲取需要的數據System.out.println(part.getContentType());//獲取上傳文件的MIME類型System.out.println(part.getSize());// 獲取上傳文件的字節數System.out.println(part.getName());// 獲取文件字段名稱System.out.println(part.getHeader("Content-Disposition"));// 獲取頭,這個頭中包含了上傳文件的名稱part.write("C:/xxx.jpg");// 保存上傳文件// 截取上傳文件名稱String filename = part.getHeader("Content-Disposition");int start = filename.lastIndexOf("filename=\"") + 10;int end = filename.length() - 1;filename = filename.substring(start, end);System.out.println(filename);}
}

轉載于:https://www.cnblogs.com/fengmingyue/p/6091045.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456899.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機系統遵循,自考《計算機系統結構》第10章精講

第十章 新型計算機系統結構本章只作一般要求&#xff0c;了解基本原理和概況。一、計算模型分類(識記)計算模型是描述如何在計算機中完成計算的一種概念性方法&#xff0c;不涉及硬件和軟件細節。它給出了完成計算所必須遵循的基本規則。計算機系統結構是有關計算模型的一個具體…

re模塊的使用

import re # pip 包管理工具r re.match函數 原型&#xff1a;match(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位&#xff0c;用于控制正則表達式的匹配方式,值如下 re.I 忽略大小寫 re.L 做本地話識別 re.M 多行匹配&…

Random Forest隨機森林概述

引言 在機器學習中&#xff0c;隨機森林由許多的決策樹組成&#xff0c;因為這些決策樹的形成采用了隨機的方法&#xff0c;因此也叫做隨機決策樹。隨機森林中的樹之間是沒有關聯的。當測試數據進入隨機森林時&#xff0c;其實就是讓每一顆決策樹進行分類&#xff0c;最后取所…

走出半生,望你歸來仍是程序員

在世二十七年&#xff0c;自認為積累了一點人生經驗。思索著當你還在你娘胎的日子里&#xff0c;整理一番留給以后的你&#xff0c;當作你以后漫漫人生路上的參考。我保證&#xff0c;倘若哪天你發現某條不對或者跟你的想法不一樣&#xff0c;你能敞開心扉與我交談&#xff0c;…

kd tree學習筆記 (最近鄰域查詢)

https://zhuanlan.zhihu.com/p/22557068 http://blog.csdn.net/zhjchengfeng5/article/details/7855241 KD樹在算法競賽中主要用來做各種各樣的平面區域查詢&#xff0c;包含則累加直接返回&#xff0c;相交則繼續遞歸&#xff0c;相離的沒有任何貢獻也直接返回。可以處理圓&am…

正則表達式的元素符

import reprint("----------匹配單個字符與數字----------") r . 匹配除換行符以外的任意字符 [0123456789] []是字符集合&#xff0c;表示匹配方括號中所有所包含的任意一個字符 [liuwang] [] 匹配‘l&#xff0c;i&#xff0c;u 中任意一個字符…

圖像影音型計算機主板選擇什么,電腦主板型號在哪里看? 每日一答

電腦主板型號在哪里看&#xff1f;想要看主板的型號其實非常簡單&#xff0c;一般來說&#xff0c;主板上都會有一個專門的身份標識&#xff0c;位于PCI-E顯卡插槽之間&#xff0c;比如下方這張圖&#xff0c;就清晰地寫明了MAXIMUS X APEX的標識&#xff0c;熟悉的玩家一眼就能…

使用葉神模擬器無法訪問本機服務器的問題(報錯:java.net.ConnectException: failed to connect to /127.0.0.1 (port 5000) )

最近打算用夜神模擬器來和本機服務器做一些信息交互的功能&#xff0c;但是服務器搭建好了&#xff0c;用葉神模擬器卻無法訪問。折騰了大半天才發現原來是模擬器的問題。 具體過程如下&#xff1a; 搭建好服務器后&#xff0c;在本機上訪問“http://127.0.0.1:5000/”&#…

NSObject協議中方法:description 和 debugDescription

description基本概念 1.NSLog("%", objectA);這會自動調用objectA的description方法來輸出ObjectA的描述信息. 2.description方法默認返回對象的描述信息(默認實現是返回類名和對象的內存地址) 3.description方法是基類NSObject 所帶的方法,因為其默認實現是返回類名…

re模塊的深入

import re 字符串切割str1 "allen is a good man" print(str1.split()) print(re.split((r" "),str1)) re.finditer函數 原型&#xff1a;finditer(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位&…

身份證

<?php defined(IN_IA) or exit(Access Denied);class check {// $num為身份證號碼&#xff0c;$checkSex&#xff1a;1為男&#xff0c;2為女&#xff0c;不輸入為不驗證public function checkIdentity($num, $checkSex ) {// 不是15位或不是18位都是無效身份證號if (strl…

鼓勵參與計算機考試宣傳標語,誠信考試的宣傳標語(精選60條)

誠信考試的宣傳標語(精選60條)誠信考試&#xff0c;做文明公民&#xff0c;既是時代需要&#xff0c;也是做人的基本準則。下面是小編收集的誠信考試的宣傳標語(精選60條)&#xff0c;歡迎閱讀。1、讓舞弊遠離校園&#xff0c;讓誠信常駐心中2、刻苦學習&#xff0c;認真做人3、…

初學大數據之如何選擇機器學習算法

最近在國外網站看到一篇不錯的文章&#xff0c;所以就翻譯過來給大家分享一下。主要介紹初學者怎么選擇機器學習算法,希望對各位初學者有幫助。 原文如下: 一個初學者面臨各種機器學習算法的典型問題是“我應該使用哪種算法&#xff1f;”問題的答案取決于許多因素&#xff0…

Django查詢 – id vs pk

當編寫django查詢時&#xff0c;可以使用id / pk作為查詢參數。 Object.objects.get(id1) Object.objects.get(pk1) pk代表主鍵(primary key)&#xff0c; pk更加獨立于實際的主鍵字段&#xff0c;即不必關心主鍵字段是否被稱為id或object_id或其他。 如果您具有不同主鍵字…

Tomcat的Session管理(三)

摘要&#xff1a;PersistentManager與StandardManager的異同。 之前兩篇關于session的文章主要討論了session相關的創建、查詢、過期處理。而我們查看源碼的時候都是默認實現是StandardManager類&#xff0c;實際上實現也可以是PersistentManager類&#xff0c;下面我們就查看下…

計算機基礎的函數公式,大學計算機基礎 excle 公式與函數

《大學計算機基礎 excle 公式與函數》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《大學計算機基礎 excle 公式與函數(32頁珍藏版)》請在人人文庫網上搜索。1、,.,場景1,發布日期:2011.11.09,新入職場,經理說&#xff1a; 小張&#xff0c;以后工資發放的事情就交給…

穩定和性能如何兼顧?58大數據平臺的技術演進與實踐

作者&#xff5c;趙健博 編輯&#xff5c;尚劍 本文將為你分享58大數據平臺在最近一年半內技術演進的過程&#xff0c;包括&#xff1a;58大數據平臺目前的整體架構是怎么樣的&#xff1b;最近一年半的時間內我們面臨的問題、挑戰以及技術演進過程&#xff1b;以及未來的規劃。…

Random Forest算法簡介

轉自JoinQuant量化課堂 一、相關概念 分類器&#xff1a;分類器就是給定一個樣本的數據&#xff0c;判定這個樣本屬于哪個類別的算法。例如在股票漲跌預測中&#xff0c;我們認為前一天的交易量和收盤價對于第二天的漲跌是有影響的&#xff0c;那么分類器就是通過樣本的交易量…

MySQL 學習筆記

01 import pymysql#連接數據庫db pymysql.connect("192.168.1.179","root","liuwang","liu")#創建一個cursor對象 cursor db.cursor() sql "select version()"cursor.execute(sql)data cursor.fetchone() print(data)…

簡單交互

控件有著各種事件&#xff0c;例如被點擊的時候&#xff0c;我們可以在事件里面添加動作和命令&#xff0c;讓控件可以和用戶交互&#xff0c;這里我們演示一個簡單的交互&#xff1a;當用戶點擊文字控件的時候&#xff0c;它開始動畫向下移動然后動畫旋轉&#xff0c;效果入下…