上传
将本地文件传输到服务器
jsp: 文件上传的请求方式必须是post input的type必须是file enctype="multipart/form-data" <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="upload"><br/> <input type="submit" value="上传"> </form> servlet: //1.设置编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //2.读(流) InputStream is = request.getInputStream();//从请求中获取流 //3.写(写到upload的文件夹下) //路径:在服务器中位置 String path = request.getServletContext().getRealPath("/upload"); OutputStream out = new FileOutputStream(new File(path,"a.txt")); byte[] buf = new byte[1024]; int data = -1; while((data=is.read(buf)) != -1){ out.write(buf, 0, data); } //释放资源 out.close(); is.close(); System.out.println("上传完成"); 浏览器标志信息: ------WebKitFormBoundarytd2doI29GpOG23VA Content-Disposition: form-data; name="upload"; filename="分包.txt" Content-Type: text/plain 获取请求头信息比较麻烦 上传框架: comms-upload.jar apache comms-io.jar 1. 导入jar 2. 编写jsp表单 3. servlet //fileItemFactory工厂:配置(缓冲区的大小,临时文件存放目录) DiskFileItemFactory factory = new DiskFileItemFactory(); //临时文件存放目录 factory.setRepository(new File("c:/")); //设置缓冲区大小 factory.setSizeThreshold(1024*1024); //解析请求(获取所有的表单元素(普通表单元素/文件表单元素)) //ServletFileUpload核心:将所有的表单元素解析为Fileitem ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); //获取文件目录 String path = request.getServletContext().getRealPath("/upload"); //遍历处理 for (FileItem fileItem : items) { //判断类型 if(fileItem.isFormField()){//是否为普通表单元素 //获取普通 String name = fileItem.getFieldName();//表单元素name值 String value = fileItem.getString();//value值 System.out.println("name="+name+",value="+value); }else{//文件 String name = fileItem.getName();//文件名称 fileItem.write(new File(path, name)); } } System.out.println("上传成功");
下载
将服务器的文件传输到本地。
//1.设置编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //2.获取参数的值 download?filename=xxx String filename = request.getParameter("filename"); //3.获取文件的服务器路径(获取目录的路径) String path = request.getServletContext().getRealPath("/res"); //4.读取文件 InputStream is = new FileInputStream(new File(path,filename)); //5.通过响应写文件到本地 //设置响应头 response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "utf-8")); OutputStream out = response.getOutputStream(); byte[] buf = new byte[1024]; int data = -1; while((data=is.read(buf)) != -1){ out.write(buf, 0, data); } out.close(); is.close();
过滤器(Filter)
过滤请求和响应。
当用户发出请求时,首先到达过滤器,过滤器如果”放行”,此时该请求就可以到达下一个过滤器或者servlet。当客户端响应时,也需要经过过滤器。
//初始化 @Override public void init(FilterConfig filterConfig) throws ServletException { } //过滤请求和响应 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("filter 接收到请求"); //放行 chain.doFilter(request, response); System.out.println("filter 接收到响应"); } //销毁 @Override public void destroy() { } <filter> <filter-name>myfilter</filter-name> <filter-class>filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> filter应用场景: 1) 全局的编码设置 2) 敏感字过滤 3) 权限管理
监听器(listener)
监听域的对象创建销毁。
HttpRequestListener
HttpSessionListener
ServletContextListener
监听域中数据的变化(添加,修改,删除)
ServletContextAttributeListener:监听application域中数据变化
ServletRequestAttributeListener:监听request域中数据的变化
HttpSessionActivationListener:监听session的状态(活化和钝化)
HttpSessionAttributeListener:监听session域中数据变化
HttpSessionBindingListener:实现session和对象的绑定
Ajax
同步请求:第二次请求需要等到第一次请求获取到响应之后才可以发送。
异步请求:请求之间没有依赖关系。
异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。
模拟百度查询:
原生js:
var val = document.getElementById("content").value;
var oDiv = document.getElementById("div1");
//借助于Ajax
//1.创建xhr对象
var xhr = new XMLHttpRequest();
//2.打开连接
xhr.open("GET","test?key="+val); //请求方式 请求路径 是否异步
//3.发送请求 请求体
xhr.send(null);
//4.监听状态并且接收响应
xhr.onreadystatechange = function(){
//获取请求状态 0-4 请求正确时获取
if(xhr.readyState == 4 && xhr.status == 200){
oDiv.innerHTML = xhr.responseText;
}
}
jQuery的Ajax:
$.ajax({
url:"test",
type:"get",
data:"key="+$("#content").val(),
dataType:"text",
success:function(data){
$("#div1").html(data);
}
});
url:请求路径
type:请求方式 get/post
data:传输的数据 字符串或者json {“key”:$(“#content”).val()}
dataType:服务器响应数据类型 (xml/html/json/script/text)
success:服务器响应正确时返回