可以,但不能用上传控件了,本身ajax就可以用xml和servlet交互的,但说不定会有乱码
解决方案 »
- Ultra Edit编辑的js文件对齐方式问题
- javax.servlet.jsp.JspTagException: begin (1) > end (0)
- 学JSP,我要做些什么准备?
- 请各位高人帮忙apache+resin连不上数据库
- 求一Cookie保存登陆时间的例子
- java文件该放哪?
- 关于插入数据库繁体中文的问题..总不成功..
- checkbox提交的一个问题
- 如何将String转换成float?
- FAIL - Application at context path /KickBug1.2 could not be started
- Servlet如何用多线程??
- 关于hibernate 对于每个实体的配置问题!
sample.html<form name="upfile_form" action="UploadServlet" method="POST" enctype="multipart/form-data">
<p>input file title:
<input type="text" name="file_title" />
</p>
<p>select less than 200K file:
<input type="file" name="upload_file" id="upload_file" onchange="checkFileSize(this);" />
</p>
<p>
<input type="submit" value="submit" />
</p>
<iframe name="check_file_frame" style="display:none;"></iframe>
</form>
web.xml<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.test.servlet.UploadServlet</servlet-class>
</servlet><servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>servletpublic class UploadServlet extends HttpServlet
{public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");
DiskFileItemFactory factory=new DiskFileItemFactory();
String path=request.getRealPath("/upload");
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload=new ServletFileUpload(factory);
try{
List<FileItem> list=upload.parseRequest(request);
for(FileItem item:list)
{
if(item.isFormField())
{
String name=item.getFieldName();
String value=item.getString("UTF-8");
request.setAttribute(name, value);
}
else
{
String name=item.getFieldName();
String value=item.getName();
int start=value.lastIndexOf("\\");
String fileName=value.substring(start+1);
request.setAttribute(name, fileName);
item.write(new File(path,fileName));
/*OutputStream os=new FileOutputStream(new File(path,fileName));
InputStream is=item.getInputStream();
byte []buffer=new byte[400];
int length=0;
while((length=is.read(buffer))>0)
{
os.write(buffer,0,length);
}
os.close();
is.close();*/
}
}
}
catch (Exception e) {
e.printStackTrace();
}
request.getRequestDispatcher("/result.jsp").forward(request, response);
}}
注意:需要添加commons-fileupload.jar commons-io.jarcheck_file.js var fileForm = new Object();
function checkFileSize(fileObj) {
if(fileObj.value != "") {
var form = document.forms['upfile_form']; //把form的原始数据缓存起来
fileForm.f = form;
fileForm.a = form.getAttribute("action"); //form.action 为一个静态的对象,所以这里要使用getAttribute方法取值
fileForm.t = form.target; //请求服务器端
form.target = "check_file_frame";
//form.action = "./ajax.php?act=upload";
form.action = "UploadServlet";
//form.submit(); 其实上面的action已经会执行submit操作,这步可有可无
}
return false;
}function ajax_callback(result) {
//还原form属性
fileForm.f.target = fileForm.t;
fileForm.f.setAttribute("action", fileForm.a); //处理结果
switch(result) {
case 0:
alert("文件超过了200K或者没有选择文件,请重新上传!");
//todo somthing
default :
alert("合法");
//do somthing,如果你想使用这种方法实现真正的上传的话,那么在成功后把返回的文件路经存储在一个 input[hidden]里是个不错的办法
}
return ;
}
但这种方法上传完后,页面直接跳转到servlet了(什么也没显示),我现在要做的是上传完文件后,保持当前页面不变,帮采用ajax异步提交的方法,但没有找到好用的方法。<form name="accidentForm" action="uploadServlet" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>
<span id="fileLabel"><input type="file" name="file" id="file"></span>
</td>
<td>
<input type="submit" value="上传" class="button2"
</td>
</tr>
</table>
不过我倒是做过不刷新上传,就是把你的上传处理form放到一个隐藏的iframe中,或者采用弹出窗处理,
如果上传后还要显示相关的信息,则可以采用ajax取相关值在页面显示。
前台使用AJAX上传:jQuery + jQuery的上传插件如ajaxupload.js
ajaxupload demo: http://valums.com/files/2009/ajax-upload/demo-jquery.htm
这个例子里的后台是php,你把php部分改成servlet就可以了。
Servlet代码:跟一般的文件上传代码完全一样。1. 前端网页代码: upload.html,jquery.js和ajaxupload.js可以到网上搜索下载。
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Upload Demo</title> <style type="text/css"></style> <script src="js/jquery.js"></script>
<script src="js/ajaxupload.js"></script>
<script type="text/javascript">
$(function() {
// 创建AJAX方式上传文件
var $uploadBtn = $("#uploadBtn");
new AjaxUpload($uploadBtn, {
action: 'upload.action', // servlet地址,在web.xml的url-pattern里配置
name: 'uploadfile',
onSubmit: function(file, ext){
$("#info").html("start upload file...");
},
onComplete: function(file, response){
$("#info").html(response);
}
});
});
</script>
</head><body>
<div id="info">Choose file to upload</div>
<input type="button" width="200px" id="uploadBtn" value="Upload Demo">
</body>
</html>
2. 后台Servlet代码:简单的打印出接收到的文件。最好是上传一个普通的文本文件,然后查看接收到的数据格式与其他的servlet上传文件接收到的内容是否一致:安全是一样的内容。
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
int len = -1;
byte[] buf = new byte[4048];
ServletInputStream in = request.getInputStream(); while ((len = in.readLine(buf, 0, buf.length)) != -1) {
System.out.println(new String(buf, 0, len - 1));
}
}
也可以用Jquery或者ext插件,封装好的~~
Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特的用处。具体包括什么你可以百度一下,百度介绍的肯定比我说的详细。
你说的面试题:SSH不用ajax就能做一个登录,但面试是强调用ajax,我认为可以搭建好SSH后,在页面部分采用ajax异步提交的方式来向action传递登录名和密码,之后验证、返回。
我也是个菜鸟,这只是我的想法,请下面高人来给你个更好答案吧!
至于提交注册我还真不晓得用ajax有啥的好处
function upload(files){
createRequest();
var url = "/ship/upload";
request.open("post", url, false);
request.setRequestHeader('Content-type','multipart/form-data');
request.onreadystatechange = processResponse;
request.send(---------);
}这个send括号里可以传递一个文件对象或文件流吗?
我知道ajax要实现的功能啊,知道它的重要性,不知道怎么用,最简单的那个对象用过。然后论坛上天天看到人家说要用ajax,ajax就有这么容易使用么?大家用ajax是用什么技术?难不成说,我要使用ajax,就一定要去学习一个ajax的框架?我还有好多东西都没学呢,SSH都才刚开始~一直都在打基础,现在有点心急了
其实ajax所用到的大部分技术都是原有老技术的组合,除了XMLhttrequest算是web开发的新技术。如果没有web开发基础,建议先学学html、JavaScript、Css、DOM这些基础的知识,然后再看一下ajax方面的介绍,就什么都清楚了。有一本书叫《ajax基础教程》,写得不错,可以看看,如果你有web开发基础,也许这本书你还没看完,就会说:他妈的,这哪儿叫基础,明明就叫精通嘛。
简单说下方法吧:
<iframe name="hiddenFrame" id="hiddenFrame" style="display:none"></iframe>
<form name="accidentForm" action="" method="post" enctype="multipart/form-data" target="hiddenFrame">form增加一个target的属性指向那个隐藏的iframe即可。