ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaWeb开发常用组件功能

2022-01-04 12:32:49  阅读:148  来源: 互联网

标签:comment 文件 常用 JavaWeb res item 组件 上传 String


常用组件化Web开发内容

1.文件的上传

(1)需要引入的 jar 文件:commons-fileupload-1.3.2、commons-io-2.5.jar。

<!-- 文件上传相关包:commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

<!-- 文件IO相关包:commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

(2)进行配置项的封装

#-- 配置参数封装成为成员变量
    //1.文件上传保存在服务器地址的路径
    private static final String UPLOAD_DIRECTORY = "D:\\uploadFiles";

    // # 临时记忆存储大小(单位字节)
    private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;
    //# 最大文件大小(单位字节)
    private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40;
    //# 最大请求大小(单位字节)
    private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50;

(3) 编写文件上传doPost方法

注意:文件上传请求只能使用post请求

3.1 判断请求是否是包含了媒体元素上传的请求
//1.检测是否为文件媒体元素上传
        boolean multipartContent = ServletFileUpload.isMultipartContent(req);
        if(!multipartContent){//不是包含了文件媒体元素上传的请求

            Result res = new Result();
            res.setCode("9999");
            res.setMsg("不是一个标准的文件上传请求");
            writer.print(res.toString());
            writer.flush();
            writer.close();

            return;
        }
3.2 通过工厂类来生产文件上传对象(加载配置过程)
//2.创建工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();

        //设置临界值
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        //设置临时存储的地址
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        //生成ServletFileUpload对象
        ServletFileUpload upload = new ServletFileUpload(factory);
3.3 文件上传对象配置加载
// 设置最大文件上传值
        upload.setFileSizeMax(MAX_FILE_SIZE);
        // 设置最大请求值 (包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);
        //文件内容编解码字符集设置
        upload.setHeaderEncoding("UTF-8");
3.4 获取上传的文件进行文件的写出
//1.获取所有请求提交的元素内容
int uploadCont = 0;//文件上传总数计数
        try {
            List<FileItem> fileItems = upload.parseRequest(req);

            //判断请求提交是否有内容
            if(fileItems != null&&fileItems.size()>0){//如果有内容在进行上传文件

                for(FileItem item : fileItems){//遍历请求项目
                    if (!item.isFormField()){//当表单项目内容不是一个普通表单时(就是文件)

                        //获取上传的文件封装为对象
                        System.out.println("上传中:文件名:"+item.getName());
                        File file = new File(item.getName());

                        //封装文件输出路径和对象
                        String outPath = UPLOAD_DIRECTORY+"\\"+file.getName();
                        //封装一个输出的文件对象
                        File outFile = new File(outPath);
                        //调用输出方法写出到硬盘位置
                        item.write(outFile);

                        uploadCont++;
                    }
                }

            }

        } catch (Exception e) {
            System.err.println("文件上传出错");
            e.printStackTrace();
            res.setCode("9999");
            res.setMsg("文件上传出错");
            writer.print(res.toString());
            writer.flush();
            writer.close();
            return;
        }

        res.setCode("0000");
        res.setMsg("文件上传成功!");
        res.setData(uploadCont);


        writer.print(res.toString());
        writer.flush();
        writer.close();

(4)前端文件上传方法

4.1 表单提交方法
<form action="http://localhost:8090/webDemo/uploadFiles"
  method="post"     #----  有文件上传的请求只能为post请求
      enctype="multipart/form-data"    #--- 文件上传必须要定义
>
    <input type="text" name="name" />
   <input type="file" name="uploadFile" />
    <input type="file" name="uploadFile2" />
   <input type="submit" value="上传" />
</form>
4.2 ajax文件上传方法
<form id="myForm">
    <input type="file" name="file1"  />
    <input type="file" name="file2"  />
</form>

<button type="button" onclick="toUp()">AJAX文件上传</button>
function toUp(){

       //模拟一个表单数据
       console.dir($("#myForm"));
       var formData = new FormData($("#myForm")[0]);

       $.ajax({
           url:"http://localhost:8090/webDemo/uploadFiles",
           type:"POST",
           data:formData,
           async:false,
           dataType:"JSON",
           cache:false,
           contentType:false,
           processData:false,
           success:function(data){
               console.dir(data);
           },
           error:function(XMLHttpRequest, textStatus, errorThrown){
               console.dir("请求失败!");
           }
       });
   }

(5) 项目开发中的文件上传管理

要求:

单个业务数据能关联相关的文件信息

要设计文件与数据关联的中间表

实现:

能查询数据关联的文件

(1)设计数据与文件对应关系表
drop table if exists t_files;

/*==============================================================*/
/* Table: t_files                                               */
/*==============================================================*/
create table t_files
(
   isDelete             int comment '是否删除:1:删除 0:没删除',
   ipaddress            varchar(50) comment '操作者IP地址',
   addTime              datetime comment '添加时间',
   updateTime           datetime comment '修改时间',
   deleteTime           datetime comment '删除时间',
   fileID               varchar(50) not null comment '文件id',
   bisID                varchar(50) comment '关联业务id',
   filePath             varchar(300) comment '文件位置',
   fileName             varchar(50) comment '文件名称',
   fileExt              varchar(50) comment '文件后缀',
   fileSize             varchar(50) comment '文件大小',
   primary key (fileID)
);

(2) 在文件上传时保存数据,改写文件名称
 for(FileItem item : fileItems){//遍历请求项目
                    if (!item.isFormField()){//当表单项目内容不是一个普通表单时(就是文件)



                        //获取上传的文件封装为对象
                        System.out.println("上传中:文件名:"+item.getName());
                        File file = new File(item.getName());

                        //文件后缀
                        String fileName = item.getName();
                        int i = fileName.lastIndexOf(".");

                        String etx = item.getName().substring(i, item.getName().length());

                        //生成一个UUID的文件名(同时为关联表主键字段)
                        String pk = UUID.randomUUID().toString().replaceAll("-","").substring(0,20);

                        //封装文件输出路径和对象
                        String outPath = UPLOAD_DIRECTORY+"\\"+pk+etx;

                        //调用保存文件信息到文件关联表中    !!!!关键!!!!!
                        saveFileData(item,etx,pk,"user1",outPath);//模拟一个业务id为user1

                        //封装一个输出的文件对象
                        File outFile = new File(outPath);
                        //调用输出方法写出到硬盘位置
                        item.write(outFile);


                        uploadCont++;
                    }
                }
//保存关联信息方法
/**
     * 保存业务信息与文件信息关联表
     * @param item  文件对象
     * @param etx  文件后缀
     * @param pk  文件名称
     * @param user1 关联业务id
     * @param outPath  文件保存位置
     */
    private void saveFileData(FileItem item,String etx, String pk, String user1,String outPath) {

        Connection con = MyC3P0Util.getCon();




        String sql = "INSERT INTO `t_files` VALUES\n" +
                "\t( 0, NULL, NULL, NULL, NULL, ?, ?, ?, ?, ?, ? );";
        try{
            PreparedStatement ps = con.prepareStatement(sql);

            ps.setString(1,pk);
            ps.setString(2,user1);
            ps.setString(3,outPath);
            ps.setString(4,pk);
            ps.setString(5,etx);
            ps.setString(6,item.getSize()+"");

            ps.executeUpdate();

            con.close();
        }catch (SQLException e){
            System.err.println("保存数据到文件表异常!");
            e.printStackTrace();
        }


    }

2.文件下载

3.Excel导入

4.Excel导出

5.Java邮件发送

6.Tomcat的打包部署

标签:comment,文件,常用,JavaWeb,res,item,组件,上传,String
来源: https://www.cnblogs.com/DQGonoes/p/15762008.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有