问题1:
使用common fileupload上传多文件成功保存后,跳转到现实上传成功页面显示中文乱码,并且使用Ajax技术的上传进度条不运动;
问题解决:
1.
更改jsp页面编码方式UTF-8到GBK或GB2312
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
/**
* 解决上传中文名的文件会出现乱码问题
*/
upload.setHeaderEncoding("UTF-8");
问题2:由于我上传的表单包括文件项和普通表单项,所以需要获取普通表单项的值。
问题解决:
1.
String uploadBoardName = item.getString();//获得普通表单域的值
如果出现中文乱码用下面
String uploadBoardName= new String(item.getString().getBytes("iso-8859-1"),"UTF-8");
也可以String uploadBoardName=item.getString("UTF-8");
如果有多个普通域,则使用以下方式处理
if("uploadBoardName".equals(item.getName()){
String uploadBoardName= item.getString();
}
if("descript".equals(item.getName()){
String descript = item.getString();
}
2.
if (item.isFormField())
{
String content = item.getString("UTF-8");
String uploadBoardName= item.getFieldName();
request.setAttribute(uploadBoardName,content);
}
else{
......
String uploadBoardName= item.getFieldName();
request.setAttribute(uploadBoardName, fileName);
}
取值 request.getAttribute("uploadBoardName")
问题3:
在处理上传文件的servlet文件中,获取上传文件的jsp页面传过来的普通表单字段
使用getFieldName方法 ,得到是空。
问题解决:
在上传页面的select的属性中只设置了ID属性,没设置Name属性。在这里,要再次恶补下html的基本知识。
问题4:
由于上传的资源使用三级栏目管理,所以,在接收由jsp上传页面传递过来的最高级栏目中文名称,并使用它进行查询第二级栏目的名称时,出现不能查询的情况,
DB_UploadBoard dbUploadBoard=new DB_UploadBoard();
UplaodBoard uploadBoard=new UplaodBoard();
Iterator it=dbUploadBoard.getUploadBoardFromTUBName("topUploadBoardName");
while(it.hasnext()){
uploadBoard=(uploadBoard)it.next();
out.println("<name>uploadBoard.getUploadBoardName()</name>");
}
在这里uploadBoard.getUploadBoardName()取到的值为第一级栏目的名称,而不是我想要的第一级栏目下的第二级栏目的所有名称。
原因:由于乱码原因,在
Iterator it=dbUploadBoard.getUploadBoardFromTUBName("topUploadBoardName");中取不到想要的值,所以我们可以改变在操作数据库查询之前的编码方式,或者下面有一种比较简单的方法,那就是
//数据库操作
String sql = "select * from uploadboard where topUploadBoardName='" + topUploadBoardName + "'";
try {
DBConnect dbconnect = new DBConnect(sql);
dbconnect.excuteQuery();
while (dbconnect.next()) {
out.println("<name>" + dbconnect.getString("uploadBoardName")+ "</name>");
}
}
这样就可以解决了。
问题5:Ajax 读取服务器返回的XML出现中文乱码
问题解决:
在Servlet中设置
response.setcontenttype( "text/xml;charset=utf-8 ");
response.setheader( "cache-control ", "no-cache ");
response.setcharacterencoding( "utf-8 ");
printwriter out= response.getwriter();
注意他们的设置的顺序。。。。。
printwriter out= response.getwriter(); 不然结果还是乱码,不要怪我不告诉是你!!!!
这一句必须在在最后设置,这既是要注意输出流的格式设置问题。我这里都是用的是UTF-8编码方式。
问题5:
想在网页显示上空出多个空格
问题解决:
<pre style="display:inline">这里是空位,这里<pre>和</pre>的距离有多少就有多少的空位</pre>
问题6:
实现普通表单值的传递,以保存到数据库的问题。在我的上传页面,有两个关联的下拉框,他们分别是最顶层栏目和第二层栏目,实现把文件上传到数据库中进行栏目管理。问题存在,保存到数据库的这两个栏目的值为空或是全部为空。
解决问题:
1,在不了解fileupload之前,先从数据库中取到所有的最高级的栏目的值,然后使用一个一个依次和getString("UTF-8")对比,如果相等,则赋值个最高栏目的变量topName.然后使用Break跳出本次的while(it.hasNext())的循环.然后使用取到的topName到数据库取到所有的他的上级市topName的第二季栏目的名称,再次循环直到取到第二级栏目的名称为止,最后保存在变量name中。
2,这也是最简单的办法,使用Item.getFileName(),具体如下所示:其中uploadBoardName和topUplaodBoardName分别是上传文件页面的两个栏目名称;
if(item.isFormField()){
// 当判断 item 为 Form 域时,
String fieldName = item.getFieldName();
String value = item.getString();
if(fieldName != null && fieldName.equals("topUploadBoardName")){
topUplaodBoardName=value;
}
if(fieldName != null && fieldName.equals("uploadBoardName")){
uploadBoardName=value;
}
问题7:把上传的文件的路径等信息保存在数据库中,出现了F:
ewsuildwebupload物联网内容.doc
F:ewsuildwebupload第二讲 java语言基础 .ppt等等问题
知识点:
java中, "// "表示分隔,相当于在windows中的 "/ ',而Unix的是 "/ "
我发现,如果使用File.separator代替"/",可以获取到你想要的路径,不过如果把这个路径保存在数据库中,路径在数据库的显示是uildwebupload是这种情况,如果直接使用"/"就不会出现,所以又因为考虑到系统移植问题,所以数据库只保存web的相对路径。