做web项目是所经常提到的mvc模式。
MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
如下图:
MVC构架设计
系统将不断增加新的服务功能,从设计之初就必须考虑到支持后继的迭代开发;前期设计必须严格按照MVC思路进行设计开发,符合Mode-2标准,即以jsp做视图表现;以Servlet做业务转发;以后台java对象处理具体业务;使三者在编码时分离,以为后续开发打下良好基础。HTML+JSP+Servlet+JavaBean结构:
n JSP负责生成动态网页
n Servlet负责流程转发至对应的Action实现
n JavaBean(pojo和dao)负责业务数据模型存取
简而言之就是
使得web不同分工有了统一的规范。
同一类的动作就用同类型的后缀标记
如 *.st表示在注册登录时的操作
再用Control servlet解析出来
Control servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
//得到请求的命令名字:解析出*.st请求中*所指代的字符串,即动作名字
String actionName= getActionName(request);
System.out.println("请求的是~"+actionName);
//根据请求的动作名,得到控制器servlet中配置的Action实现类名字
String actionClassName=this.getInitParameter(actionName);
System.out.println("xml中对应的配对类的名字是: "+actionClassName);
//通过工厂类创建命令对象
Action action = ActionFactory.getIns().getAction(actionClassName);
//使用动作对像处理动作,返回结果为处理后要输出的目标页面
String url = action.execute(request, response);
if (url != null){
//输出目标页面
System.out.println("目标url: "+url);
getServletContext().getRequestDispatcher(url).forward(request, response);
}
}catch(Exception ef){
ef.printStackTrace();
//出错时,返回登录页面
response.sendRedirect("login.jsp");
}
}
当然再使用这个中转的时候,就得在xml中标记转化到哪个servlet中去
即
<init-param>
<param-name>register</param-name>
<param-value>Model.register</param-value>
</init-param>
则我们要使用注册功能的话
则发送 register.st
Control servlet就会转发到
寻找类的化用
去实现
public class ActionFactory {
//单实例访问方法
public static ActionFactory getIns(){
if(null==ac){
ac=new ActionFactory();
}
return ac;
}
/**
* 根据具体的Action类名字创建Action对象
* @param actionName:具体的Action类全名
* @return :Action类型对象
*/
public Action getAction(String actionClass) {
Action actionInstance = null;
try {
Class c=Class.forName(actionClass);
actionInstance = (Action) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return actionInstance;
}
//不需要创建对象
private ActionFactory() { }
private static ActionFactory ac=null;
Model.register中去处理。
当然,中转的时候要中转request 和 response不然得不到完整的getParameter
所以我们也就可以创建一个自己action
/**
*系统中的命令处理器接口定义
*/
public interface Action {
/**
* 所有的具体Action实现这个接口
* @param request:请求对象
* @param response:应答对象
* @return :结果页面
*/
public String execute(HttpServletRequest request, HttpServletResponse response);
}
所以就可以简单的用mvc模式写一个在线的问答系统。