upload.jsp <%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here </title>
<script type="text/javascript">
var xmlHttp;
//创建XMLhttpRequest对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
} //生成传递到服务器的参数查询串,参数值由页面表单填写得到
function createQueryString() {
var firstName = document.getElementById("firstName").value;
var queryString = "firstName=" + firstName + "";
return queryString;
}
//点击按钮响应的POST方法主函数
//POST方法把参数值以名=值方式在xmlHttp.send(queryString)中传递,queryString的形式为参数名=值&参数名=值...;
function doRequestUsingPOST() {
createXMLHttpRequest();//第一步:创建XMLHttpRequest对象
var url = "fff";
var queryString = createQueryString();//第二步:定义传递的参数值字符串
xmlHttp.open("POST", url, true);//第三步:建立与服务器的请求
xmlHttp.onreadystatechange = handleStateChange;//第四步:监听状态-->转到监听状态函数
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;");
xmlHttp.send(null);//第五步:发送请求,并且立即返回
} //监听状态函数
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();//-->转到函数parseResults输出从服务器返的值
}
}
} //在页面显示从服务器传来的结果
function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);//
responseDiv.appendChild(responseText);
}
</script>
</head>
<body> <input type="file" size="30" id="firstName" name="test" />
<input name="up" type="button" onclick="doRequestUsingPOST();" value="上传" />
<div id="serverResponse"> </div> </body>
</html> UploadFile.java public class UploadFile extends HttpServlet { protected void processRequest(HttpServletRequest request,
HttpServletResponse response, String method)
throws ServletException, IOException {
final long MAX_SIZE = 3 * 1024 * 1024; final String[] allowedExt = new String[] { "jpg","gif" };
response.setContentType("text/html;charset=gbk"); response.setCharacterEncoding("gbk");
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);
dfif.setRepository(new File(request.getRealPath("/")
+ "ImagesUploadTemp"));
ServletFileUpload sfu = new ServletFileUpload(dfif); sfu.setSizeMax(MAX_SIZE); PrintWriter out = response.getWriter(); List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
out.println("请选择小于等于:" + MAX_SIZE + "的文件 <p />");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
e.printStackTrace();
} if (fileList == null || fileList.size() == 0) {
out.println("11");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
Iterator fileItr = fileList.iterator(); while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0; fileItem = (FileItem) fileItr.next();
if (fileItem == null || fileItem.isFormField()) {
continue;
}
path = fileItem.getName();
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("你选择的文件不正确 ");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
String t_name = path.substring(path.lastIndexOf("\\") + 1);
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].equals(t_ext))
break;
}
if (allowFlag == allowedExtCount) {
out.println("支撑的文件格式 <p />");
for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
out.println("*." + allowedExt[allowFlag]
+ " ");
out.println(" <p /> <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
long now = System.currentTimeMillis();
String prefix = String.valueOf(now);
String u_name = request.getRealPath("/") + "ImagesUploaded/"
+ prefix + "." + t_ext;
try { fileItem.write(new File(u_name));
out.println("文件名称: " + prefix + "." + t_ext
+ " 文件大小: " + size + " <p />");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
} catch (Exception e) {
e.printStackTrace();
}
}
out.println("123");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Get主函数调用processRequest,完成Get方法的参数接受,返回的过程
processRequest(request, response, "GET");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//POST主函数调用processRequest,完成POST方法的参数接受,返回的过程
processRequest(request, response, "POST");
}
}
报的错误
org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl. <init>(FileUploadBase.java:814)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:323)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:341)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at UploadFile.processRequest(UploadFile.java:47)
at UploadFile.doPost(UploadFile.java:124)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Unknown Source) 我 就是 想把他 改成 ajax 的 不 知道 怎么 改
pageEncoding="gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here </title>
<script type="text/javascript">
var xmlHttp;
//创建XMLhttpRequest对象
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
} //生成传递到服务器的参数查询串,参数值由页面表单填写得到
function createQueryString() {
var firstName = document.getElementById("firstName").value;
var queryString = "firstName=" + firstName + "";
return queryString;
}
//点击按钮响应的POST方法主函数
//POST方法把参数值以名=值方式在xmlHttp.send(queryString)中传递,queryString的形式为参数名=值&参数名=值...;
function doRequestUsingPOST() {
createXMLHttpRequest();//第一步:创建XMLHttpRequest对象
var url = "fff";
var queryString = createQueryString();//第二步:定义传递的参数值字符串
xmlHttp.open("POST", url, true);//第三步:建立与服务器的请求
xmlHttp.onreadystatechange = handleStateChange;//第四步:监听状态-->转到监听状态函数
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;");
xmlHttp.send(null);//第五步:发送请求,并且立即返回
} //监听状态函数
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();//-->转到函数parseResults输出从服务器返的值
}
}
} //在页面显示从服务器传来的结果
function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);//
responseDiv.appendChild(responseText);
}
</script>
</head>
<body> <input type="file" size="30" id="firstName" name="test" />
<input name="up" type="button" onclick="doRequestUsingPOST();" value="上传" />
<div id="serverResponse"> </div> </body>
</html> UploadFile.java public class UploadFile extends HttpServlet { protected void processRequest(HttpServletRequest request,
HttpServletResponse response, String method)
throws ServletException, IOException {
final long MAX_SIZE = 3 * 1024 * 1024; final String[] allowedExt = new String[] { "jpg","gif" };
response.setContentType("text/html;charset=gbk"); response.setCharacterEncoding("gbk");
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);
dfif.setRepository(new File(request.getRealPath("/")
+ "ImagesUploadTemp"));
ServletFileUpload sfu = new ServletFileUpload(dfif); sfu.setSizeMax(MAX_SIZE); PrintWriter out = response.getWriter(); List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
out.println("请选择小于等于:" + MAX_SIZE + "的文件 <p />");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
e.printStackTrace();
} if (fileList == null || fileList.size() == 0) {
out.println("11");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
Iterator fileItr = fileList.iterator(); while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0; fileItem = (FileItem) fileItr.next();
if (fileItem == null || fileItem.isFormField()) {
continue;
}
path = fileItem.getName();
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("你选择的文件不正确 ");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
String t_name = path.substring(path.lastIndexOf("\\") + 1);
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].equals(t_ext))
break;
}
if (allowFlag == allowedExtCount) {
out.println("支撑的文件格式 <p />");
for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
out.println("*." + allowedExt[allowFlag]
+ " ");
out.println(" <p /> <a href=\"upload.html\" target=\"_top\">返回 </a>");
return;
}
long now = System.currentTimeMillis();
String prefix = String.valueOf(now);
String u_name = request.getRealPath("/") + "ImagesUploaded/"
+ prefix + "." + t_ext;
try { fileItem.write(new File(u_name));
out.println("文件名称: " + prefix + "." + t_ext
+ " 文件大小: " + size + " <p />");
out.println(" <a href=\"upload.html\" target=\"_top\">返回 </a>");
} catch (Exception e) {
e.printStackTrace();
}
}
out.println("123");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Get主函数调用processRequest,完成Get方法的参数接受,返回的过程
processRequest(request, response, "GET");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//POST主函数调用processRequest,完成POST方法的参数接受,返回的过程
processRequest(request, response, "POST");
}
}
报的错误
org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl. <init>(FileUploadBase.java:814)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:323)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:341)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at UploadFile.processRequest(UploadFile.java:47)
at UploadFile.doPost(UploadFile.java:124)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Unknown Source) 我 就是 想把他 改成 ajax 的 不 知道 怎么 改
解决方案 »
- 数组存储问题 SSH 后台怎样存储
- 讨论:关于jsp页面是放在webroot目录下和web-inf下优缺点
- 急问这是什么问题:Unable to compile class for JSP
- 在线等待,条形码的形成和打印!
- 请教:逻辑句柄不再有效。 这是什么意思啊? 急急!!
- java调用C# webservice 传值总是null?求搭救
- 搭车去了~~~结束这痛苦的出差。。。今天一天好像还没吃饭。。。
- 大菜鸟求教,J2EE,EJB,JSP,SERVLET ,JAVABEAN,之间的关系,和他们对JAVA 的关系到底是怎样的?
- 请问:stmt.execute(sql1+";"+sql2); 运行会报错
- 为什么数据库添加成功了,可页面(html)没有出来(ie不停的转)???
- ClassNotFoundException:com.ideas.servlet.InitServlet
- 求以java为基础的SSH开发问题
.......
</s:form>
Stuts2中上传文件,form的 enctype 要设成, enctype="multipart/form-data" 才可以, 楼主再试试
function doRequestUsingPOST() {
createXMLHttpRequest();//第一步:创建XMLHttpRequest对象
var url = "fff";
var queryString = createQueryString();//第二步:定义传递的参数值字符串
xmlHttp.open("POST", url, true);//第三步:建立与服务器的请求
xmlHttp.onreadystatechange = handleStateChange;//第四步:监听状态-->转到监听状态函数
xmlHttp.setRequestHeader("Content-Type","multipart/form-data;");
xmlHttp.send(null);//第五步:发送请求,并且立即返回
}
请问,上面的代码里头,我看见post方法中,发送请求时,参数为null.您没有传递参数过去,后面怎么获得的?是用form的提交吗?<s:form action="upload" theme="simple"enctype="multipart/form-data">
这个是您的form头吗?
我的是:<form name="form" action="javascript:dosss();" enctype="multipart/form-data">我直接用表单提交可以实现,但是用这种方法,servlet处理完之后,必须得跳转,只能用ajax.
<script type="text/javascript">
//统计资源访问次数的脚本
//定义XMLHttpRequest对象
var http_request1=false;
function send_request1(url){
http_request1=false;
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest){//Mozilla等浏览器初始化XMLHttpRequest过程
http_request1=new XMLHttpRequest();
//有些版本的Mozilla浏览器处理服务器返回的未包含XML mime-type头部信息的内容时会出错.
//因此,要确保返回的内容包含text/xml信息.
if(http_request1.overrideMimeType){
http_request1.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){//IE浏览器初始化XMLHttpRequest过程
try{
http_request1=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
http_request1=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){}
}
}
//异常,创建对象失败
if(!http_request1){
window.alert("不能创建XMLHttpRequest对象实例!");
return false;
}
//指定响应处理函数
http_request1.onreadystatechange=ps;
//发送HTTP请求信息
http_request1.open("POST",url,true);
http_request1.setRequestHeader("Content-Type","multipart/form-data");
//将参数放到这里,后台servlet可以用request.getParameter()方法取到这些参数
var firstName = document.getElementById("firstName").value;
var queryString = "firstName=" + firstName + ""; http_request1.send(firstName); }
//处理返回信息函数
function ps() {
if(http_request1.readyState==4){
//判断HTTP状态码
if(http_request1.status==200){
//信息已经成功返回,无动作
}
else {
}
}
}
function dosss(){
send_request1("/m/upload"); //这里的rewriteUrl就是页面上放置的资源经过重写后的链接
}
</script>servlet跟您的一样,请指教。