做女神投票网站碰到的问题

期末的JAVA作业:女神投票网站

 

没有用任何框架,因为要和一些没接触过JAVA WEB的人一起合作,于是采用了简单的JSP+servlet

 

主要的问题出在:在添加女神模块中form表单中除了一些名字,简介,还要有照片上传

照片上传我就采用了我博客中第一篇文章,用commons-fileupload以及commons-io两个包实现的文件上传

但是如果采用这样的方式,那么有一点要注意的是如网页表单为:

<form action="Add" method="post" enctype="MULTIPART/FORM-DATA">
<input type="text" name="name">
<input type="file" name="file" size="30"/>
<input type="text" name="introduce">
<input type="submit">
</form>

在相应的servlet中,如果采用String name = request.getParameter("name");是取不到值的。

name将为null,原因上网查了下愿意,采用MULTIPART/FORM-DATA文件上传方式,表单内容是以二进制流的方式上传的,所以用普通的方法得不到的。

必须在用getString方法得到

if(item.isFormField()){
if(item.getFieldName().equals("name")) {
name = new String(item.getString().getBytes("iso-8859-1"),"GB2312");
System.out.println(name);
}
else {
introduce = new String(item.getString().getBytes("iso-8859-1"),"GB2312");
System.out.println(introduce);
}

 

这里要说明几个函数的作用

getFieldName就是活的表单的属性名,即name属性

getString表示表单里的内容

比如表单中<input type="text" name="name">

那么当迭代到这一个FileItem时候

item.getFieldName就得到name

item.getString就得到网页中这个输入框中输入的内容

但是getString这里是我出现的第二个问题

女神名字介绍等肯定输入的是中文,用getString获得之后,就乱码了。

所以要转码一下new String(item.getString().getBytes("iso-8859-1"),"GB2312");

如果页面pageEncoding为GBK或者GB2312,则可以用

new String(item.getString().getBytes("iso-8859-1"),"GBK")和new String(item.getString().getBytes("iso-8859-1"),"GB2312");

这两种都是可以通用的

 

如果页面pageEncoding为UTF-8,则只能采用

new String(item.getString().getBytes("iso-8859-1"),"UTF-8");

posted @ 2013-12-12 18:26  不断坚持  阅读(243)  评论(0编辑  收藏  举报