最近听了两节的MVC讲解,特在此做一个小小的个人总结以便日后三省。
MVC(Model-View-Control,模型—视图—控制器模式),这样一说,还是略显抽像的。因为我们是在做一个简单的Blog,所以总结自然而然也是跟它相关而谈的。简单而论吧,Model模型就是我们后台的JavaBean(例如对数据table的设定与操作(pjo与dao类)),View视图就相当于我们的游览器的Jsp页面,所以控制器Control自然就是我们的Servlet了,这样MVC就把它们进行了一个简单的分类,方便分配自己的工作。
以上都只是一些定义罢了,真正的用处还没讲到的。我们先从我们可以看到的的地方讲起吧,JSP自然是负责生成一些从数据库抽出来后显示的动态页面。动态页面可以简单而粗略的理解为,不同的用户登陆会得到相同结构而不同容内的页面。当然们在页面进行相关操作时,可能会发出信息请求,这时请求会发送到Servlet,在MVC里面只有一个Servlet,它在Web里面是采用了通配符*去进行模糊匹配的比如:
<servlet>
<servlet-name>Constorl</servlet-name>
<servlet-class>cn.netjava.Servlet.Constorl</servlet-class>
动态参数,是一对名值对
<init-param>
<param-name>LoginAction</param-name>//类名
<param-value>cn.netjava.action.LoginAction</param-value>//类所在路径
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Constorl</servlet-name>
<url-pattern>*.lsk</url-pattern> 这里的*就是起模糊匹配的,其中lsk是只是一个任意认识名,像我们特定的一个页面要提交给特定的Servlet的进候,我们只要在写Servlet的地方写上类似于LoginActio.lsk这样的Servlet名字即可。
以上在Web.xml的配置都是为让所有的###.lsk Servlet找到*.lsk这个通往你自己在后台定义的Servlet做准备的。下面贴出一个我简单的Servlet代码:
package cn.netjava.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.netjava.action.Action;
import cn.netjava.action.ActionFactory;
/**
* Servlet implementation class Constorl
*/
public class Constorl extends HttpServlet {
private static final long serialVersionUID = 1L;
public Constorl() {
super();
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到所请求的Servlet路径,例如在这里我测试是请求的登陆Servlet那么完整路径将是:/LoginAction.lsk
String path = request.getServletPath();
//下面的思路就是根据不同的请求Servlet路径去结取其中的动作名(像LoginAction.lsk动作名就是LoginAction,然后去一个动作工厂去生产相关的操作类,从而得到相关的实例,最后返回用户请求的页面。
int index = path.indexOf(".");//取得LoginAction.lsk中间的"."的下标
String name = path.substring(1, index);//结取动作名LoginAction
String className = this.getInitParameter(name); //从Web.xml获取对应的类名
//根据类名得到相应的Action的对象
Action act = ActionFactory.getSingleObject().getAction(className);
//传入当前request,response对象,并反回用户请求页面
String pagePath = act.exctue(request, response);
//传发
request.getRequestDispatcher(pagePath).forward(request, response);
}
}
package cn.netjava.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//动作接口,其它所有动作类都必须实现的接口
public interface Action {
public String exctue(HttpServletRequest request,HttpServletResponse response);
}
package cn.netjava.action;
//动作工作类,生产相应的动作类和实例
public class ActionFactory {
private static ActionFactory actionFactory = null;
//私有构造器,采用单实例方法
private ActionFactory (){
}
//定义成静态单实例方法,直接用类名调用
public static ActionFactory getSingleObject(){
if( null ==actionFactory){
actionFactory = new ActionFactory();
}
return actionFactory;
}
//获得对应的实例
public Action getAction(String className){
Action act = null;
try{
//反射机制,以类名,反射到一个类上面去
Class cl = Class.forName(className);
//得到实例
act = (Action) cl.newInstance();
}catch(Exception ef ){
ef.printStackTrace();
}
return act;
}
}
package cn.netjava.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//负责处理登陆的相关信息的Servlet
public class LoginAction implements Action{
public String exctue(HttpServletRequest request,
HttpServletResponse response) {
//简单的对用户名与密码进行匹配,如果符合则反回主页面,否则,去到错误页面
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
if("netjava".equals(userName) && "netjava".equals(userPwd)){
return "main.html";
}
return "error.jsp";
}
}
嗯,最后再做一个简单的总结吧,其实MVC的流程并不难。打个比如吧,就相当于一下订菜到上菜的流程,JSP页面就相当于我们的菜单(可见的),而在页面的提交就相当于我们点菜,而我们的Servlet自然就相当于我们的服务员了(所有的订单都要通过这个服务员),然后这个服务员就会拿去让厨师做出相应的菜(这不就是相当于Servlet根据用户请求的路径最终得到相应的类实例么?),最后上菜了!(也就是返回的JSP页面)。这就是我对MVC的初步理解,希望大家多多指教,谢谢。
分享到:
相关推荐
在本篇MVC编程实训实验报告中,我们将深入探讨如何运用MVC(Model-View-Controller)模式来实现文件的上传、分割与合并功能。MVC模式是一种软件设计模式,常用于构建Web应用程序,它将应用程序的数据模型、用户界面...
在本文中,我们将对Spring MVC的架构和DispatcherServlet的配置进行总结。 Spring MVC架构 Spring MVC的架构可以分为以下几个部分: 1. DispatcherServlet:作为Spring MVC的核心组件,负责处理所有的HTTP请求。 ...
根据给定的文件信息,以下是对Spring MVC实训报告中的关键知识点进行详细解析: ### Spring MVC 实训报告概览 #### 引言 - **现代化管理需求**:随着信息技术的快速发展和计算机的广泛应用,个人信息管理变得日益...
Spring MVC 是一款广泛使用的 Java Web 开发框架,它为构建基于模型-视图-控制器(MVC)架构的应用程序提供了一种简洁而有效的方式。Spring 3.0.5 版本的 Spring MVC 提供了丰富的特性和优化,使得开发者能够快速...
JAVAEE期末项目总结报告 本报告总结了JAVAEE期末项目的实现过程,涵盖了电子管理系统的设计和实现。该系统主要由两个模块组成:登录模块和电子管理模块,其中电子管理模块中有增加、删除、修改、查询模块。报告详细...
**总结** MVC模式通过将应用分为模型、视图和控制器三个部分,有效地组织了代码结构,提高了软件的可维护性和可扩展性。理解和掌握MVC模式对于任何Web开发者来说都是至关重要的,它能帮助开发者构建出更健壮、更...
【实习专题报告与总结报告】 实习是每个IT专业学生必经的重要阶段,它不仅提供了将理论知识应用于实际工作中的机会,也是个人技能提升和职业素养塑造的关键环节。本专题报告和总结报告聚焦于一个基于SSH2(Struts2...
总结来说,这个实训项目旨在通过实现个人信息管理系统,让学生掌握JSP基础、MVC模式和J2EE架构的实际运用,以及软件开发的完整流程。系统的设计和实现不仅提升了学生的编程技能,还强调了项目管理的重要性,以适应...
总结来说,这个基于MVC的JSP网上商城毕业设计是一个全面的学习资源,涵盖了Web开发中的多个关键知识点,包括MVC设计模式、JSP和JavaBean技术、数据库设计、用户界面设计以及安全策略等。对于想要学习和掌握Web开发的...
总结起来,MVC下使用RDLC报表需要对MVC架构、报表设计和数据绑定有深入理解。通过将RDLC报表与MVC相结合,开发者可以轻松地在Web应用中实现复杂的报表功能,提供数据可视化,帮助用户分析和决策。在实际开发中,确保...
总结,本课设项目不仅涵盖了JSP的基础应用,还深入探讨了MVC模式的运用,结合Struts框架构建了一个实际的网页管理系统。通过这个项目,学生可以全面了解Web开发的基本流程,提升对MVC模式的理解,同时锻炼数据库操作...
总结,电子商务和MVC架构是当今信息技术领域的热门话题。通过深入研究,你可以为毕业设计提供一个坚实的基础,不仅理解电子商务的运作机制,还能掌握现代Web应用开发的关键技术。这份开题报告应当包含对这两个主题的...
总结:这个实训项目旨在通过MVC三层架构和J2EE技术,构建一个高效、用户友好的个人信息管理系统。系统功能涵盖用户登录、个人信息管理、通讯录、日程和文件管理,各模块分工明确,流程规范,体现了良好的软件工程...
实验报告部分则会深入分析每个实验的实现过程,遇到的问题及解决方案,以及对整个开发流程的反思和总结。通过这个教程,你不仅可以掌握Java EE开发的基本技能,还能了解到实际项目中可能遇到的问题和解决策略,为你...
总结来说,"workflow-in-mvc-simple-demo"是一个演示如何在.NET MVC应用中利用Windows Workflow Foundation的实例。通过结合MVC的分层架构和WF的流程管理能力,我们可以构建出更强大、更易于维护的业务系统。这个...
总结起来,这个基于jsp的纯mvc的个人博客管理系统展示了如何使用MVC模式组织Web应用,有效地分离了业务逻辑、数据处理和用户界面,实现了博客的增删改查等功能,尽管界面可能较为简单,但其核心功能已经齐全。...
在`MySchool`项目中,视图可能包括显示学生列表的网页,编辑学生信息的表单,以及各种报告和统计图表。 **3. 控制器(Controller)层** 控制器层作为模型和视图之间的桥梁,处理用户的请求,调用模型层的方法来...
总的来说,OLMS-PDSR-1.0项目开发总结报告详尽地记录了基于MVC设计模式的在线图书馆管理系统开发的全过程,展示了如何利用这种设计模式来构建一个分层、解耦的系统,同时注重软件质量的保证和管理,以实现功能完善、...
【Java MVC框架任务书】是一份详细的实验指导文档,旨在帮助学习者深入理解和掌握Java MVC框架的应用。MVC(Model-View-Controller)模式...同时,实验报告的撰写有助于提高问题分析和总结能力,加深对理论知识的理解。