1.上传核心原理(重点)
1.1.jsp注意点(背会)
(1)form表单请求方式为POST请求
(2)form的enctype属性值为“multipart/form-data”
(含义:设置表单的类型为文件上传表单)
(3)获取文件通过type属性值file
(4)上传文件务必设置name属性值
1.2.servlet注意点(背会)
(1)通过getPart()方法获取Part对象
Part part = request.getPart("myfile");
(2)通过getSubmittedFileName()方法获取上传的文件名
String fileName = part.getSubmittedFileName(); System.out.println("上传文件名:"+fileName);
(3)获取上传文件存放的路径
String filePath = request.getServletContext().getRealPath("/"); System.out.println("文件存放的路径:"+filePath);
上下文
(4)将文件上传到指定位置
part.write(filePath+"/"+fileName);
2.上传实战
2.1 配置tomcat8
2.2 创建工程,并导入tomcat8中的servlet和jsp的jar包
2.3 创建upload.jsp
2.4 创建UpServlet(省略导包)
使用注解@MultipartConfig
将一个Servlet标识为支持文件上传
@MultipartConfig //有这个注解别忘了 public class UpServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.设置字符集 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //2.获取上传者 String uname = request.getParameter("uname"); System.out.println("上传者:" + uname); //3.获取part对象 // Servlet3.0将multipart/form-data的POST请求封装成Part对象,通过Part对象完成上传文件的 *** 作, //但是它没有提供直接获取文件名的方法,需要通过Part对象从请求中解析出来 Part part = request.getPart("myfile"); //4.获取文件名 String fileName = part.getSubmittedFileName(); System.out.println("文件名:"+fileName); //5.获取上传文件路径 String filePath = request.getServletContext().getRealPath("/"); //当前绝对路径 //是根据上面这个路径来进行传到哪 System.out.println("上传的路径:"+filePath); //6.上传文件到指定位置 String locationUrl = filePath + "/" +fileName; part.write(locationUrl); // 传入一个保存文件的绝对路径,即可保存上传的文件 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
javax.servlet.ServletContext接口(摘录)
Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。
Web应用中servlet可以使用servlet上下文得到:
1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。
2.读取Web应用中文件内容和其他静态资源的功能。
3.互相发送请求的方式。
4.记录错误和信息化消息的功能。
ServletContext接口中的方法:
String getRealPath(String path)
给定一个URI,返回文件系统中URI对应的绝对路径。
如果不能进行映射,返回null。
2.5 web.xml
Archetype Created Web Application UpServlet cn.kgc.servlet.UpServlet UpServlet /UpServlet
2.6测试上传
3.下载核心原理
3.1 jsp注意点
(1)测试不输入参数的校验
(2)测试输入错误参数的校验
(3)测试输入正确参数的校验
3.2 servlet注意点
(1)参数的非空校验,去除字符串的前后空格
if(name==null || “”.equals(name.trim())){
response.getWriter().write(“请输入要下载的文件名”);
//关闭流
response.getWriter().close();
//退出程序
return;
}
(2)获取文件下载路径
String path = getServletContext().getRealPath("/");
(3)判断文件是否存在并且是一个标准文件
file.exists() && file.isFile()
(4)下载文件
ServletOutputStream os = response.getOutputStream();
4.下载实战
4.1创建download.jsp
4.2创建DownServlet
(导包省略啊)
public class DownLoadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.设置字符集 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //2.利用name对应的value值为fileName的值,获取选择的文件名称 String fileName = request.getParameter("fileName"); //3.校验判空,并去除前后空格 if (fileName == null || "".equals(fileName.trim())){ // trim() 方法用于删除字符串的头尾空白符。 response.getWriter().write("请输入要下载的文件名称"); //4.关闭资源 response.getWriter().close(); //5.退出程序 return; } //6.获取文件下载路径 String path = getServletContext().getRealPath("/"); //7.构建文件全路径 File file = new File(path + fileName); //8.校验2:判断文件是否存在 if (file.exists() && file.isFile()){ //校验三: //9.设置Content-Type头字段的值 response.setContentType("application/x-msdownload"); //10.设置Header response.setHeader("Content-Disposition","attachment;filename=" + fileName); //11.实例化文件流,读取文件 FileInputStream is = new FileInputStream(file); //12.写出文件 ServletOutputStream os = response.getOutputStream(); //13.定义数组,并通过流的方式将数据写出到文件中 byte[] array = new byte[1024]; int len = 0; while ((len = is.read(array))!= -1){ os.write(array,0,len); } }else { response.getWriter().write("文件不存在,请重新输入!"); //(1).关闭资源 response.getWriter().close(); //(2).退出程序 return; } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
4.3 web.xml
DownLoadServlet cn.kgc.servlet.DownLoadServlet DownLoadServlet /DownLoadServlet
在上面的上传里放中间 (maven中)不然可能就报错
4.4测试下载
注意一:
http://localhost:8080/download.jsp
如果为空,或者空格,就会出现下面的
请输入要下载的文件名称
注意二:
http://localhost:8080/upload.jsp
然后http://localhost:8080/download.jsp
文件名没输对
文件不存在,请重新输入!
正确时,就会进行下载:
题外话:
1 << 3 ==》 1 * 2^3
左移一位后最右位补0,移几位补几个0;
结果:二进制1000 十进制8
----2021.11.19
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)