亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入分析java中webwork中的文件上傳機制

2019-11-18 11:29:33
字體:
來源:轉載
供稿:網友

點擊上傳按鈕后,webwork的程序流如下:
step 1)進入ServletDispatcher.service
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {
........

request = wraPRequest(request);
.........
}

step2)進入ServletDispatcher.wrapRequest
protected HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
........................

if (MultipartRequest.isMultiPart(request)) {
request = new MultiPartRequestWrapper(request, getSaveDir(), getMaxSize());
}

return request;
}

step3)進入MultiPartRequestWrapper的構造方法
public MultiPartRequestWrapper(HttpServletRequest request, String saveDir, int maxSize) throws IOException {
.....................
//step3.1)獲取webwork.preperties配置的parser
String parser = "";

parser = Configuration.getString("webwork.multipart.parser");

// If it's not set, use Pell
if (parser.equals("")) {
log.warn("Property webwork.multipart.parser not set." +
" Using com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest");
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
}
// legacy support for old style property values
else if (parser.equals("pell")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
} else if (parser.equals("cos")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest";
} else if (parser.equals("jakarta")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";
}

//step3.2)獲取后通過反射實例化parser
try {
Class baseClazz = com.opensymphony.webwork.dispatcher.multipart.MultiPartRequest.class;

Class clazz = Class.forName(parser);

// make sure it extends MultiPartRequest
if (!baseClazz.isAssignableFrom(clazz)) {
addError("Class '" + parser + "' does not extend MultiPartRequest");

return;
}

// get the constrUCtor
Constructor ctor = clazz.getDeclaredConstructor(new Class[]{
Class.forName("javax.servlet.http.HttpServletRequest"),
java.lang.String.class, int.class
});

// build the parameter list
Object[] parms = new Object[]{
request, saveDir, new Integer(maxSize)
};

// instantiate it
multi = (MultiPartRequest) ctor.newInstance(parms);
.................................................
}

//step4 進入JakartaMultiPartRequest的構造方法(我在webwork配置的parser是Jakarta所以進入了這個方法,假如你配置不同的parser回進入不同的parser
public JakartaMultiPartRequest(HttpServletRequest servletRequest, String saveDir, int maxSize)
throws IOException {

//設置保存參數
DiskFileUpload upload = new DiskFileUpload();
// we must store all uploads on disk because the ww multipart API is missing streaming
// capabilities
upload.setSizeThreshold(0);
upload.setSizeMax(maxSize);
if (saveDir != null) {
upload.setRepositoryPath(saveDir);
}

// Parse the request
try {

//此方法生成文件,將請求中的每個參數都生成一個臨時文件比如upload_00000017.tmp, upload_00000018.tmp等,就算是form提交的參數也如此
List items = upload.parseRequest(servletRequest);

......................
}
執行完第四步,然后推出ServletDispatcher.wrapRequest,進入serviceAction方法,開始action及其攔截器的棧調用

在此過程中會刪除非上傳文件的臨時文件,至于哪一步刪除,我還沒看出來,有時候很早有時候很晚,有時候甚至沒有刪除,我懷疑有個dameon在做這個事。

進入action和調用棧后,攔截器或action可通過如下代碼訪問上傳的臨時文件
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) req;
File doc = wrapper.getFiles("doc")[0];

從上面的分析可以看出:
1)假如你使用webwork來上傳文件(在進入action棧之前不修改源碼或者做一些擴展、覆蓋之類的動作),在進入action棧的時候文件已經上 傳,而且其文件名很難跟蹤(upload_00000017.tmp,到底是00000017,0000018,或者0000022等等),究竟有很多人 上傳文件,所以臨時文件名很難確定,所以假如你想知道上傳的進度很難。
2)利用webwork上傳文件是兩次拷貝過程,webwork首先從request的輸入流中將文件流輸出到一個臨時文件,然后你再將此臨時文件拷貝到你需要指定的路徑。這是好是壞?



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品视频| 欧美疯狂性受xxxxx另类| 亚洲精品动漫100p| 久久韩国免费视频| 色综合男人天堂| 亚洲精品综合久久中文字幕| 性色av一区二区三区| 国产精品成熟老女人| 亚洲国产日韩欧美在线图片| 综合av色偷偷网| 亚洲精品一区av在线播放| 亚洲欧美中文日韩在线| 国产精品日韩在线播放| 国产精品第100页| 国产精品自产拍高潮在线观看| 成人欧美一区二区三区黑人孕妇| 欧美国产日本在线| 欧美国产乱视频| 亚洲激情视频在线观看| 插插插亚洲综合网| 日韩欧美国产激情| 欧美极品少妇全裸体| 国产成人在线一区二区| 96国产粉嫩美女| 成人激情黄色网| 久久久久久中文字幕| 色老头一区二区三区在线观看| 久久久久999| 精品福利在线看| 亚洲电影天堂av| 欧美怡春院一区二区三区| 日韩视频永久免费观看| 日韩av中文字幕在线播放| 98精品国产高清在线xxxx天堂| 精品偷拍一区二区三区在线看| 国产亚洲免费的视频看| 久久久久久久久久久av| 久久精品视频在线观看| 九九综合九九综合| 在线观看成人黄色| 夜色77av精品影院| 欧美精品在线视频观看| 欧美在线视频导航| 国产成人精品视频在线观看| 国产精品一区二区久久久| 国产精品男女猛烈高潮激情| 国产精品久久久久福利| 欧美猛交ⅹxxx乱大交视频| 亚洲国产精品国自产拍av秋霞| 国产视频精品一区二区三区| 九九热99久久久国产盗摄| 久久伊人精品一区二区三区| 欧美尺度大的性做爰视频| 日韩av在线资源| 国产精品视频在线播放| 日韩a**中文字幕| 日日噜噜噜夜夜爽亚洲精品| 26uuu另类亚洲欧美日本一| 久99久在线视频| 91在线免费视频| 粉嫩老牛aⅴ一区二区三区| 45www国产精品网站| 激情亚洲一区二区三区四区| 欧美电影《睫毛膏》| 日韩欧美有码在线| 国语对白做受69| 国产午夜精品久久久| 国产亚洲精品久久久久久| 亚洲激情电影中文字幕| 精品久久久久久久久久久| 亚洲午夜未满十八勿入免费观看全集| 欧美亚洲另类激情另类| 欧美日韩在线观看视频| 亚洲成人精品av| 国产精品美女www爽爽爽视频| 北条麻妃一区二区在线观看| 欧美人交a欧美精品| 亚洲免费视频一区二区| 91精品国产沙发| 国产精品成人播放| 欧美精品18videosex性欧美| 久久久久免费精品国产| 国产一区二区三区直播精品电影| 国产+成+人+亚洲欧洲| 福利二区91精品bt7086| 亚洲精品suv精品一区二区| 久久99久国产精品黄毛片入口| 日韩网站在线观看| 色妞色视频一区二区三区四区| 性欧美视频videos6一9| 91网站在线免费观看| 欧美日韩在线视频观看| 久久理论片午夜琪琪电影网| 国产丝袜视频一区| 欧美性xxxxx极品娇小| 色婷婷亚洲mv天堂mv在影片| 精品国产欧美成人夜夜嗨| 亚洲精品视频网上网址在线观看| 国产精品久久久久久久一区探花| 欧美成人一区二区三区电影| 国产精品91一区| 精品无人国产偷自产在线| 欧美精品电影免费在线观看| 亚洲自拍欧美另类| 一区二区三区黄色| 成人444kkkk在线观看| 亚洲精品久久久久中文字幕欢迎你| 茄子视频成人在线| 在线观看欧美视频| 91日本在线视频| 亚洲电影成人av99爱色| 国产欧美日韩精品丝袜高跟鞋| 日韩亚洲欧美成人| 57pao成人永久免费视频| 欧美重口另类videos人妖| 亚洲国产精彩中文乱码av在线播放| 91高潮在线观看| 久久精品福利视频| 欧美激情精品久久久久久大尺度| 91超碰中文字幕久久精品| 九九热这里只有在线精品视| 精品亚洲一区二区三区在线播放| 亚洲精品美女久久久久| 成人国产精品日本在线| 精品毛片三在线观看| 亚洲日本aⅴ片在线观看香蕉| 成人福利在线视频| 欧美成人精品h版在线观看| 亚洲免费视频一区二区| 亚洲国产91色在线| 91国内在线视频| 国产成人一区二区三区| 岛国av一区二区三区| 日韩av电影院| www.精品av.com| 久久国产精品久久久久久| 久久这里只有精品视频首页| 97香蕉超级碰碰久久免费的优势| 91精品国产高清久久久久久91| 亚洲欧美在线一区二区| 69精品小视频| 日韩va亚洲va欧洲va国产| 欧美日韩国产123| 在线观看日韩av| 亚洲国语精品自产拍在线观看| 另类天堂视频在线观看| 亚洲午夜av久久乱码| 国产精品日韩在线观看| 国产成人综合精品在线| 青草青草久热精品视频在线观看| 中文字幕日韩欧美在线视频| 久久久亚洲福利精品午夜| 国产精品中文久久久久久久| 亚洲成人在线网| 亚洲色图国产精品| 久久视频免费观看| 国产一区二区三区18| 国内精品美女av在线播放| 午夜精品久久久久久久99黑人| 亚洲男人的天堂在线播放| 国产精品精品视频| 91国产精品视频在线| 精品高清一区二区三区| 国产一区二区欧美日韩|