JavaWeb 项目(第六次笔记)

文件上传

不会见(chap7)

 1.文件上传的应用场景:提交作业    上传头像       提交简历(上传附件)    上传商品,图书图片

 2.文件上传的前台如何编写以及注意事项:

 1.肯定需要用到表单
            2.文件上传的那一栏需要提供   input的type=file的组件,同样需要加name给后台获取
            3.回顾form表单的三大属性:
                    A.action:表单的提交路径
                    B.method:表单的提交方式,2大默认值,一般都是post,很少使用get
                          get/post的区别:get不安全会把数据暴露在URL地址上,可以携带的数据非常少只有几KB,速度较快
                          post安全不会把数据暴露在URL地址上,可以携带的数据非常多,速度较慢

                   C.enctype:表单的类型  三大默认值:
                            a.普通表单:application/x-www-form-urlencoded  默认就是
                            b.功能表单:multipart/form-data 普通表单的升级版,可以用来实现文件上传
                            c.功能表单:text/plain  普通表单的升级版,可以用来实现大文本表单提交

 4.form表单属性需要注意的是:1.method必须为post   2.enctype必须为multipart/form-data

———————————————————————————————————————————            以上暂时省略文件上传相关的数据校验

 3.文件上传的后台如何编写以及注意事项:

 1.肯定需要用到Servlet  (Servlet怎么写依然怎么写)
 2.在类名的上面在加一个额外的注解:@MultipartConfig 表示该Servlet支持处理文件上传
 3.需要接受文件  通过req.getPart("前台的文件的name值");
                  普通数据通过req.getParameter("前台的组件的name值")
                  文件类型数据通过req.getPart("xxx");
4.获取文件的相关信息
                                 通过第三步的Part part = req.getPart("xxx");
                                 来获取相关信息
                                 System.out.println(part.getContentType());//获取文件的类型
                                 System.out.println(part.getSize());//获取文件的大小 单位是字节
                                 System.out.println(part.getSubmittedFileName());//获取文件名

保存用户上传的文件

 开始将用户上传的文件保存在本地服务器(本地的一个路径)
        声明一个文件的保存路径
        组装一下  需要将路径和文件名进行拼接
        String path = "D:\\uploadTest\\" + part.getSubmittedFileName();
        将part对象保存到path路径中 part.write(path);


分页查询

不会见(goods_system)

当一个页面数据量很大的时候 肯定不宜将所有数据放在一个页面里面。
此时就需要用到分页查询。

分页查询的基本思想:
    假设有351条数据,每页显示5条数据。
    需要得到哪些有价值的信息:
1.一共有多少页      --->   需要知道总条数(sql查询)
        总页 ==> 总条数%每页显示的条数==0? 总条数/每页显示的条数 : 总条数/每页显示的条数+1
        总页 ==>  ceil(总条数/每页显示的条数.0)  注意强行让其进行double运行。

2.第几页应该显示哪些数据
        分页查询的sql语法:
            select * from 表名  limit  a,b ;
            a表示从第几条开始  b表示每页显示几条,一般是固定值。

            -- 第一页
            select * from goods  limit  0,10 ;

            -- 第二页
            select * from goods  limit  10,10 ;

            -- 第三页
            select * from goods  limit  20,10 ;

            总结:a = (n-1) * b

多表查询之模糊查询

不会见(zuowen_system)

 //模糊查询
    public List<Composition> queryByKeys(String keys  ){
        List<Composition> list = new ArrayList<Composition>();
        String sql = "select composition_id,composition_name,composition_brief,competitor.author_id,\n" +
                "author_name,author_phone,author_school from composition left join competitor\n" +
                "on competitor.author_id = composition.author_id  where  composition_name like concat('%',?,'%') \n" +
                "or competitor.author_id like concat('%',?,'%')  or author_name  like concat('%' , ? , '%'  )";
//        注意: ?传参符 会将参数 自动的补上引号,然后再拼接到sql语句中
//        所以以上写法是错误的。 因为模糊查询的语法 本身就带有引号 而?也会补上引号 会发生冲突
        //当你 pre.setString(1,keys); 都会报错

        //总结: 以后用到模糊查询 统一使用  concat语法  语法如下

        Connection conn = JDBCUtil.getConn();
        try {
            PreparedStatement pre = conn.prepareStatement(sql);
            pre.setString(1,keys);
            pre.setString(2,keys);
            pre.setString(3,keys);
            ResultSet rs = pre.executeQuery();
            while (rs.next()){
                Composition  c = new Composition();
                c.setComposition_id(rs.getInt(1));
                c.setComposition_name(rs.getString(2));
                c.setComposition_brief(rs.getString(3));
                Competitor c1 = new Competitor();
                c1.setAuthor_id(rs.getInt(4));
                c1.setAuthor_name(rs.getString(5));
                c1.setAuthor_phone(rs.getString(6));
                c1.setAuthor_school(rs.getString(7));
                c.setCtor(c1);
                list.add(c);
            }
            return list;
        } catch (SQLException throwables) {
            System.out.println("查询作文失败" + throwables);
            return null;
        }
    }

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值