MVC模式

MVC:

       Model View Controller 模型-视图-控制器,是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,本来是存在于Desktop程序中的,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。

      M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

 

      MVC模式就好比桌面程序中的事件监听模式。强制性地将输入、输出、处理分开,使代码的编写条理更清晰。在刚学习servlet时,随着页面和功能越来越丰富,页面独立,却和servlet高度地耦合在一起,使得程序和页面的联系看起来非常地乱,给继续开发也造成了障碍。

 

      以前当浏览器发送请求给服务器,我们是通过特定的servlet来处理,然后转发到指定页面,在实际中我们要考虑浏览器发送的请求的情况也可能是很复杂的,因为我们不知道用户会怎么做,这样使得代码越来越臃肿。

      MVC模式的实现方式就是定义一个Action接口,不同的请求交由不同的Action来处理,就像事件模式中的事件:

public interface MsgListener {
	
	/**
	 * 响应信息
	 */
	public void onMsg(Msg msg);

}

 

public interface Action {
	/**
	 * 所有的具体Action实现这个接口
	 * @param request:请求对象
	 * @param response:应答对象
	 * @return:结果页面
	 */
	public String excute(HttpServletRequest request,HttpServletResponse response);
}

     

      将浏览器发送的请求转发到一个主控servlet(controlservlet/leaderservlet),主控servlet取得浏览器的请求字符,根据xml里配置的参数来得到对应的处理类的全名ClassName

 

     

<servlet>
    <servlet-name>ControlServlet</servlet-name>
    <servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>
  <!-- Action名字和全名 -->
  	<init-param>
  		<param-name>index</param-name>
  		<param-value>ShowIndexAction</param-value>
  	</init-param>
  	<init-param>
  		<param-name>regist</param-name>
  		<param-value>RegistAction</param-value>
  	</init-param>
  	<init-param>
  		<param-name>login</param-name>
  		<param-value>CheckLoginAction</param-value>
  	</init-param>
  </servlet>

 

       再将ClassName由一个ActionFactory来生成Action对象(即是java的反射机制),由这个Action来处理数据

处理的方式还是不变只是将原来servlet中的代码写到实现Action接口的类中,处理完成后返回一个url地址给主控servlet,由主控servlet来转发。

       主控servlet部处理数据,处理操作由Action类来执行,以后的扩展只要在xml中配置好参数就可以了,这样请求字段与处理的类名对应的方式看起来非常清晰,也降低了代码的耦合度。

你可能感兴趣的:(设计模式,编程,mvc,servlet,浏览器)