表单提交后,用getParameter来获取值的问题 请教各位大侠们哈!我在做一个文件上传的东西,直接用servlet来实现,可是其中有一个问题真是把我搞晕了,就是无论前台页面怎么修改,等提交表单后,结果在servlet中还是不能获取到相应的表单内容的值,结果还是为空,我想难道是没有提交成功,或者在传送数据过程中数据丢失了?等等,想了很多,搞了好久,问题还是不能解决,恳请各位帮帮忙!谢谢!我还是一个java初学者,很多东西不明不白的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 文件上传的东西,直接用servlet来实现?看看你得代码 你是单纯的用Servlet来实现的!那可能出现在名字不一致的问题,还是要看看你代码 先看下有没进入这个servlet?在servlet写个打印语句。然后在页面传个其他的参数看看,看能不能在servlet里收到。 你是不是用apache自带的上传组件上传附件的?就是<input type="file" />这种形式的。如果用这种形式上传,getParameter是获取不到表单中的参数的。要用fileItem.isFormField()来判断。你google下就行了。呵呵。 注意提交方式是 get 还是 post 楼主是使用得fileipload或smartupload吧,我以前遇到过包含file的form里需要加上这段 encType=multipart/form-data method=post Commons FileUpload方式:1 首先在dispatcher-servlet.xml中声明一个MultipartResolver: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <value>50000000</value> </property> <property name="maxInMemorySize"> <value>4096</value> </property> <property name="defaultEncoding"> <value>GBK</value> </property> </bean>2 表单 <form action="upload" enctype="multipart/form-data"><input type="file" name="myFile" /><input type="submit" value="Upload! " /></form>3 // 转型为MultipartHttpRequest: MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 获得文件: MultipartFile file = multipartRequest.getFile(" file "); // 获得文件名: String filename = file.getOriginalFilename(); // 获得输入流: InputStream input = file.getInputStream(); // 写入文件 // 或者: File source = new File(localfileName.toString()); multipartFile.transferTo(source); 仅供参考 MultipartFile file = multipartRequest.getFile(" file "); <input type="file" name="myFile" /> ????????????? MultipartFile file = multipartRequest.getFile(" file "); 是不是应该是 MultipartFile file = multipartRequest.getFile("myFile"); 很久没做过文件上传的东西了 新手容易犯得错误是:session没有getparameter方法,只有getAttribute方法。检查下。 有写<form>吗,嘿嘿,莫笑,偶初学的时候的确犯过这样的错误的 页面代码是:<html> <head> <title>文件处理</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type='text/javascript' src='../dwr/engine.js'></script> <script type='text/javascript' src='../dwr/util.js'></script> <script type="text/javascript" src="../dwr/interface/UploadFile.js"></script> <script type="text/javascript" src="../appjs/myfileupload.js"></script> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form action="../Myservlet" id="form1" name="form1" enctype="multipart/form-data" method='post'> <div> <ul> <li> 文件上传 </li> </ul> </div> <div> <input id="uploadfile" type="submit" value="上传"> </div> <div> <input type="file" name="addfilename"> </div> </form> </body></html>然后后台servlet部分是:public class Myservlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException { java.lang.String filename = request.getParameter("addfilename"); ServletFileUpload uploadfile = new ServletFileUpload();//文件上传组件核心类 uploadfile.setHeaderEncoding("utf-8");//将各个表单字段的描述头内容转换成字符串时所使用的字符集编码 PrintWriter out = response.getWriter(); if(ServletFileUpload.isMultipartContent(request)){ try { //希望大家看看这里,问题是由这里引起的 //问题是一运行到这里就出错,提示好像说什么空指针异常,所以我就想是不是这里request根本没有东西, //于是我就添加了上面的第一句程序进行检查果然没有东西 List<FileItem> filelist = uploadfile.parseRequest(request);//解析form中的各个字段的数据 for(int i=0;i<filelist.size();i++){ FileItem file1 = filelist.get(i); if(!file1.isFormField()){//判断是不是一个普通的表单字段 String fileallname = file1.getName();//文件上传时的路径及文件名 String inputname = file1.getFieldName();//获取文件输入框的name属性值 String filecontent = file1.getString();//获取文件内容 String contenttype = file1.getContentType();//获取文件类型 // 正则匹配,过滤路径取文件名 String regExp = ".+\\\\(.+)$"; Pattern p = Pattern.compile(regExp); Matcher m = p.matcher(fileallname); // 保存上传的文件到指定的目录 // 在下文中上传文件至数据库时,将对这里改写 file1.write(new File("d:\\test\\"+m.group(1))); //item.write(new File("d:\\" + m.group(1))); out.print("上传成功!"); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void doPost(HttpServletRequest request,HttpServletResponse response) { try { this.doGet(request, response); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }} 文件上传时 form 中必填 enctype="multipart/form-data" 属性,如果直接在servlet中获取,是不能获取到表单中的值的 麻烦你帮我看一下我上面的代码有什么问题吗?另外我有点疑问就是,为什么在servlet中就不能获取表单中的值呢? http://zhangjunhd.blog.51cto.com/113473/18331 你把写在doGet方法中的代码换到doPost方法中去你传过来的post 对应的应该用doPost方法 ,你可以试试,不知道我说的对不对 有异议请提出来 应该这样写:DiskFileItemFactory dfif = new DiskFileItemFactory(); dfif.setRepository(new File("c:\\temp")); //设定存储临时文件的目录。 ServletFileUpload fileupload = new ServletFileUpload(dfif); 无法获取form中的值的问题,给你个忠告,做上传,要先传输,再获取form中的参数值。另外,可以拼成串放在url的“?”后面也可以传过去。 急~!简历中如何介绍自己的项目。 谈封装 J2EE总体的学习计划 联通的企业短信通的wsdl路径是啥 太急了 那位大哥大姐知道的请进 跪谢 在线等!急 hibernate+tomcat 出的错 请教java中使用common-net-ftp,中文文件名和目录的问题!!! 如何enable log4j debugging ? 關于AJAX,希望大家幫忙 紧急问题:如何在JSP+SQL Server中存入图片和显示图片 hibernate 问题 100 求教贴,关于SSH框架内的session获取 用java怎么写excel导入导出啊
包含file的form里需要加上这段 encType=multipart/form-data method=post
1 首先在dispatcher-servlet.xml中声明一个MultipartResolver:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>50000000</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
<property name="defaultEncoding">
<value>GBK</value>
</property>
</bean>
2 表单
<form action="upload" enctype="multipart/form-data"><input type="file" name="myFile" /><input type="submit" value="Upload! " /></form>3 // 转型为MultipartHttpRequest:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 获得文件:
MultipartFile file = multipartRequest.getFile(" file ");
// 获得文件名:
String filename = file.getOriginalFilename();
// 获得输入流:
InputStream input = file.getInputStream();
// 写入文件
// 或者:
File source = new File(localfileName.toString());
multipartFile.transferTo(source);
仅供参考
<input type="file" name="myFile" />
?????????????
MultipartFile file = multipartRequest.getFile(" file ");
是不是应该是
MultipartFile file = multipartRequest.getFile("myFile");
很久没做过文件上传的东西了
检查下。
<html>
<head>
<title>文件处理</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='../dwr/engine.js'></script>
<script type='text/javascript' src='../dwr/util.js'></script>
<script type="text/javascript" src="../dwr/interface/UploadFile.js"></script>
<script type="text/javascript" src="../appjs/myfileupload.js"></script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="../Myservlet" id="form1" name="form1" enctype="multipart/form-data" method='post'>
<div>
<ul>
<li>
文件上传
</li>
</ul>
</div>
<div>
<input id="uploadfile" type="submit" value="上传">
</div>
<div>
<input type="file" name="addfilename">
</div>
</form>
</body>
</html>
然后后台servlet部分是:
public class Myservlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
java.lang.String filename = request.getParameter("addfilename");
ServletFileUpload uploadfile = new ServletFileUpload();//文件上传组件核心类
uploadfile.setHeaderEncoding("utf-8");//将各个表单字段的描述头内容转换成字符串时所使用的字符集编码
PrintWriter out = response.getWriter();
if(ServletFileUpload.isMultipartContent(request)){
try {
//希望大家看看这里,问题是由这里引起的
//问题是一运行到这里就出错,提示好像说什么空指针异常,所以我就想是不是这里request根本没有东西,
//于是我就添加了上面的第一句程序进行检查果然没有东西
List<FileItem> filelist = uploadfile.parseRequest(request);//解析form中的各个字段的数据
for(int i=0;i<filelist.size();i++){
FileItem file1 = filelist.get(i);
if(!file1.isFormField()){//判断是不是一个普通的表单字段
String fileallname = file1.getName();//文件上传时的路径及文件名
String inputname = file1.getFieldName();//获取文件输入框的name属性值
String filecontent = file1.getString();//获取文件内容
String contenttype = file1.getContentType();//获取文件类型
// 正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(fileallname);
// 保存上传的文件到指定的目录
// 在下文中上传文件至数据库时,将对这里改写
file1.write(new File("d:\\test\\"+m.group(1)));
//item.write(new File("d:\\" + m.group(1)));
out.print("上传成功!");
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response) {
try {
this.doGet(request, response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
你传过来的post 对应的应该用doPost方法 ,你可以试试,不知道我说的对不对 有异议请提出来
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setRepository(new File("c:\\temp")); //设定存储临时文件的目录。
ServletFileUpload fileupload = new ServletFileUpload(dfif);
给你个忠告,做上传,要先传输,再获取form中的参数值。
另外,可以拼成串放在url的“?”后面也可以传过去。