一个servlet的小问题?(100分)

  • 主题发起人 主题发起人 kinn_liu
  • 开始时间 开始时间
K

kinn_liu

Unregistered / Unconfirmed
GUEST, unregistred user!
javax.servlet.http.HttpUtils类的一个方法:
static java.util.Hashtable parsePostData(int len, ServletInputStream in) 是
如何应用的?
它将inputstream分析成一个什么样的Hashtable呀?
比如:如果我上传一个文件,表单对象的名字叫‘FILE_01’,是怎么体现在这个Hashtable
中的?我如何能取出来?
呵呵,我问的多了点儿,烦众位大虾劳心...
 
我也正在学,大哥有没有一些servlet的资料
 
hashtable 是一个 key,value一一对应的结构。
基本上一个程序会是这样:(未测试!)
ServletInputStream in = req.getInputStream();
int len = req.getContentLength();
Hashtable data = HttpUtils.parsePostData(len, in);
FileInputStream fis = (FileInputStream)data.get("FILE_01");
String strInfo = ((String [])data.get("information"))[0];
....
 
to 柳五公子:
呵呵,小弟试了一下,可是取不到参数呀。
源程序如下:
public class ItemServlet extends HttpServlet implements Serializable
{
public voiddo
Post(HttpServletRequest req, HttpServletResponse res)
{
service1(req, res);
}
public void service1(HttpServletRequest req, HttpServletResponse res) {
int contentLength = 0;
WriteFile dataParser = null;
contentLength = req.getContentLength();
try {
HttpUtils hu = new HttpUtils();
Hashtable hs = hu.parsePostData(contentLength,req.getInputStream());
dataParser = new WriteFile(hs,req,res);
} catch (Throwable ee) {
}
}
}
下面这个类是解析Hashtalbe的:
public class WriteFile
{
public WriteFile( Hashtable hs,HttpServletRequest req, HttpServletResponse res)
{
byte[] bBuf = new byte[4096];
int i;
try{
FileOutputStream FileOut = new FileOutputStream("test.txt");
FileInputStream FileIn = (FileInputStream)hs.get("File-01");

String info = ((String[])hs.get("T_1"))[0];
PrintWriter out = res.getWriter();
out.println(info);

i = FileIn.read(bBuf);
while (i != -1){
FileOut.write(bBuf);
i = FileIn.read(bBuf);
}

FileOut.flush();
FileOut.close();

}catch ( IOException e){
}
}
}
可是执行后,test.txt文件中是空的,response也没有把T_1的值回写给client,
大虾们,这是怎么回事呀?
呵呵。
 
把这一句Hashtable hs = hu.parsePostData(contentLength,req.getInputStream());
改成Hashtable hs = hu.parsePostData(contentLength/2,req.getInputStream());
 
to eguy :
55555555,还是什么也没做。文件是空,client也是空页面。
 
sorry.前一帖子说得不对。
文件upload不是这样的,你把与文件upload相关的东东
FileOutputStream FileOut = new FileOutputStream("test.txt");
FileInputStream FileIn = (FileInputStream)hs.get("File-01");

等注释掉。
response应该就可以把T_1的值回写给client了。
 
to eguy:
呵呵,我也发现是
i = FileIn.read(bBuf);
这条语句出现异常了。
不过,我的本意是想upload文件的。
请问eguy大虾,如何upload文件。(如果有空的话。)
我看过一个例程,他是自己解析ServletInputStream的。那样是不是太麻烦?
我看到parsePostData可以解析ServletInputStream,所以想用这个试试,不知eguy大虾
是如何做的。
 
帮助中说:
parsePostData只能解析application/x-www-form-urlencoded MIME type的post数据。
是不是这种MIME类型不能上传文件。
小弟是半路出家,望大虾能不厌其烦,呵呵...
 
first,yuour server must supply (and the client must support)
encoding type multipart/form-data. Most current browsersdo
,
but it's not a guarantee.
Secondly (and this is usually the trickiest part),
your servlet has to parse the binary data anddo
something with it
(e.g., write it to a file on the server).
The intrepid programmer is referred to RFC 1867 for cluefulness
on how to parse this data. Less brave souls can use the implementation
of a MultipartRequest wrote by someone.

 
多人接受答案了。
 
不好意思,我又犯了我固有的臆断错误。我在网上找到一个包可以实现你索要的功能。
http://www.servlets.com。 或者我直接发包给你。
 
to 柳五公子:
谢谢,如何联系。
请发包给我吧.<mail to : kbliu@263.net>
 
后退
顶部