Java Web 学习(3) —— MVC
MVC
一、 MVC 模式
MVC 代表 Model-View-Controller (模型-视图-控制器) 模式。
- Model:模型代表 DAO (Data Access Object 数据访问对象) 或 POJO(Plain Ordinary Java Object 普通 JavaBeans)。是应用程序中用于处理应用程序数据逻辑的部分。
- View:视图将数据可视化。
- Controller:应用程序中处理用户交互的部分。控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。控制器分离了视图与模型。
二、 Model 2
Java Web 应用开发中有两种设计模型,Model 1 和 Model 2。
Model 1 的中心是 JSP 页面,由 JSP 调用业务逻辑,显示页面,适合于小应用开发。
由 JSP 充当 视图和控制器,JavaBeans 充当模型。
Model 2 基于 MVC 模式,几乎所有现代 Web 框架都是 Model 2 的实现。
由 JSP 充当视图,Servlet 或 Filter 充当控制器,JavaBeans 充当模型。
每个HTTP 请求都发送给控制器,请求中的 URI 标识出对应的 action。action 代表了应用可以执行的一个操作。
控制器会解析 URI 并调用相应的 action,然后将模型对象放到视图可以访问的区域。
最后,控制器利用 RequestDispatcher 或者 HttpServletResponse.sendRedirect 方法跳转到视图。在 JSP 页面中,用表达式语言以及定制标签显示数据。
三、 Servlet 控制器
@WebServlet(name="ControllerServlet", urlPatterns={"/input-product", "/save-product"})
public class Controllerservlet extends HttpServlet{ private static final long serialVersionUID=1579L; @Override
public void doGet(HttpServletRequest request, HttpServletResponse response throws IOException, ServletException {
process(request, response);
} @Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
process(request, response);
} // 通过 process 方法处理所有输入请求
private void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
// 获取 action
String uri = request.getRequestURI(); // uri = /contextName/resourceName 或 /resourceName
int lastIndex = uri.lastIndexOf("/");
String action = uri.substring(lastIndex +1); // 转发 url
String dispatchUrl = null; // 处理 action
if("input-product".equals(action)){
dispatchUrl = "/jsp/ProductForm.jsp";
} else if("save-product".equals(action)){
// 创建模型
product = new Product();
product.setName(request.getParameter("name"));
product.setDescription(request.getParameter("description"));
product.setPrice(Integer.parseInt(request.getParameter("price")));
// 业务逻辑 保存模型等
SaveProductAction saveProductAction = new SaveProductAction();
saveProductAction.save(product);
// 将模型添加到 request 属性中 以便视图访问
request.setAttribute("product", product); dispatchUrl = "/jsp/ProductDetails.jsp";
}
// 转发
if(dispatchUrl != null){
RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl);
rd.forward(request, response);
}
}
}
<%--ProductForm.jsp--%>
<form method="post" action="save-product">
<h1>Add Product</h1>
<label>
<span>Product Name:</span>
<input id="name" type="text" name="name">
</1abel>
<label>
<span>Description:</span>
<input id="description" type="text" name="description">
</label>
<label>
<span>Price:</label>
<input id="price" name="price" type="number" step="any">
</label>
<label>
<span> :</span>
<input type="submit">
</label>
</form>
三、 Filter 分发器
@WebFilter(filterName="DispatcherFilter", urlPatterns={"/*"})
public class DispatcherFilter implements Filter{
@Override
public void init(Filterconfig filterconfig) throws ServletException { }
@Override
public void destroy() { }
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI();
// ... 与 Servlet Controller 一致
if (dispatchUrl! = null){
RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl);
rd.forward(request, response);
} else {
// 过滤器过滤包括静态目标在内的所有网址 如果没有 action 则继续传递下去
filterChain.doFilter(request, response);
}
}
}
Java Web 学习(3) —— MVC的更多相关文章
- [Java Web学习]Spring MVC使用普通类对象,声明的对象为null
由于对Spring还不熟悉,目前还处于学习阶段,因此经常会遇到一些小白问题,这个问题需要在Spring文件中将普通对象注入bean,然后在MVC中添加set方法,填充普通对象.
- Java web 学习之旅
java web学习之旅 来公司十天了,感觉已经慢慢地融入了这个环境中,几个学长人都很好,都是在他们帮助下,我才能比较顺利的开始了学习java web的旅途. 来这里学习的第一个阶段是做一个简单的用户 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- Java Web学习系列——Maven Web项目中集成使用Spring
参考Java Web学习系列——创建基于Maven的Web项目一文,创建一个名为LockMIS的Maven Web项目. 添加依赖Jar包 推荐在http://mvnrepository.com/.h ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
随机推荐
- TimeSpan的用法
TimeSpan的属性和方法: 下面的列表涵盖了其中的一部分: 属性: Add:与另一个TimeSpan值相加. Days: 返回用天数计算的TimeSpan值.Hours: 返回用小时计算的Time ...
- 推荐一款好看的Hexo主题Ayer
介绍 Ayer 是一个干净且优雅的Hexo主题,自带响应式,加载速度很快,该有的功能都有,可配置项也很多,非常适合作为你的博客主题,主题内还附送了6张精美的高清壁纸.欢迎使用和Star支持,如果你在使 ...
- Android微信九宫格图片展示控件
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...
- c#串口通信并处理接收的多个参数
最近摸索做个上位机,简单记录一下关键的几个部分 c#做串口通信主要使用的是System.IO.Ports类,其实还是十分方便的 最终效果如下: 千万不要忘记了下面这个 填写串口相关配置 我们可以通过G ...
- C#&.Net干货分享- 构造BaiduLanguageHelper对接百度的语言翻译
全部是封装的API源码... namespace Frame.Api{ /// <summary> /// 百度多语言支持器 /// </summary> ...
- Centos8 配置静态IP
安装centos 8之后,重启启动网络时,会出现以下报错 报错信息如下: Failed to start network.service: Unit network.service not found ...
- Java之字符编码和字符集
什么是字符编码 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果.按照某种规则,将字符存储到计算机中,称为编码 .反之,将存储在计算 ...
- Java之Math类
概述 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单. 基本运算的方 ...
- [译]Vulkan教程(26)描述符池和set
[译]Vulkan教程(26)描述符池和set Descriptor pool and sets 描述符池和set Introduction 入门 The descriptor layout from ...
- 国产处理器的逆袭机会——RISC-V
前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...