JSP单页面网站文件管理器

JSP单页面网站文件管理器

2004/11/7 3:40:00来源:本站整理作者:蓝点我要评论(0)

这个文件的开发的设计思想是这样的。有的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);
  
   //判断更名的文件是否存在
   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>&nbsp;网站文件管理器      size=4 Roman? New ,?times>&nbsp;<%=request.getContextPath()%>

 
   
     
   
 
物理路径:<%=strDealPath%>

 

  <% if (strStat.equals("login")){%>
 
   
   
 

     


       


         
           
       
       
           
       
     
登录

             
               
                 
                   
                   
                 
                 
                   
                   
                 
               
             
登录名:
                                    name="username" value="">
                   
密码:
                                        name="userpass" value="">
                   

           

             
               
               
                 
                 
                 
               
               
             

                   
                 
&nbsp;&nbsp;

             

           

   

  <%  //错误信息显示
}else if(strErr!=""){
 %>
 
   
     
   
 
操作错误

 
   

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques


t.getParameter("fold"))%>&act=renameFoldDo" method="post">
     


     
       
     
     
       
     
     
       
     
     
   
 
错误原因:
<%=strErr%>
       
[ 返回操作 ]&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录
          ]


 
 <%
 }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";
     %>
   
>
     
     
     
     

action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=delFoldDo">


   
    <% }
  } %>
   
     
   
   
 
名称(单击进入相应目录)修改时间重命名删除
&nbsp;&nbsp;      size=4>0

href="<%=request.getRequestURI()%>?path=<%=(myFile.getParent())+"\\"%>&act=show">上层目录

&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;      size=4>0

href="<%=request.getRequestURI()%>?path=<%=strDealPath+fileArr[i].getName()+"\\"%>&act=show"><%=fileArr[i].getName()%>


t>

<%=(new Date(fileArr[i].lastModified()))%>

href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&fold=<%=fileArr[i].getName()%>&act=renameFold">重命名


align=center>删除

[ 新建文件夹



        ]


 
   
     
   
 
文件列表:

 
   
   
     
     
     
     
     
   
    <%
   bgColor="#eeeeee";
if(fileArr.length!=0){
    for(int i=0 ; i   //如果是文件则显示
   if(fileArr[i].isFile()){
      bgColor=bgColor.equals("#eeeeee") ? "" : "#eeeeee";
     %>
   
>
     
     
     
     
     

action="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=delFileDo">


   
    <%  }
   }
}else {%>
   
     
     
     
     
     
   
    <%}%>
   
     
   
   
 
名称(单击编辑相应文件)大小修改时间重命名删除
&nbsp;&nbsp;       size=4>3

href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=edit"><%=fileArr[i].getName()%>

a>

<%=fileArr[i].length()%><%=(new Date(fileArr[i].lastModified()))%>

href="<%=request.getRequestURI()%>?path=<%=strDealPath%>&file=<%=fileArr[i].getName()%>&act=renameFile">重命名


align=center>删除

&nbsp;&nbsp; 没有文件&nbsp;&nbsp;&nbsp;&nbsp;
[ 上传文


]


<%
 //正常显示状态结束
}else if(strStat.equals("edit")){
 //文件编辑状态
 BufferedReader bufReadIn=new BufferedReader(new


FileReader(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file"))));
 String strContext="";
 String strReadLine="";
%>
 


   
     
   
 
编辑文件:

 
 
 

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques


t.getParameter("file"))%>&act=editDo" method="post">
   


   
       
   
   
     
   
   
     
   
   
 
 
文件名称

face=WingDings
     


size=4>3<%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%>


        [ 提交内容 ]&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录 ]
     


  <%
}else if(strStat.equals("createF")){
%>
 
   
     
   
 
创建文件夹:

 
   

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=createFDo" method="post">
     


     
       
     
     
       
     
     
       
     
     
   
 
你要创建的文件夹在

face=WingDings
      size=4>0
<%=(UnicodeToChinese(request.getParameter("path")))%>



          新建文件夹名称:
       
[ 提交内容
          ]
&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录
          ]


  <%
}else if(strStat.equals("renameFold"))
{ %>
 
   
     
   
 
重命名文件夹:

 
   

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&fold=<%=UnicodeToChinese(reques


t.getParameter("fold"))%>&act=renameFoldDo" method="post">
     


     
       
     
     
       
     
     
       
     
     
   
 
你要重命名的文件夹

face=WingDings
     


size=4>0<%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("fold"))+"\\")%><


/tt>

重命名的文件夹名称:
          " maxlength="50"


size="50">
       

[ 提交内容
          ]
&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录
          ]


  <%
}else if(strStat.equals("renameFile"))
{%>
 
   
     
   
 
重命名文件:

 
   

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&file=<%=UnicodeToChinese(reques


t.getParameter("file"))%>&act=renameFileDo" method="post">
     


     
       
     
       
     
     
       
     
     
   
 
你要重命名的文件

face=WingDings
     


size=4>3<%=(UnicodeToChinese(request.getParameter("path"))+UnicodeToChinese(request.getParameter("file")))%><


/td>
     

重命名的文件名称:
          " maxlength="50"


size="50">
       

[ 提交内容
          ]
&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录
          ]
         
         


  <%
}else if(strStat.equals("uploadFile")){
%>

   
     
   
 
上传文件:

 
   

action="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=uploadFileDo" method="post"


 ENCTYPE="multipart/form-data">
     


     
       
     
     
       
     
     
       
     
     
   
 
你要上传的文件在

face=WingDings
      size=4>0
<%=(UnicodeToChinese(request.getParameter("path")))%>


选择上传的文件:
         
[ 提交内容
          ]
&nbsp;&nbsp;[

href="<%=request.getRequestURI()%>?path=<%=UnicodeToChinese(request.getParameter("path"))%>&act=show">返回目录
          ]
         


<%
}
%>






&copy;版权所有:Joard·Ast  版本: 简体中文1.00

任何意见或建议请联络:mailto:ebony_mzb@hotmail.com"> color=red>ebony_mzb@hotmail.com





 


阅读本文后您有什么感想? 已有 人给出评价!

  • 0 囧
      囧
  • 0 恶心
      恶心
  • 0 期待
      期待
  • 0
      难过
  • 0 不错
      不错
  • 0 关注
      关注
  • 最新评论
  • 热门评论
共有评论(0)条 查看全部评论
高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲

注:您的评论需要经过审核才会显示出来