文章目录
第二堂课0924
一、MVC模式介绍
模型-视图-控制器(MVC)
- 模型(Model)业务逻辑层
- 封装应用程序状态
- 响应状态查询
- 应用程序功能
- 通知视图改变
- 视图(View)表示层
视图部分不能有任何的业务逻辑
- 解释模型
- 模型更新请求
- 发送用户输入给控制器
- 允许控制器选择视图
- 控制器(controller)控制层
所有的请求,流程控制都是由控制器完成
控制层不做任何数据处理
- 定义应用程序行为
- 用户动作映射成模型更新
- 选择响应的视图
二、MVC第一次实践
实践思路
- 创建项目
- 配置启动类
- 建立对应的包
- controller(控制层)
- service(业务层)
- mapper(数据访问层)
- domain(数据映射)
- utils(工具类)
开始实验
JavaWeb常用注解
问题总结
-
Cannot resolve symbol ‘xx’ 等传输参数失败
项目中传输参数的id、title等是编辑器自动生成的,而不是手动输入的。(注意他们的形状、大小、底纹是不一样的)
-
IDEA中@override注解报错信息“Method does not override method from its superclass”
参考一
解决办法 -
Could not autowire. No beans of ‘HelloService’ type found.
参考一
Java Bean
解决办法
根本解决办法 -
编译之后出现:方法不会覆盖或实现超类型的方法
参考一 -
Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.
在启动失败下面会有提示错误信息 -
Whitelabel Error Page
参考一
三、思考总结
MVC模式的Web开发和嵌入式Web开发的差别
嵌入式web开发,页面中可能既有html代码,又有Java代码。系统后期维护和扩展比较困难。当页面比较多的情况下,必须启动服务器才可以进行调试。但是相比较于MVC模式,嵌入式web开发比较容易,学习成本比较低。比较适合小规模的WEB应用开发。
MVC开发,将代码按照逻辑分成视图层、模型层、控制层等三层。各层各负其责,互不干涉,各自更新对其他层没有影响,系统后期维护和扩展比较简单。但是MVC开发模式相对于传统的开发来说比较负责,所以它比较适合开发中大型的多人协同项目应用。
接口定义和实现的差别及分开写的好处
Java Web 接口开发简述
参考
接口的定义
使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:
[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而没有被实现。
接口的实现
接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键字implements,其基本格式如下:
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{
}
修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。
类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。
implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
接口分离原则
接口分开写即方便系统后期进行维护,又方便不同的用户进行调用。
接口分离原则指在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。即,一个类要给多个客户使用,那么可以为每个客户创建一个接口,然后这个类实现所有的接口;而不要只创建一个接口,其中包含所有客户类需要的方法,然后这个类实现这个接口。
没有使用接口分离原理的设计如图1-1所示,存在以下问题:如果Client A类需要改变所使用的Service接口中的方法,那么不但要改动Service接口和ServiceImp类,还要对ClientB类和ClientC类重新编译。也就是说,对ClientA的修改会影响ClientB和ClientC,因此应对其进行修改。