毕业设计要做一个基于J2EE的软件智能开发包,现在一点头绪都没有啊, 主要是智能升级,还要支持断点的,开个头好吗???
解决方案 »
- 关于spring和struts整合问题
- 求助--你们觉得我应该找什么样的工作
- 如何控制对外提供接口的访问频率
- 怎样生成由0~9组成的所有3位数
- java中如何判断字符串是否是json格式。
- 关于选择一段时间内重复日期的问题
- webservice(xfire) 怎么验证调用接口的用户的信息,需要每个接口都验证一次用户信息吗?
- 请教,Spring MVC中如何实现帖子列表分页的功能
- 紧急求助:在Jbuilder中,applet可以预览,而在IE中报错“load:class xxx.xxx not found”
- 关于EJB中使用findByPrimaryKey产生错误的问题?
- 我想学习一下jdo,请问怎么搭建平台?
- 【请教】tomcat中jdbc的driver应该放在什么地方?
■ 何时适用:当你想要在Java服务器环境中加入一个易用、高性能的文件上载组件之时。 ■ 示例应用:要求服务器端应用目录的WEB-INF/lib下面有commons-fileupload-1.0-dev.jar。 ■ 说明: FileUpload组件解决了常见的文件上载问题。它提供了一个易用的接口来管理上载到服务器的文件,可用于JSP和Servlet之中。FileUpload组件遵从RFC1867,它分析输入请求,向应用程序提供一系列上载到服务器的文件。上载的文件可以保留在内存中,也可以放入一个临时位置(允许配置一个表示文件大小的参数,如果上载的文件超过了该参数指定的大小,则把文件写入一个临时位置)。另外还有一些参数可供配置,包括可接受的最大文件、临时文件的位置等。 下面介绍一下使用FileUpload组件的步骤。 首先创建一个HTML页面。注意,凡是要上载文件的表单都必须设置enctype属性,且属性的值必须是multipart/form-data,同时请求方法必须是POST。下面的表单除了上载两个文件,另外还有一个普通的文本输入框: <form name="myform" action="fileuploaddemo.jsp"
method="post" enctype="multipart/form-data">
输入你的名字:<br />
<input type="text" name="name" size="15"/><br />
图形:<br />
<input type="file" name="myimage"><br/>
文件:<br />
<input type="file" name="myfile"><br /><br />
<input type="submit" name="Submit"
value="Submit your files"/>
接下来创建JSP页面。 // …
// ① 检查输入请求是否为multipart的表单数据。
boolean isMultipart = FileUpload.
isMultipartContent(request);
// …
// ② 为该请求创建一个句柄,通过它来解析请求。执行
// 解析后,所有的表单项目都保存在一个List中。
DiskFileUpload upload = new DiskFileUpload();
// 通过句柄解析请求,解析得到的项目保存在一个List中
List items = upload.parseRequest(request);
// …
// ③ 通过循环依次获得List里面的文件项目。要区分表示
// 文件的项目和普通的表单输入项目,使用isFormField()
// 方法。根据处理请求的要求,我们可以保存上载的文
// 件,或者一个字节一个字节地处理文件内容,或者打
// 开文件的输入流。
Iterator itr = items.iterator();while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
// 检查当前的项目是普通的表单元素,还是一个上载的文件
if(item.isFormField()) {
// 获得表单域的名字
String fieldName = item.getFieldName();
// 如果表单域的名字是name…
if(fieldName.equals("name"))
request.setAttribute("msg",
"Thank You: " + item.getString());
} else {
// 该项目是一个上载的文件,把它保存到磁盘。
// 注意item.getName()
// 会返回上载文件在客户端的完整路径名称,这似乎是一个BUG。
// 为解决这个问题,这里使用了fullFile.getName()。
File fullFile = new File(item.getName());
File savedFile = new File
(getServletContext().getRealPath("/"),
fullFile.getName());
item.write(savedFile);
}
}
我们可以通过上载句柄的upload.setSizeMax来限制上载文件的大小。当上载文件的大小超过允许的值时,程序将遇到异常。在上面的例子中,文件大小的限制值是-1,表示允许上载任意大小的文件。 还有其他一些略有变化的使用形式,正如前面所指出的,我们可以在上载的文件上打开一个输入流,或者让它们驻留在内存中直至空间占用达到一定的限制值,或者在判断文件类型的基础上,以String或Byte数组的形式获取其内容,或者直接删除文件。这一切都只要使用FileItem类提供的方法就可以方便地做到(DefaultFileItem是FileItem的一个实现)。
HttpClient client = new HttpClient();
③ 创建一个HttpMethod的实例,即确定与远程服务器的通信要采用哪种传输方式,HTTP允许采用的传输方式包括:GET,POST,PUT,DELETE,HEAD,OPTIONS,以及TRACE。这些传输方式分别作为一个独立的类实现,但所有这些类都实现HttpMethod接口。在本例中,我们使用的是GetMethod,创建GetMethod实例时在参数中指定我们想要GET的URL。 // 创建一个HttpMethod的实例
HttpMethod method = new GetMethod(url);
④ 执行HttpMethod定义的提取操作。执行完毕后,executeMethod方法将返回远程服务器报告的状态代码。注意executeMethod属于HttpClient,而不是HttpMethod。 // 执行HttpMethod定义的提取操作
statusCode = client.executeMethod(method);
⑤ 读取服务器返回的应答。如果前面的连接操作失败,程序将遇到HttpException或IOException,其中IOException一般意味着网络出错,继续尝试也不太可能获得成功。服务器返回的应答可以按照多种方式读取,例如作为一个字节数组,作为一个输入流,或者作为一个String。获得服务器返回的应答后,我们就可以按照自己的需要任意处置它了。 byte[] responseBody = method.getResponseBody();
⑥ 最后要做的就是释放连接。 method.releaseConnection();
以上只是非常简单地介绍了一下HttpClient库,HttpClient实际的功能要比本文介绍的丰富得多,不仅健壮而且高效,请参阅API文档了解详情。
// ① 创建一个客户端。我们将用NNTPClient
// 从新闻服务器下载新闻组清单。
client = new NNTPClient();
// …
// ② 利用前面创建的客户端连接到新闻服务器。
// 这里选用的是一个新闻组较少的服务器。
client.connect("aurelia.deine.net");
// …
// ③ 提取新闻组清单。下面的命令将返回一个
// NewsGroupInfo对象的数组。如果指定的服
// 务器上不包含新闻组,返回的数组将是空的,
// 如果遇到了错误,则返回值是null。
list = client.listNewsgroups();
//...
// ④ 最后终止与服务器的连接。
if (client.isConnected())
client.disconnect();
必须说明的是,listNewsgroups命令可能需要较长的时间才能返回,一方面是因为网络速度的影响,另外也可能是由于新闻组清单往往是很庞大的。NewsGroupInfo对象包含有关新闻组的详细信息,并提供了一些操作新闻组的命令,比如提取文章总数、最后发布的文章、发布文章的权限,等等。