[Web] MVC模型
来源:互联网 发布:mac玩魔兽世界非常热 编辑:程序博客网 时间:2024/06/08 18:41
模型1
JSP通常通过链接方式进行JPS页面的跳转,工程量一多,或修改一个JSP路径则会导致大量页面中的链接需要修正
模型2
模型2是基于模型-视图-控制器(MVC)模式
实现MVC模式的应用包含模型、视图、控制器3个模块;
①控制器 负责接收用户输入、改变模型以及调整视图的显示
同学A要你的作业(用户请求),要先通过你(控制器),你把该作业做完(逻辑处理),把作业给A同学(跳转到视图界面)
②视图 负责应用的展示(即展示页面JSP,FLT等)
你做完了作业写到了小纸条(视图)上,交给了用户(服务器对浏览器操作进行响应)
③模型(数据模型)
你做作业时用的公式,数值等(即模型,模子是Javabean,数据在数据库中)
文章:Application Programming in Smalltalk-80(TM):How to use Model-View-Controller(MVC)
模型2中,Servlet和Filter都可以充当控制器,SpringMVC和Structs1使用一个Servlet作为控制器,而Structs2则使用一个Filter作为控制器
名词:POJO(Plain Old Java Object)、EJB
模型2工作流程
- 每个HTTP请求都发送给控制器,请求中URL标识出对应的action
action代表了应用可以执行的一个操作,一个提供了action的java对象称为action对象
一个action类可以支持多个actions或者一个action
看似简单的操作可以需要多个action。如,向数据库添加一个产品,需要两个action
1) 显示一个“添加产品”的表单,以便用户能输入产品信息
2) 将表单信息保存到数据库中 - 控制器会解析出URL并调用相应的action,然后将模型对象放到视图可以访问的区域。最后,控制器利用RequestDispatcher跳转到视图
模型2学习例子
3次优化,工程不断优化来学习思想
给出工程文件,这里就不贴代码了,有问题请纠正
链接:http://pan.baidu.com/s/1slhlU13 密码:bd11
链接若失效请留言或邮箱
工程名product_struct2_a
示例应用支持如下两个action:
1) 展示“添加产品”表单,action发送输入表单到浏览器上,其对应的URI应包含字符串product_input
2) 保存产品并返回图16.3所示的完成页面,对应的URI必须包含字符串product_save
项目列表说明:
1)product类,作为product的领域对象
2)一个productForm类,封装了HTML表单的输入项
3)一个ControllerServlet类,本示例应用的控制器
4)一个SaveProductAction类
5)两个JSP页面(ProductForm.jsp和ProductDetail.jsp)作为View
6)一个css文件,定义了两个JSP页面的显示风格
测试:输入URL/product_input
问题
示例中,业务逻辑代码都写在了Servlet控制器中,这个Servlet随着应用复杂度的增加而不断膨胀。为避免此问题,我们应该将业务逻辑代码提取到独立的被称为controller的类中
解耦控制器代码 product_struct2_b
优化
相比于a示例,控制器中分为两个类来处理业务逻辑(InputProductController、SaveProductController)
这个两个控制器都实现了controller接口,接口中只有handlerRequest一个方法;
而原来唯一的ControllerServlet在b示例中功能更加专注,现在作用更像一个dispatcher,而不是controller,因此改名为DispatcherServlet
DispatcherServlet相当于一个页面分流器,根据请求不同,分流到不同的controller中来处理请求
问题
对输入的内容没有校验结果
校验器
优化
例:product_strcut2_c
Web应用执行action时,要进行输入校验;
java社区专门发布了JSR 303 Bean Validation以及JSR 349 Bean Validation1.1版本,将Java输入检验进行标准化;
两种检测方法:编程式、申明式
测试URL:/product_input
与b不同,ProductValidator类用来校验结果,两个JSTL库
问题
数据没存进数据库
后端
应用MVC,可以在Controller类中调用后端业务逻辑;通常,需要若干封装了后端复杂逻辑的Service类
Service类中,可以实例化一个DAO类访问数据库
此次优化未写例子
- [Web] MVC模型
- Web编程模型:WebForm、MVP还是MVC?
- Servlet,MVC模型,Web监听器--14
- 用MVC模型引导你的WEB设计思路
- 用MVC模型引导你的WEB设计思路
- 基于MVC的web框架---模型层设计
- 闲话Web编程模型:WebForm、MVP还是MVC?
- 闲话Web编程模型:WebForm、MVP还是MVC?
- web应用的MVC模型中使用bean的注意事项
- MVC模型
- MVC模型
- mvc模型
- MVC模型
- MVC模型
- MVC模型
- MVC模型
- MVC模型
- MVC模型
- Scala基础—Trait使用示例
- Android开发-多线程
- Retrofit + RxJava + OkHttp 让网络请求变的简单-封装篇
- javaScript系列之事件处理器以(三)
- Hadoop之HDFS(二)
- [Web] MVC模型
- 友元
- mysql+php+ajax实现点赞 浏览量
- webgate单点登录原理
- 安装arm-linux-gcc
- 文件操作
- Minimum supported Gradle version is 3.3. Current version is 2.14.1
- javaScript系列之函数的基本使用(四)
- SDUT-1209 求实数绝对值