List items = upload.parseRequest(request); 为什么items是空的?

lcfsuccess 2009-05-14 10:52:56
代码如下:
FileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

List items = upload.parseRequest(request);

Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();

//上传文件
if (!item.isFormField()) {
......
......
try{
File uploadedFile = new File(savePath,tempName);

item.write(uploadedFile);
}catch(Exception e){
errorMsg = "上传文件失败。";
}
}
}


为什么程序执行到 List items = upload.parseRequest(request); 后,发现items是空的呢?

请大侠们帮忙分析一下啊。
...全文
18787 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinlin516293816 2011-12-13
  • 打赏
  • 举报
回复
我的解决方案:
Struts2的配置文件加上如下内容:

<constant name="struts.multipart.maxSize" value="1152921504606846970006" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.multipart.saveDir" value="/tmp" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="false" />
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.cn.RequestParseWrapper"
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />

标红的这里你要写一个类,这个类的代码哪下所示:

public class RequestParseWrapper extends JakartaMultiPartRequest {

public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException
{

}

虽然这个类什么也没有,但是必须得有。
这样就可以解决 List items = upload.parseRequest(request);它为空的问题了。
启程- 2011-12-06
  • 打赏
  • 举报
回复
22楼和23楼的神人们,解决了吗? 要是解决了麻烦加qq指导下啊。 万分感谢。 459013614
匿名旅途 2011-12-06
  • 打赏
  • 举报
回复
lcfsuccess
(liuliu)
等 级:
结帖率:0.00%
longhu453226594 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 csuchenpeng1119 的回复:]

这个是Android客户端上传代码
---------------------------------------------------------------------

package com.chenpeng.prj13;

import java.io.File;
import java.io.FileInputStream;
imp……
[/Quote]

哥们,解决了没?我也遇到此问题,我你的一样,在android开发中.
csuchenpeng1119 2011-04-04
  • 打赏
  • 举报
回复
这个是Android客户端上传代码
---------------------------------------------------------------------

package com.chenpeng.prj13;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.chenpeng.util.Constant;
import com.chenpeng.util.FormFile;
import com.chenpeng.util.HttpFormUtil;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class UploadPicActivity extends Activity{
EditText myEditText1,myEditText2;
Button submitButton,selectButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.upload_pic);
myEditText1=(EditText) findViewById(R.id.picDescEditText);
myEditText2=(EditText) findViewById(R.id.picPathEditText);
submitButton=(Button) findViewById(R.id.submitPicButton);
selectButton=(Button) findViewById(R.id.selectPicButton);
selectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(UploadPicActivity.this,FileExplorerActivity.class);
//第二个参数为请求码requestCode:1
startActivityForResult(intent, 1);
}
});
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String des=myEditText1.getText().toString().trim();
String actionUrl=myEditText2.getText().toString().trim();
if(uploadFile(actionUrl, des).equals("1")){
showDialog("上传成功!");
}else{
showDialog("上传失敗!");
}
}
});
}
public void showDialog(String msg){
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setMessage(msg).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog ad=builder.create();
ad.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//此处的请求码必须和startActivityForResult中的请求码一致才能接受另一个Activity传递过来的数据
if(requestCode==1){
String path=data.getStringExtra("filepath");
myEditText2.setText(path);
}
}
public String uploadFile(String fileName,String fileDes){
//获取服务器地址
String SERVERPATH=Constant.ServerPath+"/servlet/UploadServlet";
File PicFile=new File(fileName);
FileInputStream picStream;
String result="";
try {
picStream = new FileInputStream(fileName);
Map<String,File> uploadFile=new HashMap<String,File>();
uploadFile.put("uploadPic", PicFile);
byte[] buffer=new byte[picStream.available()];
picStream.read();
FormFile formFile=new FormFile(buffer,fileName,"图片文件","image/gif");
Map<String,String> param=new HashMap<String,String>();
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm");
String date=sdf.format(d);
param.put("uploadtime", date);
param.put("filedes", fileDes);
result=HttpFormUtil.post(SERVERPATH, param, uploadFile);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}


-----------------------------------------------------------------------------------

package com.chenpeng.util;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

public class HttpFormUtil {
public static String post(String actionUrl,Map<String,String>params,Map<String,File>files) throws Exception{
String BOUNDARY="######"; //分隔符
String PREFIX="--"; //分隔符前后缀
String LINEND="\r\n"; //回车换行
URL url=new URL(actionUrl);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setReadTimeout(5*1000);
conn.setDoInput(true); //可以输入
conn.setDoOutput(true); //可以输出
conn.setUseCaches(false); //禁止使用缓存
conn.setRequestMethod("POST"); //请求方法为POST
conn.setRequestProperty("Connection", "Keep-Alive");//连接状态
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("ContentType", "multipart/form-data;boundary="+BOUNDARY);//内容类型
StringBuilder sb=new StringBuilder();
//首先组拼文本类型的参数
for(Map.Entry<String,String> entry:params.entrySet()){
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition:form-data;name=\""+entry.getKey()+"\""+LINEND);
sb.append("Content-Type:text/plain"+LINEND);
sb.append("Content-Transfer-Encoding:8bit"+LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
DataOutputStream outputStream=new DataOutputStream(conn.getOutputStream());
outputStream.write(sb.toString().getBytes());
//发送文件数据
if(files!=null){
for(Map.Entry<String,File> file:files.entrySet()){
StringBuilder sb1=new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition:form-data;name=\"file\";filename=\""+file.getKey()+"\"");
sb1.append("Content-Type:application/octet-stream;charset=\"UTF-8\""+LINEND);
outputStream.write(sb1.toString().getBytes());
InputStream is=new FileInputStream(file.getValue());
byte[] buffer=new byte[is.available()];
int len=0;
while((len=is.read(buffer))!=-1){
outputStream.write(buffer, 0, len);
}
is.close();
outputStream.write(LINEND.getBytes());
}

//请求结束标志
byte[] end_data=(PREFIX+BOUNDARY+PREFIX+LINEND).getBytes();
outputStream.write(end_data);
outputStream.flush();
//得到响应码
if(conn.getResponseCode()==200){
InputStream in=conn.getInputStream();
byte[] b=new byte[in.available()];
int ch;
if((ch=in.read())!=-1){
sb.append((char)ch);
}
}
}
outputStream.close();
conn.disconnect();
return sb.toString();

}
}

以下是服务器端接收上传文件代码

package Servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;

import vo.UploadFile;


public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
// response.setCharacterEncoding("utf-8");
System.out.println("--------------");
PrintWriter out=response.getWriter();
RequestContext req=new ServletRequestContext(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
UploadFile uf = new UploadFile();
try {
System.out.println("--------------");
List list = upload.parseRequest(request);
System.out.println("--------------"+list.size());
Iterator it = list.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (item.isFormField()) {
String fileName = item.getFieldName();
System.out.println(fileName);
if (fileName.equals("uploadtime")) {
uf.setUploadTime(item.getString());
}
if (fileName.equals("filedes")) {
uf.setFileDesc(item.getString());
}
} else {
String fullFileName = item.getName();
int idx = fullFileName.lastIndexOf(".");
String subfix = fullFileName.substring(idx);
String fileName = new Date().getTime() + subfix;
String path = this.getServletContext().getRealPath(
"/upload");
File f = new File(path + "/" + fileName);
item.write(f);
}
}
} catch (Exception e) {
e.printStackTrace();
}
out.print("1");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}

希望看过代码后的大侠能够快速给出答复,急急急急急急急急!!!!小弟万分感谢!
csuchenpeng1119 2011-04-04
  • 打赏
  • 举报
回复
有没有高手回答呀?
csuchenpeng1119 2011-04-04
  • 打赏
  • 举报
回复
对呀,我也没有用struts,直接用servlet去接收上传的文件夹,可还是空的,请求高手解释
rockflying 2011-03-28
  • 打赏
  • 举报
回复
我没有用struts,直接用servlet去接收上传的文件夹,可还是空的,请求高手解释
晚风残 2010-12-02
  • 打赏
  • 举报
回复
官方网站上有了:struts2没有解决的办法,struts1可能有。下面是网址
http://commons.apache.org/fileupload/faq.html
hahaizi_liu 2010-11-04
  • 打赏
  • 举报
回复
\过滤时,会改变reqeust的类型,由HttpServletRequest变成MultiPartRequestWrapper

所以parseRequest就返回了null
\
hahaizi_liu 2010-11-04
  • 打赏
  • 举报
回复
各位大哥,我的还是不行啊?web.xml、jsp、action都改成以上说的了,还是空啊!!??????
love1901 2010-11-03
  • 打赏
  • 举报
回复
mark
qianqian51267 2010-07-21
  • 打赏
  • 举报
回复
struts2过滤时,会改变reqeust的类型,由HttpServletRequest变成MultiPartRequestWrapper

所以parseRequest就返回了null
xiazhilian1987 2010-06-21
  • 打赏
  • 举报
回复
本人用的是struts 1
xiazhilian1987 2010-06-21
  • 打赏
  • 举报
回复
<filter>
<filter-name>EnFilter</filter-name>
<filter-class>com.cnpc.common.EncodingFilter</filter-class>
<init-param>
<param-name>Encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>OutEncoding</param-name>
<param-value>text/html;charset=GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EnFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

我也改了*.action 为什么就不行呢那?
谁能解释一哈。万分感谢。
xiaoli19880505 2010-03-14
  • 打赏
  • 举报
回复
难不成过滤器过滤掉了multipart/form-data的请求,应该是吧,吃一垫长一智啊
xiaoli19880505 2010-03-14
  • 打赏
  • 举报
回复
我也遇到了这种情况,为什么7楼的解决就是正确的 真是不明白 为什么那样就行了
javawang1111 2010-03-03
  • 打赏
  • 举报
回复
跪谢7楼的大哥!太感谢了啊
naiyi1984 2009-12-16
  • 打赏
  • 举报
回复
跪谢7楼的大哥!
jaguarlsl 2009-09-25
  • 打赏
  • 举报
回复
原因就是因为在web.xml中配置了Struts的filter
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

改成

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

就可以了
加载更多回复(6)
将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> //必须是multipart的表单数据。 <form name="myform" action="demo1.jsp" method="post" enctype="multipart/form-data"> Your name:
<input type="text" name="name" size="15"><br> File:
<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="Commit"> </form> </body> </html> demo1.jsp <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="org.apache.commons.fileupload.*"%> <%@ page import="org.apache.commons.fileupload.servlet.*"%> <%@ page import="org.apache.commons.fileupload.disk.*"%> <%@ page import="java.util.*"%> <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。 if (isMultipart == true) { FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。 ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); //检查当前项目是普通表单项目还是上传文件。 if (item.isFormField()) {//如果是普通表单项目,显示表单内容。 String fieldName = item.getFieldName(); if (fieldName.equals("name")) //对应demo1.html中type="text" name="name" out.print("the field name is" + item.getString());//显示表单内容。 out.print("
"); } else {//如果是上传文件,显示文件名。 out.print("the upload file name is" + item.getName()); out.print("
"); } } } else { out.print("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: the field name isjeff the upload file name isD:\C语言考试样题\作业题.rar 示例2 上传两个文件到指定的目录。 demo2.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo2.jsp" method="post" enctype="multipart/form-data"> File1:
<input type="file" name="myfile"><br> File2:
<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="Commit"> </form> </body> </html> demo2.jsp <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="org.apache.commons.fileupload.*"%> <%@ page import="org.apache.commons.fileupload.servlet.*"%> <%@ page import="org.apache.commons.fileupload.disk.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <%String uploadPath="D:\\\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart==true){ try{ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request);//得到所有的文件 Iterator itr = items.iterator(); while(itr.hasNext()){//依次处理每个文件 FileItem item=(FileItem)itr.next(); String fileName=item.getName();//获得文件名,包括路径 if(fileName!=null){ File fullFile=new File(item.getName()); File savedFile=new File(uploadPath,fullFile.getName()); item.write(savedFile); } } out.print("upload succeed"); } catch(Exception e){ e.printStackTrace(); } } else{ out.println("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: upload succeed 此时,在"D:\temp"下可以看到你上传的两个文件。 示例3 上传一个文件到指定的目录,并限定文件大小。 demo3.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo3.jsp" method="post" enctype="multipart/form-data"> File:
<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="Commit"> </form> </body> </html> demo3.jsp <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="org.apache.commons.fileupload.*"%> <%@ page import="org.apache.commons.fileupload.servlet.*"%> <%@ page import="org.apache.commons.fileupload.disk.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <% File uploadPath = new File("D:\\temp");//上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } // 临时文件目录 File tempPathFile = new File("d:\\temp\\buffer\\"); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);//设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);//得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); } catch (Exception e) { e.printStackTrace(); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 示例4 利用Servlet来实现文件上传。 Upload.java package com.zj.sample; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @SuppressWarnings("serial") public class Upload extends HttpServlet { private String uploadPath = "D:\\temp"; // 上传文件的目录 private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录 File tempPathFile; @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);// 得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile.getName()); fi.write(savedFile); } } System.out.print("upload succeed"); } catch (Exception e) { // 可以跳转出错页面 e.printStackTrace(); } } public void init() throws ServletException { File uploadFile = new File(uploadPath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile = new File(tempPath); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } } demo4.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> // action="fileupload"对应web.xml中的设置. <form name="myform" action="fileupload" method="post" enctype="multipart/form-data"> File:
<input type="file" name="myfile"><br>
<input type="submit" name="submit" value="Commit"> </form> </body> </html> web.xml Upload com.zj.sample.Upload Upload /fileupload
文件的上传功能,只要自己构造一个servlet即可。 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { response.setContentType(CONTENT_TYPE); // Set the servlet's response type to XML. PrintWriter out = null; String uploadDirectory = this.getServletContext().getInitParameter("UploadDirectory"); if(!uploadDirectory.contains(":")) { String rootpath = request.getRealPath(request.getRequestURI()); rootpath = rootpath.substring(0, rootpath .lastIndexOf("\\FlowMonitoringSystemJava\\uploadhandler")); uploadDirectory=rootpath+ uploadDirectory.replace('/', '\\'); } // Get the upload directory from the web.xml file. ArrayList allowedFormats = new ArrayList(); // Allowed image format types are stored in an ArrayList. allowedFormats.add("jpeg"); allowedFormats.add("png"); allowedFormats.add("gif"); allowedFormats.add("jpg"); File disk = null; FileItem item = null; DiskFileItemFactory factory = new DiskFileItemFactory(); // We use the FileUpload package provided by Apache to process the request. String statusMessage = ""; ListIterator iterator = null; List items = null; ServletFileUpload upload = new ServletFileUpload( factory ); // SAX 2.0 ContentHandler. TransformerHandler hd = null; try { out = response.getWriter(); StreamResult streamResult = new StreamResult(out); // Used for writing debug errors to the screen. SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); // SAX XML parsing factory. items = upload.parseRequest(request); iterator = items.listIterator(); hd = tf.newTransformerHandler(); // Set the XML handler. Transformer serializer = hd.getTransformer(); // You'll serialize the data. serializer.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); // You'll use UTF-8 for the XML encoding. serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"response.dtd"); // Set the doctype to the custom DTD. serializer.setOutputProperty(OutputKeys.INDENT,"yes"); // Though not required, you can provide automatic indentation of the XML. serializer.setOutputProperty(OutputKeys.METHOD,"xml"); // Identifies the method used for outputting the result tree. hd.setResult(streamResult); hd.startDocument(); // Start the XML document. AttributesImpl atts = new AttributesImpl(); // Declare and instantiate a new attributes object. hd.startElement("","","response",atts); // Start the main response element. while( iterator.hasNext() ) // Loop over the items in the request. {

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧