黑马程序员技术交流社区
标题:
石家庄java
[打印本页]
作者:
程madman
时间:
2017-12-12 23:30
标题:
石家庄java
Ø Servlet3.0的特性
○ 3.0于2.5的区别:
§ 注解开发:方便开发
§ 文件上传:有些API不全
§ 异步请求:很少用
Ø 文件上传:
○ 概述:
§ 将本地的文件写到服务器上
○ 文件上传的技术:
§ Servlet3.0:注解开发/文件上传功能/异步请求
§ JSPSmartUpload:嵌入到JSP中完成文件上传,主要用于Model1年代
§ FileUplod:Apache的文件上传组件
§ Struts2:底层是FileUpload.
○ 文件上传的要素:
§ 表单的提交方式必须是post(get有大小限制)
§ 表单中需要有文件上传的表单元素:<input type="file">这个元素必须要有name属性和值
§ 表单的enctype属性的值必须是multipart/form-data.
Ø 注解开发:
@webServlet:配置servlet
@webListener:配置监听器
@webFilter:配置过滤器
Ø 文件上传的原理:
○ 设置enctype属性的值为mutipart/form-data.后请求体获取到文件格式
§ 使用request.getHeader("Content-type")获得请求体文件的分割线
§ 使用request.getInputStream();将输入流转成String;
§ 使用分割线切分数据:
:设置一个文件上传页面.
【步骤二】:点击提交,提交到Servlet中.
【步骤三】:在Servlet中接收参数.
【步骤四】:获得服务器的文件上传的路径.
【步骤五】:通过流写到该路径下就OK了.\
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收普通数据:
request.setCharacterEncoding("UTF-8");
String filedesc = request.getParameter("filedesc");
System.out.println("文件描述"+filedesc);
// 接收文件:
Part part = request.getPart("upload");
long size = part.getSize();// 获得文件大小:
System.out.println("文件大小:"+size);
String name = part.getName();
System.out.println("文件表单中的name属性的名称"+name);
// 获得文件名:
String header = part.getHeader("Content-Disposition");
int idx = header.lastIndexOf("filename=\"");
String fileName = header.substring(idx+10, header.length()-1);
System.out.println("文件名:"+fileName);
// 获得文件内容:
InputStream is = part.getInputStream();
// 获得upload的路径:
String path = this.getServletContext().getRealPath("/upload");
OutputStream os = new FileOutputStream(path+"/"+fileName);
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收普通数据:
request.setCharacterEncoding("UTF-8");
String filedesc = request.getParameter("filedesc");
System.out.println("文件描述"+filedesc);
// 接收文件:
Part part = request.getPart("upload");
long size = part.getSize();// 获得文件大小:
System.out.println("文件大小:"+size);
String name = part.getName();
System.out.println("文件表单中的name属性的名称"+name);
// 获得文件名:
String header = part.getHeader("Content-Disposition");
int idx = header.lastIndexOf("filename=\"");
String fileName = header.substring(idx+10, header.length()-1);
System.out.println("文件名:"+fileName);
// 获得文件内容:
InputStream is = part.getInputStream();
// 获得upload的路径:
String path = this.getServletContext().getRealPath("/upload");
OutputStream os = new FileOutputStream(path+"/"+fileName);
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2