這個文件的開(kāi)發的設計思想是這樣的。有的web 網站,或者B/S 軟件的客戶,在軟件的安裝調試階段,往往對某些細節有特殊要求,也許,是字體(tǐ)的調整,也許是界面方面的小(xiǎo)改動意見。面對這樣的情況,如果用戶沒有開(kāi)放(fàng)FTP 功能,則開(kāi)發和維護人員(yuán)往往就必須親臨現場做一(yī)些很小(xiǎo)的調試工(gōng)作。
即浪費(fèi)了時間,也浪費(fèi)了人力物(wù)力。
在這樣的情況下(xià),我(wǒ)(wǒ)開(kāi)發了這個具有文件管理功能的 JSP 單頁面文件。它提供了文件夾的新增,更名,删除;文件的修改,更名,删除和上傳的功能。基本能滿足在軟件的安裝調試階段,小(xiǎo)的修改工(gōng)作。
爲了安全原因,該JSP 頁面提供了簡單的用戶登陸功能。
使用前,把該文件置于網站文件,或者B/S 産品的任意目錄下(xià)。開(kāi)放(fàng)文件安裝目錄的 讀寫 操作權限。用戶遠程登陸該JSP 頁面,就可以行使管理功能。當安裝維護階段結束以後,請修改文件安裝目錄的 讀寫 權限,并删除該文件,以免留下(xià)安全隐患。
缺省,登陸用戶名爲:admin 密碼爲:oddworld
開(kāi)發環境 jakarta-tomcat-4.0.3.exe
注意:因爲本軟件的上傳文件功能必須有 smartupload 組件支持。請把smartupload 置于tomcat 對應文件夾web-inf 下(xià)。如果你支持上傳的組件有所不同,請自行調整。
簡要開(kāi)發說明:因爲本文件并不複雜(zá),加上本人自我(wǒ)(wǒ)感覺,文檔說明雖然不規範,卻也詳細,所以隻打算簡要的關于一(yī)些小(xiǎo)細節上做說明。
1. 本文件進行文件目錄操作的時候,直接把目錄當參數來傳遞,沒有進行相應的轉換。這是因爲在 java 中(zhōng), “\英文字符”有可能會被認爲是轉意字符,而引起在字符處理過程中(zhōng)出現無法預期的問題,所以我(wǒ)(wǒ)認爲直接把目錄來作爲參數,在操作上比較合理。
2. 本文件在一(yī)些表單的提交方面,使用連接,而不是按鈕,是因爲 javascript 處理帶 “\”的字符串時,也會有處理轉意字符的可能,所以,爲了防止這樣的情況,所以傳遞目錄參數的提交,都使用連接形式。
3. strStat,strErr 兩個字符串,貫穿文件始終,前者爲頁面進行何種操作的判斷命令,後者爲在所有操作中(zhōng)出錯的信息提示。
4. 本文件有可能引起的安全或者其它方面的糾紛,本人不做任何解釋。我(wǒ)(wǒ)隻是把該文件作爲一(yī)個免費(fèi)的工(gōng)具提供給大(dà)家參考,使用。
----------------------------------------------------------------
文件内容 admin.jsp
<%-- oddWorld 網站文件管理系統(簡體(tǐ)中(zhōng)文版) 2003年10月10日
copy right by joard Ast
admin.jsp 功能:網站文件後台管理頁面。
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.jspsmart.upload.SmartUpload" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
<%@ page import="java.lang.reflect.*" %>
<% //中(zhōng)文字符轉換%>
<%!
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("/");
//處理對象物(wù)理路徑
String strDealPath="";
//顯示錯誤信息
String strErr="";
//代表頁面的顯示狀态,login 是顯示登陸頁面;show 是正常的顯示文件信息;edit 是顯示編輯文件的頁面;editDo 是編輯文件的寫入操作
;createF 是顯示創建文件夾的頁面;createFDo 是創建文件夾的操作;renameFold 是顯示更改文件夾名稱的頁面;renameFoldDo 是更改文
件夾名稱的操作;delFoldDo 是删除文件夾的操作;renameFile 是顯示更改文件名稱的頁面;renameFileDo 是更改文件名稱的操作;
delFileDo 是删除文件的操作;uploadFile 是顯示上傳文件的頁面;uploadFileDo 是上傳文件的操作;
String strStat="login";
//用于show 狀态下(xià)顯示文件的數組
File[] fileArr=null;
//根據傳遞的路徑參數得到要處理對象的物(wù)理路徑
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())
//文件編輯操作,實際就是更改頁面的顯示,用一(yī)個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())
{
//文件編輯操作,實際就是在修改文件内容以後,再于頁面上用一(yī)個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="指定的文件夾名稱和現有的文件夾名稱重複,請重新指定一(yī)個新的文件夾名稱!";
}
}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="文件夾下(xià)面還包含着文件,請把文件都删除,再删除文件夾";
}
}else{
strErr="要删除的文件夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="文件夾删除操作錯誤!";
}
}else if(request.getParameter("act").equals("renameFold"))
{
strStat="renameFold";
}else if(request.getParameter("act").equals("renameFoldDo"))
{
//文件夾更名操作
//根據參數判斷是否對于文件夾名稱有更改動作發生(shēng)
if(request.getParameter("changeDo").equals("true"))
{
//有文件名,更名發生(shēng)
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="指定的文件夾名稱和現有的文件夾名稱重複,請重新指定一(yī)個文件夾名稱!";
}
}else{
strErr="要更名的文件夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="文件夾更名操作錯誤!";
}
}
}else if(request.getParameter("act").equals("renameFile"))
{
strStat="renameFile";
}else if(request.getParameter("act").equals("renameFileDo"))
{
//文件更名操作
//根據參數判斷是否對于文件名稱有更改動作發生(shēng)
if(request.getParameter("changeDo").equals("true"))
{
//有文件名,更名發生(shēng)
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="指定的文件名稱和現有的文件名稱重複,請重新指定一(yī)個文件名稱!";
}
}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"))
{
%>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<%
//上傳文件操作
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 的文件大(dà)小(xiǎo)限制!";
}
}
%>
<%
out.println(strStat);
%>
<HTML><HEAD><TITLE>Directory Listing For /</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=white>
<div align="center">
<table border=0 cellpadding=5 cellspacing=0 width="90%">
<tbody>
<tr>
<td align=left bgcolor=#000066 valign=bottom><font color=#ffffff face=宋體(tǐ)
size=4 Roman? New ,?times><b> 網站文件管理器</b></font></td>
<td align=right bgcolor=#000066 valign=bottom><font color=#ffffff face=宋體(tǐ)
size=4 Roman? New ,?times><b> <strong><%=request.getContextPath()%></strong></b></font></td>
</tr>
</tbody>
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size="2"><b>物(wù)理路徑:</b><%=strDealPath%></font></td>
</tr>
</table>
<br>
<% if (strStat.equals("login")){%>
<table width="300" border="0" cellspacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p align="center">
<table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#cccccc"><font size=+2>登錄</font></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<form name=dataform method=post action='<%=request.getRequestURI()%>?act=login'>
<tr>
<td width="100"><b><font size="-1">登錄名:</font></b></td>
<td>
<input maxlength=16
name="username" value="">
</td>
</tr>
<tr>
<td width="100"><b><font size="-1">密碼:</font></b></td>
<td>
<input class=stedit maxlength=16
name="userpass" value="">
</td>
</tr>
</form>
</table>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tbody>
<tr>
<td>
<input name=update onClick="javascript:if (checkform()==false);" type=button value="登 錄">
</td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
<% //錯誤信息顯示
}else if(strErr!=""){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>操作錯誤</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm2
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques
t.getParameter("fold"))%>&act=renameFoldDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left bgcolor="#cccccc"><strong><font size="-1">錯誤原因:</font></strong></td>
</tr>
<tr>
<td align=left><TT><font color="red"><%=strErr%></font></TT>
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"><TT>[ <a href="javascript:history.go(-1);">返回操作</a> ]</TT> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]<input type=hidden name="changeDo" value="false"></tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("show")){
//正常顯示頁面
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>目錄列表:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">名稱</font></strong></font><TT>(單擊進入相應目錄)</TT></td>
<td align=center><font size=+1><strong><font size="-1">修改時間</font></strong></font></td>
<td align=center><b><font size="-1">重命名</font></b></td>
<td align=center><b><font size="-1">删除</font></b></td>
</tr>
<%
//顯示表格行的初始顔色
String bgColor="";
//如果不是根目錄,則顯示一(yī)個回到上層目錄的連接
if(!(strDealPath.equals(strSysPath))){%>
<tr bgcolor=<%=bgColor%>>
<td align=left > <tt><font color=#000066 face=WingDings
size=4>0</font><a title="單擊進入上層目錄"
href="<%=request.getRequestURI()%>?path=<%=(myFile.getParent())+"\\"%>&act=show">上層目錄</a></tt></td>
<td align=right> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<% }
for(int i=0 ; i<fileArr.length ; i++){
//如果是文件夾則顯示
if(fileArr[i].isDirectory()){
//顔色隔行變換
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
<tr bgcolor=<%=bgColor%>>
<td align=left > <tt><FONT color=#000066 face=WingDings
size=4>0</FONT><a title="單擊進入相應目錄"
href="<%=request.getRequestURI()%>?path=<%=strDealPath+fileArr[i].getName()+"\\"%>&act=show"><%=fileArr[i].getName()%></a></t
t></td>
<td align=center><tt><%=(new Date(fileArr[i].lastModified()))%></tt></td>
<td align=center><TT><a
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=renameFold">重命名</a></TT></td>
<form name="dataFormFold<%=i%>" method="post"
action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=delFoldDo"><td
align=center><TT><a href="javascript:if(confirm('确實要删除該文件夾,所有的内容将不能繼續使用?
')){window.dataFormFold<%=i%>.submit();}">删除</a></TT></td></form>
</tr>
<% }
} %>
<tr align="center">
<td bgcolor=#cccccc colspan=4><TT>[ <a href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&act=createF">新建文件夾
</a>
]</TT></td>
</tr>
</tbody>
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>文件列表:</strong></font></td>
</tr>
</table>
<TABLE align=center cellPadding=5 cellSpacing=0 width="90%">
<TBODY>
<TR bgColor=#cccccc>
<TD align=left><FONT size=+1><STRONG><font size="-1">名稱</font></STRONG></FONT><TT>(單擊編輯相應文件)</TT></TD>
<TD align=center><FONT size=+1><strong><font size="-1">大(dà)小(xiǎo)</font></strong></FONT></TD>
<TD align=center><FONT size=+1><STRONG><font size="-1">修改時間</font></STRONG></FONT></TD>
<TD align=center><b><font size="-1">重命名</font></b></TD>
<TD align=center><b><font size="-1">删除</font></b></TD>
</TR>
<%
bgColor="#eeeeee";
if(fileArr.length!=0){
for(int i=0 ; i<fileArr.length ; i++){
//如果是文件則顯示
if(fileArr[i].isFile()){
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
<TR bgColor=<%=bgColor%>>
<TD align=left > <TT><FONT color=#000066 face=WingDings
size=4>3</FONT><a title="單擊編輯相應文件"
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=edit"><%=fileArr[i].getName()%></
a></TT></TD>
<TD align=center><TT><%=fileArr[i].length()%></TT></TD>
<TD align=center><TT><%=(new Date(fileArr[i].lastModified()))%></TT></TD>
<TD align=center><TT><a
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=renameFile">重命名</a></TT></TD>
<form name="dataFormFile<%=i%>" method="post"
action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=delFileDo"><TD
align=center><TT><a href="javascript:if(confirm('确實要删除該文件,内容将不能繼續使用?
')){window.dataFormFile<%=i%>.submit();}">删除</a></TT></TD></form>
</TR>
<% }
}
}else {%>
<TR>
<TD align=left > <TT>沒有文件</TT></TD>
<TD align=right> </TD>
<TD align=right> </TD>
<TD align=center> </TD>
<TD align=center> </TD>
</TR>
<%}%>
<TR align="center">
<TD bgColor=#cccccc colSpan=5><TT>[ <a href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&act=uploadFile">上傳文
件</a> ]</TT></TD>
</TR>
</TBODY>
</TABLE>
<%
//正常顯示狀态結束
}else if(strStat.equals("edit")){
//文件編輯狀态
BufferedReader bufReadIn=new BufferedReader(new
FileReader(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file"))));
String strContext="";
String strReadLine="";
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>編輯文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques
t.getParameter("file"))%>&act=editDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">文件名稱</font></strong></font><tt><font color=#000066
face=WingDings
size=4>3</font><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%></tt></td>
</tr>
<tr>
<td align=center><textarea name="fileData" rows=18 cols=70 wrap=""OFF""><%
while((strReadLine=bufReadIn.readLine())!=null)
out.println(strReadLine);
bufReadIn.close();%></textarea></td>
</tr>
<tr>
<td bgcolor=#cccccc align="center">
<TT>[ <a href="javascript:window.dataForm.submit();">提交内容</a> ]</TT> <TT>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a> ]</TT>
</td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("createF")){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>創建文件夾:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=createFDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要創建的文件夾在</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path")))%></tt><font size=+1><strong><font size="-1">下(xià)
</font></strong></font></td>
</tr>
<tr>
<td align=left>
<TT>新建文件夾名稱:</TT><input type=text name=foldName value="" maxlength="50" size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("renameFold"))
{ %>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>重命名文件夾:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm2
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques
t.getParameter("fold"))%>&act=renameFoldDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要重命名的文件夾</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("fold"))+"\\")%><
/tt></td>
</tr>
<tr>
<td align=left> <tt>重命名的文件夾名稱:</tt>
<input type=text name=newFoldName value="<%=UnicodeToChinese(request.getParameter("fold"))%>" maxlength="50"
size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm2()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]<input type=hidden name="changeDo" value="false"></tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("renameFile"))
{%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>重命名文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm3
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques
t.getParameter("file"))%>&act=renameFileDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要重命名的文件</font></strong></font><font color=#000066
face=WingDings
size=4>3</font><tt><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%></tt><
/td>
</tr>
<tr>
<td align=left> <tt>重命名的文件名稱:</tt>
<input type=text name=newFileName value="<%=UnicodeToChinese(request.getParameter("file"))%>" maxlength="50"
size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm3()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]
<input type=hidden name="changeDo" value="false">
</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("uploadFile")){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>上傳文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm4
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=uploadFileDo" method="post"
ENCTYPE="multipart/form-data">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要上傳的文件在</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path")))%></tt><font size=+1><strong><font size="-1">下(xià)
</font></strong></font></td>
</tr>
<tr>
<td align=left> <tt>選擇上傳的文件:</tt>
<INPUT TYPE="FILE" NAME="fileName" SIZE="30"></td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm4()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]
</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}
%>
<br>
<br>
<hr>
<TT>©版權所有:Joard·Ast 版本: 簡體(tǐ)中(zhōng)文1.00</TT>
<br><TT>任何意見或建議請聯絡:<a href="mailto:ebony_mzb@hotmail.com"><font color=red>ebony_mzb@hotmail.com</font></a></TT>
</div>
</BODY></HTML>
<SCRIPT LANGUAGE=javascript>
<!--
<%
//根據參數不同,顯示不同的檢測參數的函數
if(strStat.equals("login")) {%>
function checkform()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataform.username.value))
{
alert("登錄名不能爲空!");
return false;
}
if (Checkblank.test(dataform.userpass.value))
{
alert("密碼不能爲空!");
return false;
}
window.dataform.submit();
}
<%}else if(strStat.equals("createFold")) {%>
function checkForm()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm.foldName.value))
{
alert("新建文件夾名稱不能爲空!");
dataForm.foldName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm.foldName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm.foldName.value).charAt(i)) !=-1)
{
alert("文件夾名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm.foldName.focus();
return false;
}
}
window.dataForm.submit();
}
<%}else if(strStat.equals("renameFold")) {%>
function checkForm2()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm2.newFoldName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm2.newFoldName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm2.newFoldName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm2.newFoldName.value).charAt(i)) !=-1)
{
alert("文件夾名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm2.newFoldName.focus();
return false;
}
}
//如果文件更名後和原文件名不同,則标示一(yī)個參數,表明确實有更名動作發生(shēng)
if(dataForm2.newFoldName.value!="<%=UnicodeToChinese(request.getParameter("fold"))%>")
{
window.dataForm2.changeDo.value="true";
}
else
{
alert("請輸入一(yī)個新的文件夾名稱!");
dataForm2.newFoldName.focus();
return false;
}
window.dataForm2.submit();
}
<%}else if(strStat.equals("renameFile"))
{%>
function checkForm3()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm3.newFileName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm3.newFileName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm3.newFileName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm3.newFileName.value).charAt(i)) !=-1)
{
alert("文件名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm3.newFileName.focus();
return false;
}
}
//如果文件更名後和原文件名不同,則标示一(yī)個參數,表明确實有更名動作發生(shēng)
if(dataForm3.newFileName.value!="<%=UnicodeToChinese(request.getParameter("file"))%>")
{
window.dataForm3.changeDo.value="true";
}
else
{
alert("請輸入一(yī)個新的文件名稱!");
dataForm3.newFileName.focus();
return false;
}
window.dataForm3.submit();
}
<%}else if(strStat.equals("uploadFile")){%>
function checkForm4()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm4.fileName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm4.fileName.focus();
return false;
}
window.dataForm4.submit();
}
<%}%>
//-->
</SCRIPT>
即浪費(fèi)了時間,也浪費(fèi)了人力物(wù)力。
在這樣的情況下(xià),我(wǒ)(wǒ)開(kāi)發了這個具有文件管理功能的 JSP 單頁面文件。它提供了文件夾的新增,更名,删除;文件的修改,更名,删除和上傳的功能。基本能滿足在軟件的安裝調試階段,小(xiǎo)的修改工(gōng)作。
爲了安全原因,該JSP 頁面提供了簡單的用戶登陸功能。
使用前,把該文件置于網站文件,或者B/S 産品的任意目錄下(xià)。開(kāi)放(fàng)文件安裝目錄的 讀寫 操作權限。用戶遠程登陸該JSP 頁面,就可以行使管理功能。當安裝維護階段結束以後,請修改文件安裝目錄的 讀寫 權限,并删除該文件,以免留下(xià)安全隐患。
缺省,登陸用戶名爲:admin 密碼爲:oddworld
開(kāi)發環境 jakarta-tomcat-4.0.3.exe
注意:因爲本軟件的上傳文件功能必須有 smartupload 組件支持。請把smartupload 置于tomcat 對應文件夾web-inf 下(xià)。如果你支持上傳的組件有所不同,請自行調整。
簡要開(kāi)發說明:因爲本文件并不複雜(zá),加上本人自我(wǒ)(wǒ)感覺,文檔說明雖然不規範,卻也詳細,所以隻打算簡要的關于一(yī)些小(xiǎo)細節上做說明。
1. 本文件進行文件目錄操作的時候,直接把目錄當參數來傳遞,沒有進行相應的轉換。這是因爲在 java 中(zhōng), “\英文字符”有可能會被認爲是轉意字符,而引起在字符處理過程中(zhōng)出現無法預期的問題,所以我(wǒ)(wǒ)認爲直接把目錄來作爲參數,在操作上比較合理。
2. 本文件在一(yī)些表單的提交方面,使用連接,而不是按鈕,是因爲 javascript 處理帶 “\”的字符串時,也會有處理轉意字符的可能,所以,爲了防止這樣的情況,所以傳遞目錄參數的提交,都使用連接形式。
3. strStat,strErr 兩個字符串,貫穿文件始終,前者爲頁面進行何種操作的判斷命令,後者爲在所有操作中(zhōng)出錯的信息提示。
4. 本文件有可能引起的安全或者其它方面的糾紛,本人不做任何解釋。我(wǒ)(wǒ)隻是把該文件作爲一(yī)個免費(fèi)的工(gōng)具提供給大(dà)家參考,使用。
----------------------------------------------------------------
文件内容 admin.jsp
<%-- oddWorld 網站文件管理系統(簡體(tǐ)中(zhōng)文版) 2003年10月10日
copy right by joard Ast
admin.jsp 功能:網站文件後台管理頁面。
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.jspsmart.upload.SmartUpload" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
<%@ page import="java.lang.reflect.*" %>
<% //中(zhōng)文字符轉換%>
<%!
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("/");
//處理對象物(wù)理路徑
String strDealPath="";
//顯示錯誤信息
String strErr="";
//代表頁面的顯示狀态,login 是顯示登陸頁面;show 是正常的顯示文件信息;edit 是顯示編輯文件的頁面;editDo 是編輯文件的寫入操作
;createF 是顯示創建文件夾的頁面;createFDo 是創建文件夾的操作;renameFold 是顯示更改文件夾名稱的頁面;renameFoldDo 是更改文
件夾名稱的操作;delFoldDo 是删除文件夾的操作;renameFile 是顯示更改文件名稱的頁面;renameFileDo 是更改文件名稱的操作;
delFileDo 是删除文件的操作;uploadFile 是顯示上傳文件的頁面;uploadFileDo 是上傳文件的操作;
String strStat="login";
//用于show 狀态下(xià)顯示文件的數組
File[] fileArr=null;
//根據傳遞的路徑參數得到要處理對象的物(wù)理路徑
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())
//文件編輯操作,實際就是更改頁面的顯示,用一(yī)個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())
{
//文件編輯操作,實際就是在修改文件内容以後,再于頁面上用一(yī)個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="指定的文件夾名稱和現有的文件夾名稱重複,請重新指定一(yī)個新的文件夾名稱!";
}
}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="文件夾下(xià)面還包含着文件,請把文件都删除,再删除文件夾";
}
}else{
strErr="要删除的文件夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="文件夾删除操作錯誤!";
}
}else if(request.getParameter("act").equals("renameFold"))
{
strStat="renameFold";
}else if(request.getParameter("act").equals("renameFoldDo"))
{
//文件夾更名操作
//根據參數判斷是否對于文件夾名稱有更改動作發生(shēng)
if(request.getParameter("changeDo").equals("true"))
{
//有文件名,更名發生(shēng)
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="指定的文件夾名稱和現有的文件夾名稱重複,請重新指定一(yī)個文件夾名稱!";
}
}else{
strErr="要更名的文件夾不存在,請重新選擇";
}
}catch(Exception e)
{
strErr="文件夾更名操作錯誤!";
}
}
}else if(request.getParameter("act").equals("renameFile"))
{
strStat="renameFile";
}else if(request.getParameter("act").equals("renameFileDo"))
{
//文件更名操作
//根據參數判斷是否對于文件名稱有更改動作發生(shēng)
if(request.getParameter("changeDo").equals("true"))
{
//有文件名,更名發生(shēng)
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="指定的文件名稱和現有的文件名稱重複,請重新指定一(yī)個文件名稱!";
}
}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"))
{
%>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<%
//上傳文件操作
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 的文件大(dà)小(xiǎo)限制!";
}
}
%>
<%
out.println(strStat);
%>
<HTML><HEAD><TITLE>Directory Listing For /</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=white>
<div align="center">
<table border=0 cellpadding=5 cellspacing=0 width="90%">
<tbody>
<tr>
<td align=left bgcolor=#000066 valign=bottom><font color=#ffffff face=宋體(tǐ)
size=4 Roman? New ,?times><b> 網站文件管理器</b></font></td>
<td align=right bgcolor=#000066 valign=bottom><font color=#ffffff face=宋體(tǐ)
size=4 Roman? New ,?times><b> <strong><%=request.getContextPath()%></strong></b></font></td>
</tr>
</tbody>
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size="2"><b>物(wù)理路徑:</b><%=strDealPath%></font></td>
</tr>
</table>
<br>
<% if (strStat.equals("login")){%>
<table width="300" border="0" cellspacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p align="center">
<table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#cccccc"><font size=+2>登錄</font></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<form name=dataform method=post action='<%=request.getRequestURI()%>?act=login'>
<tr>
<td width="100"><b><font size="-1">登錄名:</font></b></td>
<td>
<input maxlength=16
name="username" value="">
</td>
</tr>
<tr>
<td width="100"><b><font size="-1">密碼:</font></b></td>
<td>
<input class=stedit maxlength=16
name="userpass" value="">
</td>
</tr>
</form>
</table>
<br>
<table border=0 cellpadding=0 cellspacing=0>
<tbody>
<tr>
<td>
<input name=update onClick="javascript:if (checkform()==false);" type=button value="登 錄">
</td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
<% //錯誤信息顯示
}else if(strErr!=""){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>操作錯誤</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm2
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques
t.getParameter("fold"))%>&act=renameFoldDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left bgcolor="#cccccc"><strong><font size="-1">錯誤原因:</font></strong></td>
</tr>
<tr>
<td align=left><TT><font color="red"><%=strErr%></font></TT>
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"><TT>[ <a href="javascript:history.go(-1);">返回操作</a> ]</TT> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]<input type=hidden name="changeDo" value="false"></tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("show")){
//正常顯示頁面
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>目錄列表:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">名稱</font></strong></font><TT>(單擊進入相應目錄)</TT></td>
<td align=center><font size=+1><strong><font size="-1">修改時間</font></strong></font></td>
<td align=center><b><font size="-1">重命名</font></b></td>
<td align=center><b><font size="-1">删除</font></b></td>
</tr>
<%
//顯示表格行的初始顔色
String bgColor="";
//如果不是根目錄,則顯示一(yī)個回到上層目錄的連接
if(!(strDealPath.equals(strSysPath))){%>
<tr bgcolor=<%=bgColor%>>
<td align=left > <tt><font color=#000066 face=WingDings
size=4>0</font><a title="單擊進入上層目錄"
href="<%=request.getRequestURI()%>?path=<%=(myFile.getParent())+"\\"%>&act=show">上層目錄</a></tt></td>
<td align=right> </td>
<td align=center> </td>
<td align=center> </td>
</tr>
<% }
for(int i=0 ; i<fileArr.length ; i++){
//如果是文件夾則顯示
if(fileArr[i].isDirectory()){
//顔色隔行變換
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
<tr bgcolor=<%=bgColor%>>
<td align=left > <tt><FONT color=#000066 face=WingDings
size=4>0</FONT><a title="單擊進入相應目錄"
href="<%=request.getRequestURI()%>?path=<%=strDealPath+fileArr[i].getName()+"\\"%>&act=show"><%=fileArr[i].getName()%></a></t
t></td>
<td align=center><tt><%=(new Date(fileArr[i].lastModified()))%></tt></td>
<td align=center><TT><a
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=renameFold">重命名</a></TT></td>
<form name="dataFormFold<%=i%>" method="post"
action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=delFoldDo"><td
align=center><TT><a href="javascript:if(confirm('确實要删除該文件夾,所有的内容将不能繼續使用?
')){window.dataFormFold<%=i%>.submit();}">删除</a></TT></td></form>
</tr>
<% }
} %>
<tr align="center">
<td bgcolor=#cccccc colspan=4><TT>[ <a href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&act=createF">新建文件夾
</a>
]</TT></td>
</tr>
</tbody>
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>文件列表:</strong></font></td>
</tr>
</table>
<TABLE align=center cellPadding=5 cellSpacing=0 width="90%">
<TBODY>
<TR bgColor=#cccccc>
<TD align=left><FONT size=+1><STRONG><font size="-1">名稱</font></STRONG></FONT><TT>(單擊編輯相應文件)</TT></TD>
<TD align=center><FONT size=+1><strong><font size="-1">大(dà)小(xiǎo)</font></strong></FONT></TD>
<TD align=center><FONT size=+1><STRONG><font size="-1">修改時間</font></STRONG></FONT></TD>
<TD align=center><b><font size="-1">重命名</font></b></TD>
<TD align=center><b><font size="-1">删除</font></b></TD>
</TR>
<%
bgColor="#eeeeee";
if(fileArr.length!=0){
for(int i=0 ; i<fileArr.length ; i++){
//如果是文件則顯示
if(fileArr[i].isFile()){
bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
%>
<TR bgColor=<%=bgColor%>>
<TD align=left > <TT><FONT color=#000066 face=WingDings
size=4>3</FONT><a title="單擊編輯相應文件"
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=edit"><%=fileArr[i].getName()%></
a></TT></TD>
<TD align=center><TT><%=fileArr[i].length()%></TT></TD>
<TD align=center><TT><%=(new Date(fileArr[i].lastModified()))%></TT></TD>
<TD align=center><TT><a
href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=renameFile">重命名</a></TT></TD>
<form name="dataFormFile<%=i%>" method="post"
action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=delFileDo"><TD
align=center><TT><a href="javascript:if(confirm('确實要删除該文件,内容将不能繼續使用?
')){window.dataFormFile<%=i%>.submit();}">删除</a></TT></TD></form>
</TR>
<% }
}
}else {%>
<TR>
<TD align=left > <TT>沒有文件</TT></TD>
<TD align=right> </TD>
<TD align=right> </TD>
<TD align=center> </TD>
<TD align=center> </TD>
</TR>
<%}%>
<TR align="center">
<TD bgColor=#cccccc colSpan=5><TT>[ <a href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&act=uploadFile">上傳文
件</a> ]</TT></TD>
</TR>
</TBODY>
</TABLE>
<%
//正常顯示狀态結束
}else if(strStat.equals("edit")){
//文件編輯狀态
BufferedReader bufReadIn=new BufferedReader(new
FileReader(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file"))));
String strContext="";
String strReadLine="";
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>編輯文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques
t.getParameter("file"))%>&act=editDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">文件名稱</font></strong></font><tt><font color=#000066
face=WingDings
size=4>3</font><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%></tt></td>
</tr>
<tr>
<td align=center><textarea name="fileData" rows=18 cols=70 wrap=""OFF""><%
while((strReadLine=bufReadIn.readLine())!=null)
out.println(strReadLine);
bufReadIn.close();%></textarea></td>
</tr>
<tr>
<td bgcolor=#cccccc align="center">
<TT>[ <a href="javascript:window.dataForm.submit();">提交内容</a> ]</TT> <TT>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a> ]</TT>
</td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("createF")){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>創建文件夾:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=createFDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要創建的文件夾在</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path")))%></tt><font size=+1><strong><font size="-1">下(xià)
</font></strong></font></td>
</tr>
<tr>
<td align=left>
<TT>新建文件夾名稱:</TT><input type=text name=foldName value="" maxlength="50" size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("renameFold"))
{ %>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>重命名文件夾:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm2
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques
t.getParameter("fold"))%>&act=renameFoldDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要重命名的文件夾</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("fold"))+"\\")%><
/tt></td>
</tr>
<tr>
<td align=left> <tt>重命名的文件夾名稱:</tt>
<input type=text name=newFoldName value="<%=UnicodeToChinese(request.getParameter("fold"))%>" maxlength="50"
size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm2()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]<input type=hidden name="changeDo" value="false"></tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("renameFile"))
{%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>重命名文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm3
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques
t.getParameter("file"))%>&act=renameFileDo" method="post">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要重命名的文件</font></strong></font><font color=#000066
face=WingDings
size=4>3</font><tt><%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%></tt><
/td>
</tr>
<tr>
<td align=left> <tt>重命名的文件名稱:</tt>
<input type=text name=newFileName value="<%=UnicodeToChinese(request.getParameter("file"))%>" maxlength="50"
size="50">
</td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm3()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]
<input type=hidden name="changeDo" value="false">
</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}else if(strStat.equals("uploadFile")){
%>
<table width="90%" border="0" cellspacing="0" cellpadding="5">
<tr>
<td><font size=+2><strong>上傳文件:</strong></font></td>
</tr>
</table>
<table align=center cellpadding=5 cellspacing=0 width="90%">
<form name=dataForm4
action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=uploadFileDo" method="post"
ENCTYPE="multipart/form-data">
<tbody>
<tr bgcolor=#cccccc>
<td align=left><font size=+1><strong><font size="-1">你要上傳的文件在</font></strong></font><font color=#000066
face=WingDings
size=4>0</font><tt><%=(UnicodeToChinese(request.getParameter("path")))%></tt><font size=+1><strong><font size="-1">下(xià)
</font></strong></font></td>
</tr>
<tr>
<td align=left> <tt>選擇上傳的文件:</tt>
<INPUT TYPE="FILE" NAME="fileName" SIZE="30"></td>
</tr>
<tr>
<td bgcolor=#cccccc align="center"> <tt>[ <a href="javascript:if (checkForm4()==false);">提交内容</a>
]</tt> <tt>[ <a
href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目錄</a>
]
</tt> </td>
</tr>
</tbody>
</form>
</table>
<%
}
%>
<br>
<br>
<hr>
<TT>©版權所有:Joard·Ast 版本: 簡體(tǐ)中(zhōng)文1.00</TT>
<br><TT>任何意見或建議請聯絡:<a href="mailto:ebony_mzb@hotmail.com"><font color=red>ebony_mzb@hotmail.com</font></a></TT>
</div>
</BODY></HTML>
<SCRIPT LANGUAGE=javascript>
<!--
<%
//根據參數不同,顯示不同的檢測參數的函數
if(strStat.equals("login")) {%>
function checkform()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataform.username.value))
{
alert("登錄名不能爲空!");
return false;
}
if (Checkblank.test(dataform.userpass.value))
{
alert("密碼不能爲空!");
return false;
}
window.dataform.submit();
}
<%}else if(strStat.equals("createFold")) {%>
function checkForm()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm.foldName.value))
{
alert("新建文件夾名稱不能爲空!");
dataForm.foldName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm.foldName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm.foldName.value).charAt(i)) !=-1)
{
alert("文件夾名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm.foldName.focus();
return false;
}
}
window.dataForm.submit();
}
<%}else if(strStat.equals("renameFold")) {%>
function checkForm2()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm2.newFoldName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm2.newFoldName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm2.newFoldName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm2.newFoldName.value).charAt(i)) !=-1)
{
alert("文件夾名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm2.newFoldName.focus();
return false;
}
}
//如果文件更名後和原文件名不同,則标示一(yī)個參數,表明确實有更名動作發生(shēng)
if(dataForm2.newFoldName.value!="<%=UnicodeToChinese(request.getParameter("fold"))%>")
{
window.dataForm2.changeDo.value="true";
}
else
{
alert("請輸入一(yī)個新的文件夾名稱!");
dataForm2.newFoldName.focus();
return false;
}
window.dataForm2.submit();
}
<%}else if(strStat.equals("renameFile"))
{%>
function checkForm3()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm3.newFileName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm3.newFileName.focus();
return false;
}
var SPECIAL_STR = "\\/:*?\"><|";
for(i=0;i<(dataForm3.newFileName.value).length;i++)
{
if (SPECIAL_STR.indexOf((dataForm3.newFileName.value).charAt(i)) !=-1)
{
alert("文件名稱不能含有如下(xià)字符\\/:*?\"><|");
dataForm3.newFileName.focus();
return false;
}
}
//如果文件更名後和原文件名不同,則标示一(yī)個參數,表明确實有更名動作發生(shēng)
if(dataForm3.newFileName.value!="<%=UnicodeToChinese(request.getParameter("file"))%>")
{
window.dataForm3.changeDo.value="true";
}
else
{
alert("請輸入一(yī)個新的文件名稱!");
dataForm3.newFileName.focus();
return false;
}
window.dataForm3.submit();
}
<%}else if(strStat.equals("uploadFile")){%>
function checkForm4()
{
var Checkblank = /^(\s*|(\ )|(\.))*$/;
if (Checkblank.test(dataForm4.fileName.value))
{
alert("重命名的文件夾名稱不能爲空!");
dataForm4.fileName.focus();
return false;
}
window.dataForm4.submit();
}
<%}%>
//-->
</SCRIPT>