原来只知道jspsmart 类是用来处理jsp 文件上传的有用类,但是由于form 添加了enctype的属性使jsp内置对象reuqest失效,这一问题由于没有实际的需求到,就没有想去解决,前几天突然有人问我这方面的问题我一时 也回答不上来,就到网上查了一下,原来jspsamrt 这个工具包不仅包含了处理上传文件的 SmartFile类,还有一个替代request内置对象的类SmartRequest。 下面把接收页面的示例代码转载一下,
<%@ page contentType="text/html; charset=utf8" language="java"
import="jspsmart.*" errorPage="" %>
<title>文件上传处理页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
// su.setMaxFileSize(10000);
// 2.限制总上传数据的长度。
// su.setTotalMaxFileSize(20000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
//jsp,htm,html扩展名的文件和没有扩展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
int count = su.save("../webapps/");
out.println(count+"个文件上传成功!<br/>");
// 利用Request对象获取参数之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");
// 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
jspsmart.SmartFile file = su.getFiles().getFile(i);
// 若文件不存在则继续
if (file.isMissing()) continue;
// 显示当前文件信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文件长度(Size)</TD><TD>" +
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>");
// 将文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFile.getFileName(),su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c://temp//" + myFile.getFileName(), su.SAVE_PHYSICAL);
}
%>
值得注意的是这个SmartRequest 有一个方法getParamterValues("String") 可以得到前一个页面定义同名对象的一个数组,例子:
<input type="text" name="test" />
<input type="text" name="test" />
<input type="text" name="test" />
到action 页用su.getRequest().getParameterValues("test") 就可以得到一个数组。
一个很好的JavaBean jspUpload它的功能很好很强,不仅仅可是实现文件的上传和下载,嗨可以限制文件上传的大小,文件的类型 。
解压后将目录 Web-inf/classes下的拷贝到Tomcat安装目录下的Tomcat/common/calsses我们在使用jspUpload开发时实际上是调用了开发包中的几个Javabean类中的方法来实现文件的上唇下载功能的,下面是对这些JavaBean作些说明。
File类---------这个类封装了一个上传文件的所有信息,通过他可以得到上传文件的文件名,文件大小,扩展名,文件数据信息。File类主要提供一下方法:
一, savaAs 用来文件换名另存
二, isMissing 用于判断用户是否选择了文件,选了返回false否则true
三, getFieldName 取得用来上传的HTML表单中对应于此上传文件的表单项的名字
四, gerFileName 取得上传的文件名
五, getFilePathName 取得上传文件的全名,这个全名包含文件所在的目录的路径和文件名。
六, getFileExt 取得文件扩展名,以后缀的形式表示
七, getSize 取得文件的长度,以字节为单位计数。
Files类-----------表示所有上传文件的集合,通过他可以得到所有上传文件的数目大小等信息。
一, getCount 取得上传文件的数目
二, getFile 取得与指定参数所匹配的上传文件对象File
三, getSize 取得上传文件的总长度,可用于限制一次性上传的数据量大小
四, getEnvmeration 将所有上传文件对象以枚举的形式返回,一边其他应用程序浏览上传文件信息。
JSP中对文件进行操作是以java.io.File类为核心展开的,它提供了对文件和路径的抽象我们可以用一个文件名和路径名来实例化一个File类,例如:
File myfile=new File(”F://book//test.txt”)就在F盘的book目录下创建了一个文件test.txt并将应用程序中将其实例化为myfile对象,在Windows系统中编写java程序时,文件路径中的分隔符要使用”//”。
File 类包含如下几个成员函数:
Public String getParent() 根据当前文件的路径获得其上一级目录的路径,如果上一级目录不存在则返回null。
Public String getPath() 获得当前文件的完整路径。
Public Boolean isPirectory() 判断当前文件是否为目录,如果是返回true,否则返回false
Public String[] list 返回当前路径下的所有文件,如果没有文件则返回空。
Public Boolean createNewFile throw IOException 如果文件不存在建立新的文件如果文件建立成功返回true。
Public Boolean delete() 删除文件活目录如果删除一个目录那么该目录下面的文件和子目录必须已经删除如果删除成功返回true如果失败返回false
Public Boolean mkdir() 建立新的新的子目录,并且这个目录的上一级目录已经存在如果成功返回true 失败返回false。
SmartUpload:这个类用来完成实际的上传和下载工作。
一,initialize 用来执行上传下载的初始化工作,在程序开头执行
二,upload 上传文件数据执行initailize方法之后,就可以执行这个方法上传文件。
三,save 将全部上传文件保存到指定目录下并返回保存的文件个数。
四,getSize 取得上传文件的总长度
五,getFiles 取得全部上传文件
六,setAllowedFiles List设置润需上传的扩展名
七,setDeniedFilesList 用于限制上传的扩展名
八,setMaxFileSize 限制上传的最大长度
九,setTotalMaxFileSize 设置润需上传的文件的最大总长度,这个方法可以限制一次性上传的数据量大小。
十,setContentDisposition 设为null,会提示“文件另存为”
十一, downloadFile 执行下载文件的操作。
SmartUploadException 抛出上传和下载过程中出现的异常
<%
SmartUpload su=new SmartUpload();//新建一个SmartUpload对象
Su.initailize(pageContext);
su.setMaxFileSize(50000);
su.setTotalMaxFileSize(100000);
su.setAllowedFilesList(“doc,txt”);
su.opload();//上传文件
int count=su.save(“/upload/”); //将上传文件保存到指定目录
out.println(“成功上唇“+count+”个文件“!<br>“);
%>目录和相应的jsp页面一样在tomcat/webapps/root/upload下
上传文件信息如下:
<table border=1 align=center>
<tr>
<td>文件编号 </td>
<td>文件长度</td>
<td>文件名</td>
<td>文件类型</td>
</tr>
<%
//逐一提取上传文件信息,同时可保存文件。
For(int i=0;i<su.getFiles().getCount();i++)
{
Com.jspsmart.upload.File file=su.getFiles().getFile(i);
//若文件不存在则继续
If(file.isMissing()) continue;
//显示当前文件信息
%>
<tr>
<td><%=file.getFieldName()%></td>
<td><%=file.getSize()%></td>
<td><%=file.getFileName%></td>
<td><%=file.getFileEXT()%></td>
</tr>
下载页面为
【大拿大牛都进来吧】jsp中用超链接传递中文参数到第二页怎么接受才能不是乱码啊 都崩溃了 希望有人解答
1.jsp中代码 <a href=2.jsp?filename=中国人>点击此处</>
然后我应该怎么到第二个页面接才能接到中文啊 2.jsp 具体代码如下
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*,java.net.*" errorPage="" %>
<%
String luanma=request.getParameter("fileName");
String str=new String(luanma.getBytes("ISO-8859-1"),"GBK");
String filenamedownload = "/upload/"+str;
String filenamedisplay =str;
response.setContentType("application/x-download");//设置为下载application/x-download
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
try
{
RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);
if(dispatcher != null)
{
dispatcher.forward(request,response);
}
response.flushBuffer();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}%>