Web三层框架

什么是三层?

表示层 :主要是指 用户交互的界面 , 用于接收用户输入的数据和显示处理后用户需要的数据
业务逻辑层 :表示层和数据库访问层之间的桥梁 , 实现业务逻辑 , 具体包含:验证、计算、业务规则等等
数据访问层 :与数据库打交道 , 主要实现对数据的增、删、改、查
Web三层框架_第1张图片

 三层架构的理解

Web三层框架_第2张图片

    单体数据
    new NewsDao().queryAll();
    多个表的数据
       1.多表查询语句
       2.从dao里面取出连个表的数据
     
    拿数据:仓库(数据库)管理员dao
    针对数据进行加工:厨师 biz
    给别人做显示:服务员 jsp
    
    用户在页面上发起一个请求(jsp上点击了一个按钮)
     【西红柿炒蛋】
    请求给到biz 【没有西红柿,没有蛋】
        【告诉dao,我需要西瓜红(数据),鸡蛋(数据)】
    1.西红柿dao包->西红柿
    2.鸡蛋dao包->鸡蛋
    biz处理数据:将西红柿+鸡蛋->西红柿炒鸡蛋
    jsp页面:显示功能【上菜】 

三层架构的特征

1.各司其职 
2.高内聚低耦合:
高内聚 : 尽可能类的每个成员方法只完成一件事
低耦合 : 减少类内部,一个成员方法调用另一个成员方法
从类角度来看, 高内聚低耦合:减少类内部,对其他类的调用
从功能块来看 , 高内聚低耦合:减少模块之间的交互复杂度
简单来说,就是 解耦 :只做自己功能内的事
任何一层发生变化都不会影响到另外一层!!!

面向接口编程

设计与实现分开
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个
对象内部是如何实现自己的 , 对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系
统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,
这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

实现方式

biz : 存放业务逻辑层的接口
biz.impl : 存放业务逻辑层的实现类
dao : 存放数据访问层的接口
dao.impl : 存放数据访问层的实现类

 

还记得新闻系统吗?增加界面的文本框是没有格式的,那么今天我们就来完善一下吧

Web三层框架_第3张图片

先将上次(上篇博客有下载方法)下载的副文本添加到webapp中

将两个jar包也添加到WEB-INF中的lib中

Web三层框架_第4张图片

 

我的副文本叫ckeditor哦

然后将副文本导入增加新闻界面

 

找到文本框设置一个id

 

对文件进行一个加载

新闻封面

在界面中添加一个文件选择器

新闻封面

 注意:表单进行文件上传需要注意两个点,第一个表单的提交类型一定要为post,第二个必须为多段式表单(enctype="multipart/form-data"

之前写的这些都是针对普通表单的,所以我们要进行更改

  //request.setCharacterEncoding("utf-8");

   //接收新闻的数据
   /**
   String title=request.getParameter("title");
   String author=request.getParameter("author");
   String publisher=request.getParameter("publisher");  
   String topic=request.getParameter("topic");
   String content=request.getParameter("content");
   **/

接收文件

拿到磁盘工厂

// 为基于磁盘的文件项创建工厂

// 接收到你的图片,将图片存到电脑磁盘上

DiskFileItemFactory factory = new DiskFileItemFactory();

创建一个新的文件上传处理程序

ServletFileUpload upload = new ServletFileUpload(factory);

让处理程序去解析请求中的数据(在List中有普通的数据,文件数据)

List items = upload.parseRequest(request);

遍历表单数据(需要进行判断是否为普通数据)

 	//遍历表单数据
    for (FileItem item : items) {
        // item有可能是文件,普通数据
        if (item.isFormField()) {//是不是普通数据
            String name = item.getFieldName();//表单中的name属性
            String value = item.getString("utf-8");//对应的值
            //需要进行判断取值
            if(name.equals("title")){
                title=value;
            }
            if(name.equals("content")){
                content=value;
            }
            if(name.equals("author")){
            	author=value;
            }
            if(name.equals("publisher")){
            	publisher=value;
            }
            if(name.equals("topic")){
            	topic=value;
            }
        } else {//不是普通数据【是文件】
            //myFile
            String oldName=item.getName();//文件名字

            //生成一个新的名字: 不重复
            cover += UUID.randomUUID().toString().replace("-", "");

            //生成动态的后缀名
            //  a.png -> .png
            //  f.jpg -> .jpg
            //      2022040.13.5221.mp4
            //      [2022040,13,5221,mp4]
            String[] strings = oldName.split("\\.");

            // 随机名字+动态后缀名
            cover+="."+strings[strings.length-1];

            //保存到本地
            item.write(new File("D:\\A_JavaWeb\\icons"+cover));
        }
    }

把图片进行映射

映射是什么?

双击服务

 点击Modules

 再

Web三层框架_第5张图片

 进行路径和名字的添加(名字自己取)

Web三层框架_第6张图片

完成后会出现这样一行

 

 怎么映射?

1.在阅读界面添加一个显示图片的操作

  定义值并赋值

    //定义需要的值
    String title="";
    int count=0;
    String author="";
    String publisher="";
    String content="";
    String cover="";
    if(rs.next()){
    //进行赋值
    	title=rs.getString(2);
    	publisher=rs.getString(5);
    	author=rs.getString(4);
    	content=rs.getString(6);
    	count=rs.getInt(8)+1;//当前自己阅读了一次
    	ps.setString(7,"/images/"+cover);
    }

2.在界面中添加图片

下次见咯

你可能感兴趣的:(JavaWeb,web,java,html,oracle)