最近听了两节的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编程实训。MVC编程实训。
【2018最新】spring,mvc实训报告-优秀word范文 (14页).docx【2018最新】spring,mvc实训报告-优秀word范文 (14页).docx【2018最新】spring,mvc实训报告-优秀word范文 (14页).docx【2018最新】spring,mvc实训报告-优秀...
对Spring MVC的简单总结,还有不完善的地方。
spring mvc 深入总结,文章是转载拷贝而来,谢谢原作者!
javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用
NULL 博文链接:https://dbzhuan.iteye.com/blog/542712
1.1.9 asp.net mvc 3特性总结 10 1.2 创建asp.net mvc 3应用程序 10 1.2.1 创建asp.net mvc 3应用程序的软件要求 11 1.2.2 安装asp.net mvc 3 11 1.2.3 创建asp.net mvc 3应用程序 12 1.2.4 new asp.net mvc 3 ...
关于SpringMVC的基础知识点总结,SpringMVC参数绑定6种方式,使用不同的方式跳转页面,后台处理json格式的数据,SpringMVC框架简介,SpringMVC的入门案例等
基于Spring+Mybatis在线点餐系统源码+数据库+课程总结报告毕业设计项目,采用Spring MVC模型,代码注释完善,程序可读性强,控制流程清晰,高分毕业设计项目
使用环境:MyEclipse/Eclipse + Tomcat + MySQL。...使用技术:Spring MVC + Spring + MyBatis 或 JSP + Servlet + JavaBean + JDBC。 演示地址:https://ymjin.blog.csdn.net/article/details/121012207
基于MVC用JSPServlet实现JPetStore实验报告+使用AJAX和jQuery改善用户体验实验报告
实现环境表1-1. 实现环境环境声明数据库管理系统SQL Server2014 Express应用的设计语言JSPIDEEclipse J2EE服务器tomca
Javaweb基于MVC的个人网上银行系统源码+设计报告+sql数据库.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、...
1.1 标识 1.2 系统概述 1.3 文档概述 4.1 软件研制过程概述
通过本次实验,要求学生掌握MVC分层原理解决问题的基本思路和方法,增强学生的动手与实践能力。本实验实现了在线考试管理系统,包括七个大模块考生管理、单位管理、科目管理、题库管理、成绩管理、用户管理、考试...
清爽夏日九宫格源码。运行环境,eclipse,sql server,tomcat7.0 数据库默认用户sa密码123
培养自己WEB应用设计与开发的能力,综合应用WEB开发中js技术、Servlet与JSP,以及JavaBean、自定义标签等技术,结合后台数据库管理,并且设计一套关于停车时间计算的收费标准,设计并实现基于MVC架构的停车场管理...
html,css,jsp相关知识总结,便于进行html,css,jsp的学习
3. 对Java-swing的知识有一定的了解,需要学习总结应用相关知识或者想找项目练手 实现的功能: 实现功能包括学生信息的新增、编辑、查看、删除;班级信息管理、包括班级信息的新增、编辑、查看、删除。其中学生、...
乐成科技实训总结 实训内容 1、程序员应具备的知识和素质 2、企业中编码规范 3、基本知识点讲解,mvc设计模式,和框架的讲解 4、项目实战