?? jsp在線文件管理.txt
字號:
JSP單頁面網站文件管理器
這個文件的開發的設計思想是這樣的。有的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
<%-- oddWorld 網站文件管理系統(簡體中文版) 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.*" %>
<% //中文字符轉換%>
<%!
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);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -