這個檔案的開發的設計思想是這樣的。有的web 網站,或者B/S 軟體的客戶,在軟體的安裝調試階段,往往對某些細節有特殊要求,也許,是字型的調整,也許是界面方面的小改動意見。面對這樣的情況,如果使用者沒有開放FTP 功能,則開發和維護人員往往就必須親臨現場做一些很小的調試工作。
即浪費了時間,也浪費了人力物力。
在這樣的情況下,我開發了這個具有檔案管理功能的 JSP 單頁面檔案。它提供了檔案夾的新增,更名,删除;檔案的修改,更名,删除和上傳的功能。基本能滿足在軟體的安裝調試階段,小的修改工作。
為了安全原因,該JSP 頁面提供了簡單的使用者登陸功能。
使用前,把該檔案置于網站檔案,或者B/S 産品的任意目錄下。開放檔案安裝目錄的 讀寫 操作權限。使用者遠端登陸該JSP 頁面,就可以行使管理功能。當安裝維護階段結束以後,請修改檔案安裝目錄的 讀寫 權限,并删除該檔案,以免留下安全隐患。
預設,登陸使用者名為:admin 密碼為:oddworld
開發環境 jakarta-tomcat-4.0.3.exe
注意:因為本軟體的上傳檔案功能必須有 smartupload 元件支援。請把smartupload 置于tomcat 對應檔案夾web-inf 下。如果你支援上傳的元件有所不同,請自行調整。
簡要開發說明:因為本檔案并不複雜,加上本人自我感覺,文檔說明雖然不規範,卻也詳細,是以隻打算簡要的關于一些小細節上做說明。
1. 本檔案進行檔案目錄操作的時候,直接把目錄當參數來傳遞,沒有進行相應的轉換。這是因為在 java 中, “\英文字元”有可能會被認為是轉意字元,而引起在字元處理過程中出現無法預期的問題,是以我認為直接把目錄來作為參數,在操作上比較合理。
2. 本檔案在一些表單的送出方面,使用連接配接,而不是按鈕,是因為 javascript 處理帶 “\”的字元串時,也會有處理轉意字元的可能,是以,為了防止這樣的情況,是以傳遞目錄參數的送出,都使用連接配接形式。
3. strStat,strErr 兩個字元串,貫穿檔案始終,前者為頁面進行何種操作的判斷指令,後者為在所有操作中出錯的資訊提示。
4. 本檔案有可能引起的安全或者其它方面的糾紛,本人不做任何解釋。我隻是把該檔案作為一個免費的工具提供給大家參考,使用。
----------------------------------------------------------------
檔案内容 admin.jsp
copy right by joard Ast
admin.jsp 功能:網站檔案背景管理頁面。
--%>
public static String UnicodeToChinese(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("ISO8859_1"),"gb2312");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
public static String ChineseToUnicode(String s){
try{
if(s==null||s.equals("")) return "";
String newstring=null;
newstring=new String(s.getBytes("gb2312"),"ISO8859_1");
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
%>
//重新整理問題
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//自定義登陸用密碼和使用者名
//正确的使用者名
String username="admin"
//正确的密碼
String userpass="oddworld";
//得到系統路徑
ServletContext app=(ServletContext)pageContext.getServletContext();
String strSysPath = app.getRealPath("/");
//處理對象實體路徑
String strDealPath="";
//顯示錯誤資訊
String strErr="";
//代表頁面的顯示狀态,login 是顯示登陸頁面;show 是正常的顯示檔案資訊;edit 是顯示編輯檔案的頁面;editDo 是編輯檔案的寫入操作
;createF 是顯示建立檔案夾的頁面;createFDo 是建立檔案夾的操作;renameFold 是顯示更改檔案夾名稱的頁面;renameFoldDo 是更改文
件夾名稱的操作;delFoldDo 是删除檔案夾的操作;renameFile 是顯示更改檔案名稱的頁面;renameFileDo 是更改檔案名稱的操作;
delFileDo 是删除檔案的操作;uploadFile 是顯示上傳檔案的頁面;uploadFileDo 是上傳檔案的操作;
String strStat="login";
//用于show 狀态下顯示檔案的數組
File[] fileArr=null;
//根據傳遞的路徑參數得到要處理對象的實體路徑
if (request.getParameter("path")==null || request.getParameter("path").equals("")){
strDealPath=strSysPath;
}else{
//得到路徑參數
strDealPath=UnicodeToChinese(request.getParameter("path"));
}
//檢查session 的值是否存在,如果不存在着顯示錯誤資訊
//HttpSession session = request.getSession(false);
if (session.getValue("loginIn")==null || !session.getValue("loginIn").equals("pass"))
{
strStat="login";
strErr="你還沒有登陸或者登陸逾時,請重新登陸!";
}
//建立file 對象,檢查目錄是否存在
File myFile=new File(strDealPath);
//檢驗檔案夾是否存在
if(!myFile.exists()){
strErr="你選擇的檔案夾不存在,請重新選擇!";
}
//根據參數的不同,進行對應的操作
if(request.getParameter("act")==null || request.getParameter("act").equals("") ||
request.getParameter("act").equals("login"))
{
if(request.getParameter("username")!=null && request.getParameter("userpass")!=null)
{
//正确的經過MD5 加密的密碼
//String userpass="OEEO99107DC8C1EE2E06666B965601EF";
if(request.getParameter("username").equals(username) && (request.getParameter("userpass")).equals(userpass))
{
session.putValue("loginIn","pass");
response.sendRedirect(request.getRequestURI()+"?act=show");
}
}
else {
strStat="login";
strErr="你還沒有登陸或者登陸逾時,請重新登陸!";
}
}else if(request.getParameter("act").equals("show")){
//預設,頁面正常顯示檔案的資訊 statStat="show"
strStat="show";
//建立檔案清單數組
fileArr=myFile.listFiles();
}else if(request.getParameter("act").equals("edit"))
{
//編輯檔案内容的頁面
//根據是否有request.getParameter("file"),以及相應檔案是否存在,如果有,則進行編輯操作,如果沒有,則顯示錯誤提示資訊
if (!(request.getParameter("file")==null || request.getParameter("file").equals(""))){
File fileEdit=new
File(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")));
if(fileEdit.exists())
//檔案編輯操作,實際就是更改頁面的顯示,用一個textarea 顯示檔案的資訊,來做編輯
strStat="edit";
else
//顯示錯誤資訊
strErr="你選擇的檔案不存在,請重新選擇!";
}else{
strErr="你沒有選擇要編輯的檔案,請重新選擇!";
}
}else if(request.getParameter("act").equals("editDo"))
{
//把修改的内容寫入檔案,并且傳回修改頁面
if (!(request.getParameter("file")==null || request.getParameter("file").equals("")))
{
File fileEdit=new
File(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")));
if(fileEdit.exists())
{
//檔案編輯操作,實際就是在修改檔案内容以後,再于頁面上用一個textarea 顯示檔案的内容,繼續來做編輯或者
檢視修改的效果
if(!(request.getParameter("fileData")==null))
{
try{
PrintWriter pwEdit =null;
pwEdit=new PrintWriter(new
FileOutputStream(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file"))));
pwEdit.println(UnicodeToChinese(request.getParameter("fileData")));
pwEdit.close();
response.sendRedirect(request.getRequestURI()+"?path="+
UnicodeToChinese(request.getParameter("path")) +"&file="+ UnicodeToChinese(request.getParameter("file")) +"&act=edit");
return;
}catch(Exception e){
strErr="檔案寫入錯誤,請重新選擇!";
}
}else{
strErr="缺少修改檔案内容的參數,請重新選擇!";
}
}else
//顯示錯誤資訊
strErr="你選擇的檔案不存在,請重新選擇!";
}else{
strErr="你沒有選擇要編輯的檔案,請重新選擇!";
}
}else if(request.getParameter("act").equals("createF"))
{
//建立新的檔案夾的頁面顯示
strStat="createF";
}else if(request.getParameter("act").equals("createFDo"))
{
//建立新的檔案夾
String strFoldName=strDealPath+UnicodeToChinese(request.getParameter("foldName")).trim()+"\\";
//out.println(strFoldName);
//out.close();
File fileCreateF=new File(strFoldName);
if(!fileCreateF.exists())
{
try{
fileCreateF.mkdir();
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
}catch(Exception e){
strErr="建立新檔案夾失敗!";
}
}
else
{
strErr="指定的檔案夾名稱和現有的檔案夾名稱重複,請重新指定一個新的檔案夾名稱!";
}
}else if(request.getParameter("act").equals("delFoldDo"))
{
//删除操作
try{
String strFileDelF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\";
File fileDelF=new File(strFileDelF);
if(fileDelF.exists()){
File[] fileArrCheck=fileDelF.listFiles();
if(!(fileArrCheck.length>0))
{
fileDelF.delete();
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
}else
{
strErr="檔案夾下面還包含着檔案,請把檔案都删除,再删除檔案夾";
}
}else{
strErr="要删除的檔案夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="檔案夾删除操作錯誤!";
}
}else if(request.getParameter("act").equals("renameFold"))
{
strStat="renameFold";
}else if(request.getParameter("act").equals("renameFoldDo"))
{
//檔案夾更名操作
//根據參數判斷是否對于檔案夾名稱有更改動作發生
if(request.getParameter("changeDo").equals("true"))
{
//有檔案名,更名發生
try{
String strFileRenameF=strDealPath+UnicodeToChinese(request.getParameter("fold"))+"\\";
File fileRenameF=new File(strFileRenameF);
String strFileRenameToF=strDealPath+UnicodeToChinese(request.getParameter("newFoldName"))+"\\";
File fileRenameToF=new File(strFileRenameToF);
//判斷更名的檔案夾是否存在
if(fileRenameF.exists()){
//判斷新的檔案夾名稱是否與現存的檔案夾重名
if(!fileRenameToF.exists())
{
fileRenameF.renameTo(fileRenameToF);
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
}else
{
strErr="指定的檔案夾名稱和現有的檔案夾名稱重複,請重新指定一個檔案夾名稱!";
}
}else{
strErr="要更名的檔案夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="檔案夾更名操作錯誤!";
}
}
}else if(request.getParameter("act").equals("renameFile"))
{
strStat="renameFile";
}else if(request.getParameter("act").equals("renameFileDo"))
{
//檔案更名操作
//根據參數判斷是否對于檔案名稱有更改動作發生
if(request.getParameter("changeDo").equals("true"))
{
//有檔案名,更名發生
try{
String strFileRenameFi=strDealPath+UnicodeToChinese(request.getParameter("file"));
File fileRenameFi=new File(strFileRenameFi);
String strFileRenameToFi=strDealPath+UnicodeToChinese(request.getParameter("newFileName"));
File fileRenameToFi=new File(strFileRenameToFi);
//判斷更名的檔案是否存在
if(fileRenameFi.exists()){
//判斷新的檔案名稱是否與現存的檔案重名
if(!fileRenameToFi.exists())
{
fileRenameFi.renameTo(fileRenameToFi);
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
}else
{
strErr="指定的檔案名稱和現有的檔案名稱重複,請重新指定一個檔案名稱!";
}
}else{
strErr="要更名的檔案不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="檔案更名操作錯誤!";
}
}
}else if(request.getParameter("act").equals("delFileDo"))
{
//删除操作
try{
String strFileDelFi=strDealPath+UnicodeToChinese(request.getParameter("file"));
File fileDelFi=new File(strFileDelFi);
if(fileDelFi.exists())
{
fileDelFi.delete();
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
}else{
strErr="要删除的檔案不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="檔案删除操作錯誤!";
}
}else if(request.getParameter("act").equals("uploadFile"))
{
strStat="uploadFile";
}else if(request.getParameter("act").equals("uploadFileDo"))
{
%>
//上傳檔案操作
mySmartUpload.initialize(pageContext);
mySmartUpload.setTotalMaxFileSize(1000000);
try {
mySmartUpload.upload();
mySmartUpload.save(strDealPath);
response.sendRedirect(request.getRequestURI()+"?path="+strDealPath+"&act=show");
return;
} catch (Exception e) {
strErr="檔案上傳出錯,請檢查是否超過1M 的檔案大小限制!";
}
}
%>
out.println(strStat);
%>
Directory Listing For /
size=4 Roman? New ,?times> 網站檔案管理器
size=4 Roman? New ,?times>
實體路徑:
登入
登入名:
name="username" value="">
密碼:
name="userpass" value="">
}else if(strErr!=""){
%>
操作錯誤
action="?path=&fold=
t.getParameter("fold"))%>&act=renameFoldDo" method="post">
}else if(strStat.equals("show")){
//正常顯示頁面
%>
目錄清單:
名稱(單擊進入相應目錄)
修改時間
重命名
删除
//顯示表格行的初始顔色
String bgColor="";
//如果不是根目錄,則顯示一個回到上層目錄的連接配接
if(!(strDealPath.equals(strSysPath))){%>
>
for(int i=0 ; i//如果是檔案夾則顯示
if(fileArr[i].isDirectory()){
//顔色隔行變換
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
>
size=4>0href="?path=&act=show" target="_blank" rel="external nofollow" >\\"%>&act=show">
t>
action="?path=&fold=&act=delFoldDo">align=center>
} %>
檔案清單:
名稱(單擊編輯相應檔案)
大小
修改時間
重命名
删除
bgColor="#eeeeee";
if(fileArr.length!=0){
for(int i=0 ; i//如果是檔案則顯示
if(fileArr[i].isFile()){
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
沒有檔案
//正常顯示狀态結束
}else if(strStat.equals("edit")){
//檔案編輯狀态
BufferedReader bufReadIn=new BufferedReader(new
FileReader(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file"))));
String strContext="";
String strReadLine="";
%>編輯檔案:
action="?path=&file=
t.getParameter("file"))%>&act=editDo" method="post">檔案名稱face=WingDings
size=4>3
while((strReadLine=bufReadIn.readLine())!=null)
out.println(strReadLine);
bufReadIn.close();%>
}else if(strStat.equals("createF")){
%>
建立檔案夾:
action="?path=&act=createFDo" method="post">你要建立的檔案夾在face=WingDings
size=4>0下
建立檔案夾名稱:
}else if(strStat.equals("renameFold"))
{ %>
重命名檔案夾:
action="?path=&fold=
t.getParameter("fold"))%>&act=renameFoldDo" method="post">你要重命名的檔案夾face=WingDings
size=4>0\\")%><
/tt>
重命名的檔案夾名稱:
" maxlength="50"
size="50">
}else if(strStat.equals("renameFile"))
{%>
重命名檔案:
action="?path=&file=
t.getParameter("file"))%>&act=renameFileDo" method="post">你要重命名的檔案face=WingDings
size=4>3<
/td>
重命名的檔案名稱:
" maxlength="50"
size="50">
}else if(strStat.equals("uploadFile")){
%>
上傳檔案:
action="?path=&act=uploadFileDo" method="post"
ENCTYPE="multipart/form-data">你要上傳的檔案在face=WingDings
size=4>0下
選擇上傳的檔案:
}
%>
©版權所有:Joard·Ast 版本: 簡體中文1.00