① springmvc文件上傳可以是zip嗎
Spring MVC文件上傳框架是支持zip的,還包括text、xls、word等文件格式,但一般文件大小都有一定的限制,如下文件上傳zip格式的代碼:
java">packagecom.test.controller;
importjava.io.File;
importjava.util.Map;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importorg.apache.commons.io.FilenameUtils;
importorg.apache.commons.lang3.ArrayUtils;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.ResponseBody;
importorg.springframework.web.multipart.commons.CommonsMultipartFile;
importcom.test.servlet.NoSupportExtensionException;
importcom.test.servlet.State;
@Controller
@RequestMapping(value="/mvc")
publicclassUploadController{
/**日誌對象*/
privateLoglogger=LogFactory.getLog(this.getClass());
=1L;
/**上傳目錄名*/
="uploadFiles";
/**允許上傳的擴展名*/
privatestaticfinalString[]extensionPermit={"txt","xls","zip"};
@RequestMapping(value="/upload.do",method=RequestMethod.POST)
public@ResponseBodyMap<String,Object>fileUpload(@RequestParam("file")CommonsMultipartFilefile,
HttpSessionsession,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
logger.info("UploadController#fileUpload()start");
//清除上次上傳進度信息
StringcurProjectPath=session.getServletContext().getRealPath("/");
StringsaveDirectoryPath=curProjectPath+"/"+uploadFolderName;
FilesaveDirectory=newFile(saveDirectoryPath);
logger.debug("Projectrealpath["+saveDirectory.getAbsolutePath()+"]");
//判斷文件是否存在
if(!file.isEmpty()){
StringfileName=file.getOriginalFilename();
StringfileExtension=FilenameUtils.getExtension(fileName);
if(!ArrayUtils.contains(extensionPermit,fileExtension)){
("NoSupportextension.");
}
file.transferTo(newFile(saveDirectory,fileName));
}
logger.info("UploadController#fileUpload()end");
returnState.OK.toMap();
}
}
② ASP.NET中的MVC如何使用
上面的這位同學
在回答什麼
我都沒明白,他都沒說報錯
你就知道是單元測試報錯?
開玩笑
這樣的一概而論
還說自己非常全面的研究了MVC?
ASP.NET
在創建項目的時候
可以創建一個MVC得框架
然後會提示
是否創建測試
選擇否
然後創建一個MVC
。然後你可以運行一下
看下效果。在URL
路由方面
Controllers->HomeControllers.cs->創建新方法返回ViewResult()->Views->Home->創建新頁面->Shared->site.Master->添加《%:Html.ActionLink("方法名稱","頁面名稱","Home")%》
-》運行。
一般在HomeCollers.cs裡面創建的方法名和
Views
文件夾得Home下面
創建的頁面的名字是相同的。
③ MVC中文件放置問題,MVC中的controllers.cs文件一定要放到Controllers文件夾裡面嗎
可以這么考慮!@鐳毅不懂不要胡亂說,mvc會在運行時搜索你毀賀整個程序引用的dll裡面的類,只要是非抽象類、實現了IController介面,而且名字是Controller結答念尾的類清余困,都會被自動作為Controller添加到ControllerFactory,所以你的類只要符合這幾個條件並且扔到bin目錄下面,就可以被mvc認出來
④ ASP.NET MVC4大文件下載的問題
剛碰到這個問題,下面的代碼可以直接拷貝使用。
protected void Page_Load(object sender, EventArgs e)
{
DownFile1(@"D:\常用軟體\win7.iso", "win7.iso");
}
private void DownFile1(string filePath, string fileName)
{
ResponseFile(this.Request, this.Response, fileName, filePath, 1024000);
}
// 輸出硬碟文件,提供下載
// 輸入參數 _Request: Page.Request對象, _Response: Page.Response對象, _fileName: 下載文件名, _fullPath: 帶文件名下載路徑, _speed 每秒允許下載的位元組數
// 返回是否成功
public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;
int pack = 10240; //10K bytes
//int sleep = 200; //每秒5次 即5*10K bytes每秒
int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1;
for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i = maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}
⑤ ASP.NET MVC簡單編程篇
ASP NET MVC概念
ASP NET MVC 是微軟官方提供的MVC模式 說白了 ASP NET MVC知識開發ASP NET Web
應用程序的一個框架而已 而且其只是一個表示層框架 同時也是微軟的第一個開源項目
使用ASP NET開發web應用程序方式
WebForm方式
Asp Net MVC 方式
注意 WebForm方式和Asp Net MVC方式是使用開發web應用程序的兩種並行方式 mvc(以下簡稱mvc)的目的並不是取代WebForm 而是web開發的另外一種選擇而已
MVC模式簡介
MVC模式是一種表現模式 它將web應用程序分成三個主要組件 即 視圖(View) 控制器(Controller)和模型(Model)
M Model主要是存儲或者是處理數據的組件
Model其實是實現業務邏輯層對實體類相應資料庫操作 如CRUD(Create/Retrieve/Update/Delete) 它包括數據 驗證規則 數據訪問和業務邏輯等應用程序信息
V View是用戶介面層組件 主要是將Model中的數據展示給用戶
C Controller處理用戶交互 從Model中獲取數據並將數據傳給指定的View
要點
M和V的實現代碼分離 從而使吵轎同一個程序可以使用不同的表現形式 C存在的目的則是確保M和V的同步 一旦M改變 V應該同步更新
控制器隔離了業務邏輯和View耦合 使得業務邏輯和數據規則等很容易改變而不影響到蘆碰局前台頁面
View和Controller都可以直接請求Model 但是Model不依賴View和Controller
Controller可以直接請求View來顯示具體頁面 View不依賴Controller
第一個Asp Net MVC程序
案例 下面我們通過向EFFirst資料庫的Customer表中添加數據數據並且將所有用戶信息展示到對應頁面的方式 來書寫第一個Asp Net MVC應用程序
Customer表結構
CustId(客戶編號) 主鍵自動增長
CustName(客戶姓名)
CustAddress(客戶地址)
首先創建MVC 的項目
對解決方案點右鍵 新建項目 如下圖
將項目名稱命名為MyMVC 然後點擊確定 如下圖
選擇否 點擊確定
接下來對項目的目錄結構進行剖析
App_Data;在該文件夾下的文件是不同通過URL訪問的 起到保護文件的作用
Content:項目用到的素材和樣式等的文件夾 例如我們可以將Image文件夾和Css文件夾放到Content文件夾中
Controllers:控制器存儲文件夾
Models 模型存放文件夾
Scripts js(javascript)文件存儲文件夾
Views 視圖存放文件夾
創建控制器UserInfoController
創建視圖Register
Register頁面對Controller發起請求 請求可以分兩種 get和post 所以我們寫了兩個action 為了方便後續操作 我們可以對action寫一個重載 無參的Register()用來處理get請求 帶參數的Register(FormCollection collection)用來處理post請求 如下圖
然後對無參的Register點右鍵 選擇添陪讓加視圖菜單項
點擊添加按鈕 則在Views文件夾中會自動創建出一個名稱為UserInfo(和action所在的控制器名稱相同)的文件夾 並且在該文件夾下創建一個名稱為Register的aspx文件 注意 這里的aspx文件沒有後綴名為 cs的文件
在Register中書寫代碼如下所示
既然是注冊頁面 必須將用戶輸入的信息提交到伺服器 此時我們可以使用form表單 為其action屬性設置屬性值為 /UserInfo/Register UserInfo代表的是UserInfoController Register代表UserInfoController下的action 也即是說我們將信息提交到了Register這個action
用戶填寫完信息後 流程跳轉到了UserInfoController 此時我們可以在接收Post請求的action中書寫如下代碼
說明 return RedirectToAction( Index )作用是跳轉到名稱為Index的action繼續執行
創建action Index和視圖Index
用同樣的方式對Index點右鍵 創建View Index
<style type= text/css > th td { text align: center; } </style> <h >微冷的雨 用戶詳細信息頁面</h > <h >由於顧客的數據肯定會出現多條 因此使用table顯示</h > <table width= % > <thead> <tr> <td>編號</td> <td>用戶姓名</td> <td>用戶地址</td> </tr> </thead> <tbody> <% foreach (var item in (IEnumerable<Customer>)ViewData[ Customer ]) {%> <tr> <td><%:item CustId %></td> <td><%:item CustName %></td> <td><%:item CustAddress %></td> </tr> <%} %> </tbody> </table> View Code 最終我們可以實現如下效果 lishixin/Article/program/net/201311/12164
⑥ 關於MVC中多級文件夾路由設置問題
routes.MapRoute(
"test", // 路由名稱
"Admin/Manage/MemberManage/BaseInfo/{id}",
new { controller = "MemberManage", action = "BaseInfo", id = UrlParameter.Optional }
);
比如你的請求是Admin/Manage/MemberManage/BaseInfo/1
它會在你定義好的route表裡找出匹配的,然後根據你定義的controller,action去查找視圖
[action]
/Controllers/MemberManageController - > BaseInfo
[view]
~/Views/{controller}/{action}.aspx
⑦ 請教各位mvc的js打包壓縮有關的問題
1.引用js文件,如果有.min.js和.js文件 最好只引用.js文件 而不去引用.min.js文件,因為系統在Release之後會自動去查找相應的.min.js文件的 而在debug時會引用.js文件 這樣方便調試
2.確定文件是否存在,如果不存在,知道怎麼改了吧??
3.我發現樓主還不了解BundleConfig的使用方法。
new StyleBundle("綁定實例名") 這里明明是名稱,但為什麼這名稱看起來像路徑
比如你這里的 new StyleBundle("~/Index/css_easyui")
為什麼會像路徑??
這是有原因的
當你在Release之後 BundleConfig會把你這個Include中的所有文件進行壓縮成一個文件,但這個襪余文件的路徑是什芹好緩么,就是這個"綁定實例名"
也就是說 在這里,當你Release之後 你的嫌模css將會生成 <link type="text/css" rel="stylesheet" href="~/Index/css_easyui?隨機數"/>
接著說:
如果 你的css文件~/Content/Css/themes/icon.css裡面有句話:
.cls
{
background-image:url(../img/xxxx.gif);
}
發現問題沒有呢? 在Release之前
這個背景圖的路徑是:~/Content/Css/img/xxxx.gif
而在Release之後 因為你的css文件已經整合到了~/Index/css_easyui?隨機數這個文件裡面
所以Release之後這個圖片路徑卻變成了:~/img/xxxx.gif
⑧ 如何用gzip的格式壓縮jQuery的POST數據
這是後端和伺服器要考慮的事情,
不同的後端技術還不一樣,
對於tomcat伺服器,打開conf文件夾下的server.xml 文件
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
修改為
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript,text/css,text/plain"/>
對於node.js伺服器,不同的mvc框架有不同的封裝
//express
varcompression=require('compression');
varexpress=require('express');
varapp=express();
app.use(compression());
//node。js主要採用zlib
nginx開啟gizp
1、Vim打開Nginx配置文件
vim/usr/local/nginx/conf/nginx.conf
2、找到如下一段,進行修改
gzipon;
gzip_min_length1k;
gzip_buffers416k;
#gzip_http_version1.0;
gzip_comp_level2;
gzip_typestext/plainapplication/x-javascripttext/cssapplication/xmltext/javascriptapplication/x-httpd-phpimage/jpegimage/gifimage/png;
gzip_varyoff;
gzip_disable"MSIE[1-6].";
3、解釋一下
第1行:開啟Gzip
第2行:不壓縮臨界值,大於1K的才壓縮,一般不用改
第3行:buffer,就是,嗯,算了不解釋了,不用改
第4行:用了反向代理的話,末端通信是HTTP/1.0,有需求的應該也不用看我這科普文了;有這句的話注釋了就行了,默認是HTTP/1.1
第5行:壓縮級別,1-10,數字越大壓縮的越好,時間也越長,看心情隨便改吧
第6行:進行壓縮的文件類型,缺啥補啥就行了,JavaScript有兩種寫法,最好都寫上吧,總有人抱怨js文件沒有壓縮,其實多寫一種格式就行了
第7行:跟Squid等緩存服務有關,on的話會在Header里增加"Vary:Accept-Encoding",我不需要這玩意,自己對照情況看著辦吧
第8行:IE6對Gzip不怎麼友好,不給它Gzip了
⑨ 什麼是MVCMVC的各個部分都有哪些技術實現
MVC : Model - View - Control 分別代表模型, 視圖,控制器。
MVC 只是一個編程分層的概念,並不是什麼編程技術喊陸,你用培租ASP,PHP,JAVA,.NET 都可配滲兆以實現。
其中M 與資料庫打交道,封裝數據操作,只提供介面給 C
C 是路由控制器,負責程序的來龍去脈動,連接 M 與 V
V 是視圖,負責接收C傳過來的參數並顯示給用戶
MVC 只要你寫好M,C,用模板技術,如 SMARTY 分離出數據與模板即是一個簡單的 MVC 框架,我本身也有寫 MVC 框架,前後台分離,但共用類庫,M與C 都寫在共用的文件夾里,統一調用,前後台有各自的V,用SMARTY 分離實現,多模板,多語言切換
⑩ Web Api及MVC性能提升的幾個小技巧
一、緩存
為了避免每次請求都去訪問後台的資源,我們一般會考慮將一些更新不是很頻繁的,可以重用的數據,通過一定的方式臨時地保存起來,後續的請求根據情況可以直接訪問這些保存起來的數據,這種機制就是所謂的緩存機制。緩存分為頁面輸出緩存,內存數據緩存和緩存依賴等。從設計原則來說,易變性、敏感性的信息不適合進行緩存,同時緩存的內容也是易丟失的,在代碼中不能完全依賴於緩存的數據,需要保證在緩存的數據丟失後也能進行正確的處理。
1、頁面輸出緩存
通過對輸出的頁面好森進行緩存,每次新的用戶請求調用相同的 Action 時,相同的內容不需要重新創建一次而直接輸出。頁面輸出緩存的使用非常友閉畝簡單,在 Action 上使用 [OutputCache] 特性標記即可生效。頁面輸出緩存可控制緩存的內容所存儲的位置,例如是在伺服器端存儲緩存的頁面內容還是在客戶端存儲緩存的頁面內容;也可使用 Duration 參數控制緩存的失效絕對時間和間隔時間,甚至能使用 VaryByParam 參數對不同的請求參數分別進行緩存。頁面輸出緩存非常適合於內容比較固定的前端頁面的緩存。
2、內存數據緩存
通常情況下,數據是保存在資料庫、磁碟文件等存儲介質中的,而應用程序訪問這些資源是一項很費時的操作。如果先將這些資源中的數據緩存到內存緩存區中,當應用程序需要這些數據時,直接從緩存區中提取,就可以減少系統開態余銷,顯著提高可使用的用戶並發數等。內存數據緩存需考慮緩存的內容更改失效後如何清空其他已經被緩存的相關聯的數據問題。
3、EFCache
眾所周知,NHiberate 提供了二級緩存功能。現在,如果你使用的是 Entity Framework 6 或更高版本的 Entity Framework ,你也可考慮使用 EFCache 組件來為 Entity Framework 提供二級緩存支持,其實質上也是屬於內存數據緩存。EFCache 的特點是使用上非常方便,僅需定義如下的代碼無需其他復雜的額外的配置即可實現二級緩存。如需定義特定的緩存策略,如緩存的過期時間,控制數據緩存的范圍,也僅需繼承 CachingPolicy 類並 override 其部分方法即可。你甚至可以通過實現 ICache 介面來實現自定義的緩存模型以替換默認的 InMemoryCache 。
二、Stream壓縮
對響應流進行壓縮,其作用是減少網路開銷,提高系統的響應速度。目前的瀏覽器通常都支持 gzip 和 deflate 壓縮解壓功能,因此你通常無效考慮瀏覽器的兼容性問題。啟用 gzip 和 deflate ,既可通過 IIS 配置實現,在 MVC 中也可通過編寫自定義的 ActionFilter 實現。在壓縮之前和壓縮之後 Stream 的大小差異通常都是驚人的,其壓縮率通常都在5-10倍以上。
三、js和css文件的壓縮和打包
1、js 和 css 文件的壓縮
其實質就是生成較小的文件,減小下載這些文件的網路開銷,提供系統的響應速度。壓縮 js 和 css 文件還有個好處是通常還可以起到代碼混淆的作用。在 YbSoftwareFactory 的 MVC 解決方案中,使用的是 Microsoft Ajax Minifier 組件,可在代碼編譯的過程中自動對所配置的 js 和 css 進行壓縮,基本上文件的大小都可減少一半以上
2、js、css文件的打包
其目的是進行 js 文件和 css 文件的合並,當前主流瀏覽器的並發連接數默認情況下通常都是 6 個,如果前端頁面同時請求的伺服器資源(如 img 文件、js 文件、css 文件以及各類 url 請求等)超過6個,通常就需要進行排隊下載。進行 js 文件、css 文件的打包合並,通常可以在一次請求中就完成未打包之前需多次請求才能完成的工作,通過減少前端瀏覽器的連接請求,在某種意義上也是可提高系統的響應速度的。