在web开放过程当中总会有文件上传的时候.javascript
文件上传通常是引用外部的jar包,或者本身写源代码java
外部的jar包邮fileupload, smartupload;web
我天生喜欢原滋原味. 因此我也载了一个大跟头.session
文件上传是须要将form的 enctype属性改成multipart/form-data 默认的enctype属性是application/x-www-form-urlencoded, 默认的属性只能传通常的数据.不能用于传文件等.在使用默认的属性值时能够使用request.getParameter("name")来获取form表单里面name="name"的标签的value.可是当enctype变为multipart/form-data时request.getParameter("name")就不能使用了,一直的null. 网上有使用外部的jar包来从新使得request.getParameter()能从新使用.可是我这里比较简单. 就只是简单的用js改变action属性值 让url带参数传递过去.这样就能达到想要的效果.app
<form action="DoRemoteServlet" method="post" enctype="multipart/form-data" onsubmit="return testSelect(this)"> 经过审核的实验:<select name="exp1" id="exp1"> <% LinkedList<Experiment> oer = (LinkedList<Experiment>)session.getAttribute("ExperimentsResults"); Iterator<Experiment> iterator=oer.iterator(); while(iterator.hasNext()){ Experiment e=iterator.next(); %> <option value="<%=e.getName() %>"> <%=e.getName() %></option> <% } %> </select> <div class="clear"></div> <br> <br> 源代码文件:<input type="file" name="file"/> <br> <div class="clear"></div> <br><br> <div></div> <button type="submit">上传</button> </form>
<script type="text/javascript"> function select(fm){ var select=document.getElementById('exp1');//定位id var index=select.selectedIndex;// 选中索引 var text = select.options[index].text;// 选中文本 var value = select.options[index].value; // 选中值 alert("text:"+text+" value:"+value); fm.action = fm.action + "?exp1name=" + value; return true; } </script>
servlet
String expName = new String(request.getParameter("exp1name").getBytes("ISO-8859-1"),"UTF-8" ); System.out.println("doRemoteServlet:"+expName);
注意servlet值,字符乱码的状况;post