期末的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");