基础数据准备好之后,就轮到action 和 actionform 出场了 (struts 的核心组件)。
mvc框架中control 在这里就是action,充当控制器的action在请求发送发来时可以做出相应的处理然后转发到(或者重定向)对应的页面,这样通过控制器这个中介者,当模型层的数据发生了改变之后,视图层将自动改变其内容,这里也蕴含了设计模式中的观察者模式和中介者模式。
我写的简单action如下:
- <span style="font-family:System;font-size:13px;">import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public abstract class Action {
- public abstract ActionForward execute(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception ;
- }</span>
但是你会发现这个action里面只有一个方法,所有的处理只能在这一个方法里面写,跟普通的servlet相比强不到哪里去,于是我模仿struts1.X写了个dispatcheraction 这个action继承了抽象类action(体现了面向对象思想的小优点),运用反射思想实现了一个更加灵活的控制器;如下:
- <span style="font-family:System;font-size:13px;">import java.lang.reflect.Method;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class DispatcherAction extends Action {
-
- @Override
- public ActionForward execute(ActionForm form, HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- //1、获取界面上传递的method参数
- String methodName = request.getParameter("method");
-
- if (null == methodName || "".equals(methodName)) {
- return this.unspecified(form, request, response);
- }
-
- //2、根据method参数,调用自身的对应方法
- Class c = this.getClass();
-
- Method method = c.getMethod(methodName, new Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class});
-
- return (ActionForward)method.invoke(this, new Object[]{form,request,response});
-
- }
-
- public ActionForward unspecified(ActionForm form, HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- return null;
- }
-
- }</span>
我们可以通过界面传来的method参数动态选择调用对应的方法,反射真带感;当没有method参数的就默认调用unspecified方法。
c.getMethod(methodName, new Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); 这行代码就要求我们当自己写一个要被调用的方法时候参数列表比喻和这里的参数一样,只有这样反射的时候才能获取到对应的方法。
你或许在上面又看到了一个不知道的类:actionforward。
每当控制层拿到模型层的数据的时候,根据需要要选择转发或者重定向,但是需要返回相同的类型哦;所以我们就把这两种情况封装到一个类里面。
如下:
- public class ActionForward {
-
- //请求或者重定向的URI
- private String uri;
-
- //是否转发。为TRUE就转发,为FALSE就是重定向
- private boolean isForward;
-
- public ActionForward(String uri) {
- this.uri = uri;
- isForward = true;
- }
-
- public ActionForward(String uri, boolean isForward) {
- this.uri = uri;
- this.isForward = isForward;
- }
-
-
- public String getUri() {
- return uri;
- }
-
- public void setUri(String uri) {
- this.uri = uri;
- }
-
- public boolean isForward() {
- return isForward;
- }
-
- public void setForward(boolean isForward) {
- this.isForward = isForward;
- }
-
-
- }
当然这时候还缺少一个界面数据封装组件,大家应该也知道就是actionform(呵呵,struts1.X的 代表作,曾被无数高手鄙视,它的存在催生了struts2.0的诞生)如下:
- /**
- * 少了一个reset方法和一个validator方法
- *
- */
- public abstract class ActionForm {
-
- }
本人偷了个懒,没有将reset方法和 validator方法写到里面去,所以写的十分的简单,当然本身这个类也十分的简单,里面全是一个界面参数。
但是现在大家仍然没感觉到我这个MVC框架到底怎么个回事,是的之前全是在做准备工作,下面的就是核心的命令控制器 RequestProcessor的 实现,它会将整个MVC框架的流程展现得淋漓尽致!
分享到:
相关推荐
【标题】:“自己写的一个MVC框架” 【描述】:“放寒假的时候写的一个像struts基本功能的框架!!!” 这个描述中提到的“MVC框架”是指模型-视图-控制器(Model-View-Controller)架构模式,这是一种广泛应用于...
这个“自己利用mvc写的框架”是一个个人实现的MVC框架,它借鉴了Struts的一些设计思想。学习和研究这个框架可以帮助开发者巩固MVC模式的理解,提高对Struts框架的掌握,并锻炼实际的软件开发能力。通过分析框架的源...
为了实现数据库操作的独立性,PHP MVC框架通常会提供一个数据库抽象层,如PDO或Doctrine。这层抽象允许我们使用统一的API来执行SQL查询,而无需关心底层使用的具体数据库系统。 **模板引擎(Template Engine)**: ...
自己写的MVC框架,功能完善,用来写一些小项目是绰绰有余了。实现了MVC三层架构,支持模块化设计,应用目录自动生成,命名空间自动加载到类,url mode,url路由等功能。感兴趣的朋友可以下载回去,一起探讨一起学习...
在这个标题为“MVC框架源代码(自己写的)”的压缩包中,我们推测作者分享的是他自己实现的一个JavaScript MVC框架的源代码,这可能是对经典MVC模式的一种个人化实现。 **1. Model(模型)** 模型层是MVC的核心,它...
微信开发php+mvc框架
**标题:“写你自己的MVC框架”** 在IT领域,MVC(Model-View-Controller)框架是一种广泛使用的软件设计模式,尤其在Web应用开发中。这个标题暗示我们将探讨如何从头开始构建一个MVC框架。MVC模式将应用程序分为三...
总的来说,这个PHP MVC框架为PHP初学者提供了一个学习和实践的平台,不仅可以了解MVC模式的基本原理,还能熟悉数据库操作和前端开发技术。通过深入研究和实践,开发者可以逐渐掌握PHP Web开发的核心技能。
在这个实例中,我们探讨的是一个基于J2EE平台的MVC框架的应用,它具有简洁的源码和清晰的注释,便于学习和理解。 **一、MVC模式解析** 1. **Model(模型)**:模型层负责处理业务逻辑和数据操作。在这个框架中,...
**描述** "使用PHP开发自己的MVC框架,站点其实很简单,一个ToDo程序" 提示我们,这里将涉及如何用PHP构建一个简单的MVC框架,并通过一个Todo应用来演示其功能。Todo应用通常是一个基础的待办事项列表,用于展示基本...
在这个"MVC框架自己写的一个新闻发布系统"中,我们看到的是一个使用PHP语言实现的MVC架构,用于创建一个包含前台展示和后台管理功能的完整新闻发布平台。 1. **MVC模式解析** - **Model(模型)**:负责处理数据和...
总结来说,这个简单的MVC框架例子展示了如何使用JavaBean、Servlet和JSP来构建一个基本的Web应用。这种架构有助于分离关注点,使代码更易于维护和扩展。在实际项目中,更复杂的MVC框架,如Spring MVC,会提供更丰富...
10. ** Areas**:对于大型项目,ASP.NET MVC的Areas功能可以帮助组织代码,将一个大型应用划分为多个功能区域,每个区域有自己的控制器、视图和模型。 通过学习和掌握这些核心概念,开发者能够有效地利用ASP.NET ...
本项目是用C++实现的一个简单的MVC框架,名为MVCDemo,旨在帮助开发者理解MVC设计模式的基础概念。 首先,我们来详细解释MVC的三个组成部分: 1. Model(模型):模型层是应用的核心,它负责管理数据和业务逻辑。...
例如,可以创建一个UploadService用于处理文件上传,一个WatermarkService处理水印添加,以及一个ThumbnailService用于生成缩略图。这些服务可以通过依赖注入的方式被Controller或其他组件使用。 为了实现这些功能...
https://blog.csdn.net/weixin_39934453/article/details/132242216PHP傻瓜也能搭建自己框架,手把手搭建一个mvc框架PHP最简单自定义自己的框架(一) PHP最简单自定义自己的框架创建目录结构(二) PHP最简单自定义...
"山寨的一个MVC框架"可能指的是一个开发者或团队模仿已有知名MVC框架,如Spring MVC、Struts2或JSF,自行创建的一个简化版或定制化的框架。这样的框架通常旨在满足特定项目需求,或者作为学习和理解MVC设计模式的...
在创建新的视图时,可以选择关联一个母版页,这样子页面就可以继承母版页的布局,只需要关注自己的内容部分,提高了开发效率和页面一致性。 在实际应用中,.NET MVC框架支持使用Razor视图引擎来编写视图。Razor语法...