一个网站的后台管理系统中要实现上传资源(文件资源保存在服务器硬盘上,名称、简介等相关信息保存到数据库中)和删除资源(删除资源时既要删除数据库中的记录又要从服务器硬盘中删除文件)两项功能,其中把文件上传到服务器硬盘上并把相关信息保存到数据库中,那再简单不过了,这里就不再赘述,利用Servlet从硬盘中删除文件倒是有些要注意的地方,详见代码及注释:
JSP页面中的主要相关代码为:(略去了其他次要代码)
<%--
略去了的代码
--%>
<jsp:useBean id="src" class="com.ehang.beans.SrcInfoBean" scope="page"/>
<%--
略去了的代码
--%>
</tr>
<tr align="center" valign="middle">
<td width="40%" height="22">资源名称</td>
<td width="16%">资源大小</td>
<td >删除</td>
</tr>
<%
ResultSet rs=src.getResult();
int i=0;
while(rs.next()){
String id=rs.getString("src_id");
String url=rs.getString("src_url");
if(i >= (intPage-1)*PageNumbers && i < intPage*PageNumbers)
{
%>
<tr>
<td align="left"> <%=rs.getString("src_name")%></td>
<td align="center"><%=rs.getString("src_size") %></td>
<td><div align="center">
<form name="form" action="srcDel.do" method="post">
<input type="hidden" name="id" value="<%=id %>"/>
<input type="hidden" name="url" value="<%=url %>"/>
<input type="submit" value="删除" />
</form>
</div>
</td>
</tr>
<%
}
i++;
}
%>
<%--
这部分为控制分页的代码,已略去
--%
Servlet代码和解释如下:
package com.ehang.servlets;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.ehang.beans.SrcInfoBean; //导入用到的javabean
/**
* @author 黄泽元
* 2009-05-05
*/
public class SrcDelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id"); // jsp页面传来的id,从数据库中//删除相关记录时用到
String url = request.getParameter("url");// jsp页面的隐藏域中参数,文件//的相对路径,从硬盘中删除文件时用到
String newURL = null;
if (id != null && !id.equals("")) {
SrcInfoBean del = new SrcInfoBean();
del.setSrcId(id);
/**
* 其实以下几行实现字符替换和文件删除的代码可写在一个类中,在这里调用即可
* 接收过来的参数url为相对路径,形如upload/20090506/200905060607002.rar
* 遍历并替换字符串,把其中的斜杠替换为反斜杠
*/
int size = url.length() - 1;
for (int i = 0; i < size; i++)
newURL = url.replace("/", "//");
String indexDir = this.getServletContext().getRealPath("/admin"); // 获取文件夹admin的绝对路径,形如../admin
String filepath=indexDir+"//"+newURL; //文件全名,包含各层目录和扩展名
if (del.delIsDone()) { // delIsDone为JavaBean中判断从数据库中删除记录//是否成功的方法
File file = new File(filepath);// 下面执行从硬盘中删除文件的操作
if (file.exists() && file.isFile()) {
if (file.canWrite())
file.delete();
}
// 流程控制代码,这里略去
……
}……
} ……
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}