- 浏览: 56723 次
- 性别:
- 来自: 长沙
最新评论
-
tian_ya_nan:
真不错 !
文件流操作之C版 -
aogeback:
看到楼主来自湖南大学了
MFC 定时器之妙用 -
seedjyh:
什么ACM,是ICPC吧……
算法分析最小重量机器设计问题 -
zk_sima:
楼主标题党,这也算妙用吗,这叫基础知识普及吧,没看到你用定时器 ...
MFC 定时器之妙用 -
glasslion:
苍山洱海 写道0 1背包?
对啊,明明是经典的01背包问题的 ...
算法分析最小重量机器设计问题
学习MVC已有一段时间,之前对MVC的理解比较凌乱,最近开始着手做web项目,考虑到MVC的重要性,觉得有必要把MVC的知识点综合总结一下,也算是对自己学习的一个检测吧。
MVC是一个设计模式,是model-view-control结构。它强制性的使应用程序的输入、处理和输出分开。MVC应用程序被分成三个核心部件:模型(model)、视图(view)、控制器(controller)。它们各自处理自己的任务。MVC模式的目的就是实现Web系统的职能分工。
Model层:
实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。模型分为数据模型和业务逻辑模型。
View层:
负责展示数据对象给用户的界面层,用于与用户的交互,通常用JSP来实现。是用户看到并与之交互的界面。
Controller层:
是Model与View之间沟通的桥梁,是根据界面反馈处理业务逻辑的控制层,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
简单地说,MVC就是一个HTML/JSP+Servlet+javaBean结构:
HTML/JSP负责生成动态网页;
Servlet负责流程转发至对应胡Action实现
javabean(pojo和dao)负责业务数据模型存取
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。最重要的一点是多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论用户想要Flash界面或是WAP界面,用一个模型就能处理它们。由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码了。
MVC特点:
低耦合性
高重用性和可适用性
较低的生命周期成本
快速部署
可维护性
有利于软件工程化管理
并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
model1与model2的概念:
在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:let)和HTML(),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model1。
Model 2表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model1的不足。
MVC框架结构:
ControlServlet:请求控制器,解析请求中的动作名字,调用动作工厂对象生成的动作对象处理请求,处理后返回的结果即为目标url。
ActionFactory:工厂类,根据请求中的动作名创建命令对象action。
Action:接口,定义所有动作的接口。
具体Action:是实现了Action接口的类,调用其具体实现的方法处理Request或Response对象,返回一个url,再由Servlet负责转发到界面上。
user:用户类,一个最基本的单元,用来实现动作的对象。
Dao:负责连接数据库,将数据库中的数据导入到具体的Action中。
java实例:
1.设计控制器Servlet:
创建一个动态web工程后,首先定义一个ControlServlet,用户的所有请求都提交给这个Servlet,为了便于系统扩展,可以对Servlet的请求路径在web.xml中进行模糊配置。
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>*.netjava</url-pattern>
</servlet-mapping>
ControlServlet:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try{
//得到请求的命令名字,解析出*.netjava请求中*所指代的字符串,即动作名字
String actionName = getActionName(request);
//根据请求的动作名,得到控制器servlet中配置的Action实现类名字
String actionClassName = this.getInitParameter(actionName);
//通过工厂类创建命令对象
Action action = ActionFactory.getIns().getAction(actionClassName);
//使用动作对象处理动作,返回结果为处理后要输出的目标页面
String url = action.execute(request, response);
if(url != null){
//输出目标页面
getServletContext().getRequestDispatcher(url).forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
//出错则输出错误页面
getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
}
}
//解析得到请求中的命令字
protected String getActionName(HttpServletRequest request){
String path = request.getServletPath();
return path.substring(1, path.lastIndexOf("."));
}
ActionFactory:
public class ActionFactory {
private static ActionFactory af = null;
//单实例访问方法
public static ActionFactory getIns(){
if(af == null){
af = new ActionFactory();
}
return af;
}
//根据具体的Action类名字创建Action对象
public Action getAction(String actionClassName){
Action actionInstance = null;
try{
Class c = Class.forName(actionClassName);
actionInstance = (Action)c.newInstance();
}catch(Exception e){
e.printStackTrace();
}
return actionInstance;
}
}
Action接口:
public interface Action {
public String execute(HttpServletRequest request, HttpServletResponse response);
}
具体Action:
public class LoginAction implements Action{
public String execute(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html; charset=UTF-8");
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
//到数据库中查找用户
User user = new UserDao().findUser(userName, userPwd);
//判断用户是否存在
if(userName.equals(user.getName()) &&
userPwd.equals(user.getPwd())){
request.getSession().setAttribute("USER", user);
return "/mainPage.jsp";
}else{
request.setAttribute("ERROR", "账号或密码不正确!");
return "/Login.html";
}
}
}
web.xml配置:
<servlet>
<description></description>
<display-name>ControlServlet</display-name>
<servlet-name>ControlServlet</servlet-name>
<servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>
<init-param>
<param-name>LoginAction</param-name>
<param-value>cn.netjava.action.LoginAction</param-
value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>/*.netjava</url-pattern>
</servlet-mapping>
Login.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>登陆界面</title>
</head>
<body>
<form name="testForm" method="get"
action="LoginAction.netjava">
<br>用户名:<input type="text" name="userName"/>
<br>密 码:<input type="password" name="userPwd"/>
<%
String msg = (String)request.getAttribute("ERROR");
if(msg != null){
out.print("<br>"+msg);
}
%>
<input type="submit" name="submit" value="登陆"/>
</form>
<a href="Register.jsp">注册用户</a>
</body>
</html>
开启服务器,在IE浏览器上测试结果:
http://localhost:8080/MVCTest/Login.jsp
注意:最好是使用IE浏览器,因为有的浏览器并不完全兼容tomcat,可能会出现异常。
在界面上输入用户名和密码,点击登陆按钮,jsp将请求交给Servlet,Servlet再根据提交的动作得到具体的Action对象,然后通过Factory创建命令动作对象,处理Servlet中的动作,返回目标url,即得到登陆成功的界面。
这就是MVC构架的一个大致流程。为系统的扩展为了充分的准备,利用一个Servlet可以实现用户多个不同动作的响应。以上也是我对MVC的一点粗略的理解。
MVC是一个设计模式,是model-view-control结构。它强制性的使应用程序的输入、处理和输出分开。MVC应用程序被分成三个核心部件:模型(model)、视图(view)、控制器(controller)。它们各自处理自己的任务。MVC模式的目的就是实现Web系统的职能分工。
Model层:
实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。模型分为数据模型和业务逻辑模型。
View层:
负责展示数据对象给用户的界面层,用于与用户的交互,通常用JSP来实现。是用户看到并与之交互的界面。
Controller层:
是Model与View之间沟通的桥梁,是根据界面反馈处理业务逻辑的控制层,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
简单地说,MVC就是一个HTML/JSP+Servlet+javaBean结构:
HTML/JSP负责生成动态网页;
Servlet负责流程转发至对应胡Action实现
javabean(pojo和dao)负责业务数据模型存取
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。最重要的一点是多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论用户想要Flash界面或是WAP界面,用一个模型就能处理它们。由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码了。
MVC特点:
低耦合性
高重用性和可适用性
较低的生命周期成本
快速部署
可维护性
有利于软件工程化管理
并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
model1与model2的概念:
在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:let)和HTML(),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model1。
Model 2表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model1的不足。
MVC框架结构:
ControlServlet:请求控制器,解析请求中的动作名字,调用动作工厂对象生成的动作对象处理请求,处理后返回的结果即为目标url。
ActionFactory:工厂类,根据请求中的动作名创建命令对象action。
Action:接口,定义所有动作的接口。
具体Action:是实现了Action接口的类,调用其具体实现的方法处理Request或Response对象,返回一个url,再由Servlet负责转发到界面上。
user:用户类,一个最基本的单元,用来实现动作的对象。
Dao:负责连接数据库,将数据库中的数据导入到具体的Action中。
java实例:
1.设计控制器Servlet:
创建一个动态web工程后,首先定义一个ControlServlet,用户的所有请求都提交给这个Servlet,为了便于系统扩展,可以对Servlet的请求路径在web.xml中进行模糊配置。
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>*.netjava</url-pattern>
</servlet-mapping>
ControlServlet:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try{
//得到请求的命令名字,解析出*.netjava请求中*所指代的字符串,即动作名字
String actionName = getActionName(request);
//根据请求的动作名,得到控制器servlet中配置的Action实现类名字
String actionClassName = this.getInitParameter(actionName);
//通过工厂类创建命令对象
Action action = ActionFactory.getIns().getAction(actionClassName);
//使用动作对象处理动作,返回结果为处理后要输出的目标页面
String url = action.execute(request, response);
if(url != null){
//输出目标页面
getServletContext().getRequestDispatcher(url).forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
//出错则输出错误页面
getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
}
}
//解析得到请求中的命令字
protected String getActionName(HttpServletRequest request){
String path = request.getServletPath();
return path.substring(1, path.lastIndexOf("."));
}
ActionFactory:
public class ActionFactory {
private static ActionFactory af = null;
//单实例访问方法
public static ActionFactory getIns(){
if(af == null){
af = new ActionFactory();
}
return af;
}
//根据具体的Action类名字创建Action对象
public Action getAction(String actionClassName){
Action actionInstance = null;
try{
Class c = Class.forName(actionClassName);
actionInstance = (Action)c.newInstance();
}catch(Exception e){
e.printStackTrace();
}
return actionInstance;
}
}
Action接口:
public interface Action {
public String execute(HttpServletRequest request, HttpServletResponse response);
}
具体Action:
public class LoginAction implements Action{
public String execute(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html; charset=UTF-8");
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
//到数据库中查找用户
User user = new UserDao().findUser(userName, userPwd);
//判断用户是否存在
if(userName.equals(user.getName()) &&
userPwd.equals(user.getPwd())){
request.getSession().setAttribute("USER", user);
return "/mainPage.jsp";
}else{
request.setAttribute("ERROR", "账号或密码不正确!");
return "/Login.html";
}
}
}
web.xml配置:
<servlet>
<description></description>
<display-name>ControlServlet</display-name>
<servlet-name>ControlServlet</servlet-name>
<servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>
<init-param>
<param-name>LoginAction</param-name>
<param-value>cn.netjava.action.LoginAction</param-
value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>/*.netjava</url-pattern>
</servlet-mapping>
Login.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>登陆界面</title>
</head>
<body>
<form name="testForm" method="get"
action="LoginAction.netjava">
<br>用户名:<input type="text" name="userName"/>
<br>密 码:<input type="password" name="userPwd"/>
<%
String msg = (String)request.getAttribute("ERROR");
if(msg != null){
out.print("<br>"+msg);
}
%>
<input type="submit" name="submit" value="登陆"/>
</form>
<a href="Register.jsp">注册用户</a>
</body>
</html>
开启服务器,在IE浏览器上测试结果:
http://localhost:8080/MVCTest/Login.jsp
注意:最好是使用IE浏览器,因为有的浏览器并不完全兼容tomcat,可能会出现异常。
在界面上输入用户名和密码,点击登陆按钮,jsp将请求交给Servlet,Servlet再根据提交的动作得到具体的Action对象,然后通过Factory创建命令动作对象,处理Servlet中的动作,返回目标url,即得到登陆成功的界面。
这就是MVC构架的一个大致流程。为系统的扩展为了充分的准备,利用一个Servlet可以实现用户多个不同动作的响应。以上也是我对MVC的一点粗略的理解。
发表评论
-
接口入参注解aop验证
2017-03-23 14:52 2495为什么要入参验证 系统之间在进行接口调用时,往 ... -
jsonp跨域及rest接口实现
2017-02-04 18:01 2038jsonp是json的一种模式,专门用来解决前端跨域请 ... -
javascript实现图片瀑布流
2015-03-26 22:30 546瀑布流主要就是指数据按照瀑布方式自上而下加载,主要由于高度 ... -
数据库持久层框架iBatis、myBatis、Hibernate对比
2015-03-22 19:10 3403在 java 应用的数据库 ... -
页面跳转方式
2015-03-22 18:14 677web前端开发中,经常使用到页面跳转,下面是使用过的几种常用的 ... -
html中的input文本框禁止输入问题
2015-01-04 19:24 1693我们在进行前端页面开发时,经常会遇到输入框禁止输入的问 ... -
httpclient请求方式下的泛型json转换问题
2014-11-26 18:25 3382我们在采用httpclient方式进行服务调用时,如果服务 ... -
modelAndView在sping MVC框架下的使用
2014-11-25 21:26 1545在 spring 框架的控制器中,我们经常在事件处理时 ... -
jquery中的live事件
2014-08-20 19:51 976很久没写了,本来只是学到一点小东西,觉得没必要写的,但是感 ... -
java String类型各种转化
2013-03-07 19:58 1166作为一名底层开发工 ... -
Java 内存输入流问题
2012-12-06 15:36 1100不论Java与C相比有多少优点,至少在输入输出流这点上还是 ... -
http工作原理
2012-12-01 10:47 821温故知新。 一、http协议:通过可靠的TCP连接,让we ... -
http请求响应码分析
2012-11-28 18:14 1155工作中经常遇到不同 ... -
JSP学习——JSP页面重用
2012-09-19 00:07 721.何为页面重用: Jsp页面在一个web应用中,主要 ... -
JSP学习——JSP隐含对象详解
2012-09-19 00:06 311.jsp隐式对象简介 JSP 架 ... -
JSP学习——JSP基础入门
2012-09-19 00:05 301.jsp简化入门 1.jsp基础 ... -
hibernate学习小结
2010-12-16 22:34 1283学习之余,把hibernate的知识点稍作小结。我们知 ... -
MFC 定时器之妙用
2010-12-11 18:27 2961现在有这么一个问题,在VC编程中,如果要每隔一段时间去 ... -
文件流操作之C++版
2010-12-03 01:28 2097昨天简单介绍了一下C ... -
文件流操作之C版
2010-12-02 01:10 2048最近这段时间因为 ...
相关推荐
接下来,我们将重点关注MVC结构的运用。在模型层,我们需要创建一个或多个类来表示书籍、购物车、订单等实体,这些类将处理与数据库交互、计算总价等逻辑。视图层则可以通过JSP页面呈现书籍列表、购物车内容以及结算...
### MVC基础总结 #### 一、MVC概述 1. **MVC架构** - **MVC基本概念** - **模型(Model)**: 模型是应用的核心组件,负责存储和管理数据,以及处理业务逻辑。它直接与数据源进行交互,并确保数据的有效性和一致性...
"MVC结构在Ajax客户端开发中的应用研究" MVC 结构是软件开发中的一种常见的设计模式,它将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller)。其中,模型负责存储和管理数据,视图负责显示...
3. 分模块的结构有利于团队合作开发,提高开发效率。 然而,MVC模式也存在一些缺点: 1. M、V、C三者难以清晰划分,尤其在小型项目中,过度的划分会增加开发复杂性; 2. 细化划分带来的副作用是工作目录和代码文件...
总结来说,【基于MVC结构的合同管理】是一个利用C#和MVC模式构建的合同管理系统,通过合理的分层和组件化设计,实现了高效的数据管理和用户交互。这种系统设计思路对于初学者理解和实践软件工程的最佳实践,尤其是C#...
在这个项目中,"一个标准的MVC结构的SSI"指的是使用Struts2、Spring和iBatis(简称SSI)框架组合实现了一个完整的MVC应用。下面将详细阐述这三个框架及其在MVC中的作用。 1. **Struts2**:Struts2是一个基于MVC设计...
总结来说,Java Web的MVC体系结构为开发人员提供了一个高效、灵活的框架,用于构建复杂、可扩展的Web应用程序。通过理解并熟练运用MVC模式,开发者可以更好地组织代码,提高开发效率,并确保项目的长期可持续性。
在这个学习记录总结中,我们将深入理解Spring MVC的核心概念、主要组件以及其工作流程。 1. Spring MVC 概述 Spring MVC 是Spring框架的一部分,它基于Spring IoC(Inversion of Control,控制反转)容器,简化了...
### MVC总结大全——深入解析Utils工具类、Entity实体类与DAO层Service层知识 #### 一、Utils工具类知识——请求和响应 在Java Web开发中,`Utils`工具类通常用于封装一些常用功能,如数据库操作、网络请求处理等...
总结来说,基于MVC结构的电子病例系统通过清晰的角色分工和模块化设计,实现了高效、安全的医疗服务流程,为医疗信息化提供了可靠的平台。学习这样的系统有助于理解MVC模式在实际项目中的应用,以及如何设计和实现...
总结,`JSPMVC结构注册登陆模块`提供了一个基础的框架,帮助开发者理解MVC模式在Web应用中的运用,以及如何利用MySQL、DAO和服务层处理用户注册和登录。通过学习和实践这个模块,初学者可以掌握核心的Web开发技能,...
### 基于ASP.NET MVC 3的企业应用项目总结 #### 一、项目背景与概况 本项目是一次采用ASP.NET MVC 3框架构建的企业级应用程序的开发经历。项目历时约三个月,期间不仅实现了功能需求,还克服了诸多技术挑战。作为...
**项目概述** ...**总结** 这个练手项目旨在帮助开发者熟悉MVC模式和三层架构,以及JSP和Servlet在实际项目中的应用。通过完成这个项目,可以提升对Java Web开发的理解,为更复杂的Web应用打下基础。
### Spring MVC的核心概念与应用详解 ...通过以上介绍可以看出,Spring MVC不仅提供了一个结构化的开发框架,还拥有丰富的配置选项和灵活的功能扩展点,这些都使得Spring MVC成为Java Web开发领域中不可或缺的一部分。
例如,对于非常复杂的大型项目,它的结构可能显得过于简单,不足以应对所有需求。另外,虽然它提供了一种标准的通信方式,但在某些情况下,过度依赖Notification可能导致过多的事件监听器,从而影响性能。 在阅读...
一、Spring3 MVC结构 1. **DispatcherServlet**:作为Spring MVC的前端控制器,它是所有HTTP请求的入口点。DispatcherServlet负责调度请求到相应的处理器,处理后返回响应。 2. **Controller**:控制器是业务逻辑...
这个框架是基于Model-View-Controller(MVC)设计模式的,它提供了一种结构化的解决方案,使得开发者可以更有效地组织和管理应用程序的组件。 在PureMVC中,MVC的三个主要组成部分被抽象为类: 1. **Model**(模型...
### JAVA MVC结构详解 #### 一、MVC架构概述 MVC(Model-View-Controller,模型-视图-控制器)是一种广泛应用于Browser/Server结构的WEB应用开发中的设计模式。这种模式的主要目的是将应用程序的业务逻辑、数据...
总结来说,这个Java聊天系统通过采用MVC设计模式,实现了高效、可维护的代码结构。从模型层处理业务逻辑,到视图层展示用户界面,再到控制器层协调两者,整个系统展现出清晰的层次和职责划分,为开发者提供了良好的...
总结来说,Mvc4.0的三层结构框架通过明确的角色分工,提高了代码的可读性、可维护性和可扩展性。这种架构设计允许开发者专注于各自的领域,降低了复杂性,促进了团队协作,是构建大型企业级Web应用的理想选择。在...