MVC总结报告

最近听了两节的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的初步理解,希望大家多多指教,谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值