zoukankan      html  css  js  c++  java
  • java_day25_UUID,封装上传

    上传的封装

    一.上传的封装

      public class SmartUpload {

        private HttpServlet servlet;//

        private ServletFileUpload sfu;//用于上传的全局变量

        private File uploadDir;//用来创建上传文件的文件夹

        private HashMap<String,String> parameters;//用来存储普通表单数据

        private HashMap<String,File> files;//用来存储上传文件的文件名和文件

        

        public SmartUpload(HttpServlet httpServlet){

          this.servlet = httpServlet ; //构造方法,用来操作使用此轮子的servlet对象

          inintDir();//初始化上传文件夹

          sfu = new ServletFileUpload();// 

          sfu.setFileItemFactory(new DiskFileItemFactory());//初始化servletFileUpload

          parameters = new HashMap<>();//初始化对象

          files = new HashMap<>(); //初始化对象}

        private void initDir(){

          String uploadPath = servlet.getServletContext().getRealPath("")+File.separator+"upload";//拼接上传文件路径

          uploadDir = new File(uploadPath); //通过拼接路径创建File对象

          if(!uploadDir.exists()){  //判断文件夹是都存在

            uploadDir.mkdirs();} //不存在则创建文件夹    

        public void parse(HttpServletRequest request){  //解析request

          List<FileItem> fileItems = sfu.parseRequest(request);//解析request放入List中

          if(fileItems != null){  //判断不为空

           for(FileItem fileItem : fileItems){//遍历List

            if(fileItem.isFormField()){ //判断是否为表单数据

              String key = fileItem.getFieldName();//获取key

              String value = fileItem.getString("utf-8");//获取value

              parameter.put(key,value);//存入hashMap中

            }else { //不是表单数据

              String fileName = fileItem.getName();//获取文件名

              if(StringUtils.isEmpty(fileName)){ //引用是apache下的包

                continue;}

              String realName = TestUUID.handFileName(fileName);//利用UUID生成新的文件名

              File file = new File(uploadDir,realName);//通过文件夹和文件名创建文件

              fileItem.write(file);//写文件

              files.put(fileName,file);//将文件名和file对象存入hashMap

          public String getParameter(String key){

            return parameter.get(key);}

          public Map<String,String> getParameterMap(){

            return parameters;}

          public Map<String,File> getUploadFiles(){

            return files;}

    二.用注解@MultipartConfig实现上传文件

       Part file = request.getPart("file");//根据表单中的name属性拿到要上传的文件

       file.getName();//拿到的是在表单中name的属性值

       file.getContentType();//获取文件类型

       fiel.getSize();//获取文件大小

       file.getHeader("content-disposition");//获取文件详情

       File dir = new File(getServletContext().getRealPath("")+File.separator+"upload");

       if(!Dir.exists()){

       Dir.mkdirs();}   //创建文件夹

       String fileName = getServletContext().getRealPath("")+File.separator+"upload"+File.separator+file.getName;//文件名及路径

       file.write(fileName);//传文件

     

    三.request域

       向request域中放值,值以key-value的形式存放,key只能是String,value可以是任何对象

       存值:request.setAttribute("msg",msg);//键值对形式存放

       取值:request.getAttribute("msg");//通过key取value

    四.ServletContext域

        tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。

        1、web项目中共享数据,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

     

     五.JavaWeb中四大域对象的作用范围

      PageContext域:作用范围是整个JSP页面,是四大作用域中最小的一个;生命周期是当对JSP的请求时开始,当响应结束时销毁。

      ServletRequest域:作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

      HttpSession域:作用范围是一次会话。生命周期是在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate() ,可以立即销毁session。

      ServletContext域:作用范围是整个Web应用。当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

      PageContext(jsp页面),ServletRequest(一次请求),HttpSession(一次会话),ServletContext(整个web应用)。

     

  • 相关阅读:
    codeforces 616B Dinner with Emma
    codeforces 616A Comparing Two Long Integers
    codeforces 615C Running Track
    codeforces 612C Replace To Make Regular Bracket Sequence
    codeforces 612B HDD is Outdated Technology
    重写父类中的成员属性
    子类继承父类
    访问修饰符
    方法的参数
    实例化类
  • 原文地址:https://www.cnblogs.com/memo-song/p/9042799.html
Copyright © 2011-2022 走看看