- 浏览: 2183479 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
MVC框架已经使用的非常广泛了,现在我也自制一个MVC框架来加深我对MVC框架的理解。
首先MVC共分三个内容,M(Model) V(View) C(Controller)。
M:主要就是一些Action,用来处理业务内容和数据库的操作。
V:视图,用于向用户显示内容。
C:所有的请求由这里来管理,进行分配。分发业务请求。
1.在web.xml文件中加入一个servlet,去拦截所有的满足条件请求,这些请求由控制键(C)来进行分发管理。
其中具有自制mvc框架的配置文件:mvc-config.xml,当做参数设置在servlet中。
2.controller文件:
Controller中使用了ConfigHelper类来加载缓存。
3.ConfigHelper文件:
用来加载配置文件。
4.ActionFactory:
ActionFactory的工厂类。用来创建Controller。
5.ActionPackage:
Controller相关信息的包装类。
运行起来之后在浏览器上输入:http://localhost:8080/mvc/main.do?function=hello
然后会在控制台输出一句话:"this is hello!!!",这里没有连接到页面,你们可以去扩展此mvc框架
首先MVC共分三个内容,M(Model) V(View) C(Controller)。
M:主要就是一些Action,用来处理业务内容和数据库的操作。
V:视图,用于向用户显示内容。
C:所有的请求由这里来管理,进行分配。分发业务请求。
1.在web.xml文件中加入一个servlet,去拦截所有的满足条件请求,这些请求由控制键(C)来进行分发管理。
<servlet> <description>DispatchServlet</description> <display-name>DispatchServlet</display-name> <servlet-name>DispatchServlet</servlet-name> <servlet-class>com.iaiai.mvc.controller.DispatchServlet</servlet-class> <init-param> <description>Configuration File</description> <param-name>configFile</param-name> <param-value>WEB-INF/mvc-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatchServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
其中具有自制mvc框架的配置文件:mvc-config.xml,当做参数设置在servlet中。
2.controller文件:
Controller中使用了ConfigHelper类来加载缓存。
package com.iaiai.mvc.controller; import java.io.IOException; import java.lang.reflect.Method; import java.util.Map; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.iaiai.mvc.action.ActionPackager; import com.iaiai.mvc.config.ConfigHelper; import com.iaiai.mvc.util.RexUtil; /** * * <p> * Title: DispatchServlet.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-14 * </p> * * @author 丸子 * @version 0.0.1 */ public class DispatchServlet extends HttpServlet { private static final long serialVersionUID = 1131523345611250389L; private static final String CONTENT_TYPE = "text/html;charset=UTF-8"; private Map<String, ActionPackager> actionsMap; /* * public static String DataURL=null; public static String MarkURL=null; * public static String PastePicsURL=null; */ /** * Constructor of the object. */ public DispatchServlet() { super(); } /** * Initialization of the servlet. <br> * * @throws ServletException * if an error occurs */ public void init() throws ServletException { // read config values from the web.xml // 通过ServletContext取得工程的绝对物理路径 ServletContext sct = getServletContext(); String realPath = sct.getRealPath("/"); // 通过ServletConfig实例取得初始化参数configFile ServletConfig config = this.getServletConfig(); String CfgFile = config.getInitParameter("configFile"); // 组合配置文件全物理路径 CfgFile = realPath + CfgFile; // 创建ConfigHelper对象,初始化actionsMap ConfigHelper configHelper = new ConfigHelper(CfgFile, config); actionsMap = configHelper.getActionsMap(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log actionsMap = null; } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); // 取得请求的URL String reqURL = request.getServletPath(); // 取得模式匹配字符串,取得请求后缀 String patternStr; if (reqURL.contains("?")) { patternStr = RexUtil.getMatchedString("([.])(.*)?", reqURL); } else { patternStr = RexUtil.getMatchedString("([.])(.*)$", reqURL); } // 取得请求的Action名称 String actionName = RexUtil.getMatchedString("/(.*)[.]" + patternStr, reqURL); ActionPackager actionPackager = actionsMap.get(actionName); // 如果请求的Action为空,则返回404错误 if (actionPackager == null) response.sendError(HttpServletResponse.SC_NOT_FOUND); else { String methodName = request.getParameter(actionPackager .getMethodName()); // 执行Action中的方法 Class<?> actionClass = actionPackager.getActionClass(); Object actionObj = actionPackager.getActionObj(); try { Method method = actionClass.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); method.invoke(actionObj, request, response); } catch (NoSuchMethodException e) { // 如果请求方法不存在,抛出404错误 response.sendError(HttpServletResponse.SC_NOT_FOUND); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
3.ConfigHelper文件:
用来加载配置文件。
package com.iaiai.mvc.config; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.iaiai.mvc.action.Controller; import com.iaiai.mvc.action.ActionFactory; import com.iaiai.mvc.action.ActionPackager; /** * * <p> * Title: ConfigHelper.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-14 * </p> * * @author 丸子 * @version 0.0.1 */ public class ConfigHelper { public static Log log = LogFactory.getLog(ConfigHelper.class); private ActionFactory actionFactory; private Document document; /** * 构造函数,加载配置文件,初始化document * * @param configFile */ public ConfigHelper(String configFile, ServletConfig servletConfig) { log.info("加载mvc配置文件..."); try { File file = new File(configFile); SAXReader reader = new SAXReader(); document = reader.read(file); } catch (DocumentException e) { log.error("配置文件不存在或格式不正确"); e.printStackTrace(); } log.info("初始化ActionFactory..."); if (servletConfig == null) { try { throw new Exception(); } catch (Exception e) { log.error("ServletConfig参数为Null,ActionFactory初始化失败"); e.printStackTrace(); } } else { actionFactory = new ActionFactory(servletConfig); } } public Map<String, ActionPackager> getActionsMap() { log.info("读取mvc配置文件,装载至缓存中..."); Map<String, ActionPackager> actionsMap = new HashMap<String, ActionPackager>(); Element root = document.getRootElement(); List<?> actionElms = root.elements("action"); // 遍历所有action元素 for (int i = 0; i < actionElms.size(); i++) { Element actionElm = (Element) actionElms.get(i); ActionPackager action = new ActionPackager(); String actionClassPath = actionElm.attributeValue("class"); Controller actionObj = actionFactory.getActionInstance(actionClassPath); action.setName(actionElm.attributeValue("name")); action.setClasspath(actionClassPath); action.setMethodName(actionElm.attributeValue("method")); action.setActionClass(actionObj.getClass()); action.setActionObj(actionObj); actionsMap.put(action.getName(), action); } log.info("装载完成"); return actionsMap; } }
4.ActionFactory:
ActionFactory的工厂类。用来创建Controller。
package com.iaiai.mvc.action; import javax.servlet.ServletConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * <p> * Title: ActionFactory.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-14 * </p> * * @author 丸子 * @version 0.0.1 */ public class ActionFactory { public static Log log = LogFactory.getLog(ActionFactory.class); private ServletConfig servletConfig; public ActionFactory(ServletConfig servletConfig) { this.servletConfig = servletConfig; } /** * 得到Action实例 * * @return */ public Controller getActionInstance(String actionClassPath) { Class<?> actionClass = null; Controller actionObj = null; try { // 向Action中注入servletConfig Controller.setServletConfig(servletConfig); // 实例化Action子类 actionClass = Class.forName(actionClassPath); actionObj = (Controller) actionClass.newInstance(); log.debug("创建" + actionClassPath + "实例"); } catch (ClassNotFoundException e) { log.error("Action相关类没有找到"); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return actionObj; } }
package com.iaiai.mvc.action; import javax.servlet.ServletConfig; /** * * <p> * Title: Controller.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-14 * </p> * * @author 丸子 * @version 0.0.1 */ public abstract class Controller { private static ServletConfig config; /** * 注入servletConfig * * @param servletConfig */ public static void setServletConfig(ServletConfig servletConfig) { config = servletConfig; } /** * 得到ServletConfig * * @return */ protected ServletConfig getServletConfig() { return config; } }
5.ActionPackage:
Controller相关信息的包装类。
package com.iaiai.mvc.action; /** * * <p> * Title: ActionPackager.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-14 * </p> * * @author 丸子 * @version 0.0.1 */ public class ActionPackager { private String name; // action名称 private String classpath; // action的完整路径 private String methodName; private Class<?> actionClass; private Controller actionObj; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getClasspath() { return classpath; } public void setClasspath(String classpath) { this.classpath = classpath; } public String getMethodName() { return methodName; } public void setMethodName(String methodName) { this.methodName = methodName; } public Class<?> getActionClass() { return actionClass; } public void setActionClass(Class<?> actionClass) { this.actionClass = actionClass; } public Controller getActionObj() { return actionObj; } public void setActionObj(Controller actionObj) { this.actionObj = actionObj; } }
运行起来之后在浏览器上输入:http://localhost:8080/mvc/main.do?function=hello
然后会在控制台输出一句话:"this is hello!!!",这里没有连接到页面,你们可以去扩展此mvc框架
- mvc.rar (631.8 KB)
- 下载次数: 18
发表评论
-
小程序textarea完美填坑
2020-07-07 16:09 506相信做微信小程序的码友们都被textarea这个原生组件坑过 ... -
Nginx+Https自己敲命令生成证书
2020-05-18 09:35 941一、准备 环境:centos6.8 ... -
https证书生成环境搭建配置(基于Tomcat和Nginx)
2020-04-24 11:06 816一、基于Tomcat、JDK内置密钥工具: 1、生成服务端证 ... -
史上最强Tomcat8性能优化
2019-11-01 21:41 853授人以鱼不如授人以渔 ... -
SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
2019-10-07 09:13 5561.使用jdk自带的 keytools 创建证书 打开cmd ... -
Spring Boot工程集成全局唯一ID生成器 UidGenerator
2019-09-16 09:04 848概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础 ... -
CentOS7下Redis的安装与使用
2019-08-17 11:45 595一、手动安装过程 1、准备工作(安装gcc依赖) yum ... -
Nginx与tomcat组合的简单使用
2019-08-17 10:05 406配置tomcat跳转 请求http出现400的时候在这里配置 ... -
linux下lvs+keepalived安装配置
2019-07-10 14:20 458keepalived主机:192.168.174. ... -
使用Docker搭建Tomcat运行环境
2019-02-08 21:32 4831 准备宿主系统 准备一 ... -
Netty笔记-GlobalEventExecutor
2019-02-06 23:00 6271.概念 /** * Single-thread si ... -
Netty4转发服务的实现方案
2019-02-06 15:03 1117如果用Netty做转发服务(不需要同步应答),Netty中有一 ... -
java手机号归属地查询
2018-12-25 17:16 735所需的包:carrier-1.75.jar 、geocoder ... -
基于Netty4的HttpServer和HttpClient的简单实现
2018-10-17 20:02 672Http 消息格式: Http request: Met ... -
javafx : 支持使用微调(spinner)控制的数字的文本框(NemberTextField)
2018-10-16 00:00 1079最近花了一些时间学习javaFX, 要更深入地理解新GUI包, ... -
我的Java(定制你的Java/JavaFX Runtime)
2018-10-12 23:29 671最新的JDK 11发布了,撒花 新版本的JDK终于有了ope ... -
javaFX的几个新特性,让swing彻底过时
2018-10-12 22:42 659首先声明,Java的GUI曾经 ... -
mac os系统用install4j把jar包生成app
2018-10-05 23:02 1418install4j有windows版也有mac版 mac电脑 ... -
JavaFX Alert对话框
2018-10-05 22:01 23391. 标准对话框 消息对话框 Alert alert = ... -
IDEA Properties中文unicode转码问题
2017-02-17 19:54 989摘要: 如何让IDEA的properties中的中文进行uni ...
相关推荐
【标题】"自制MVC框架:TonyMVC" 在IT行业中,MVC(Model-View-Controller)架构模式被广泛应用于Web开发,它将应用程序的业务逻辑、数据处理和用户界面分离,使得代码更易于管理和维护。"自制MVC框架:TonyMVC"是...
本文将详细介绍MVC模式的工作原理,并指导如何在JavaScript中实现一个简单的MVC框架。 在JavaScript中实现一个简单的MVC框架可以帮助你更好地理解MVC模式的工作原理,并为你的Web应用程序提供一个结构化的方法。通过...
音乐推荐系统 系统算法:基于用户的协同过滤推荐算法 编程语言:python ...框架:MVC web应用框架:Django 解压就可以运行(自己需要有调试项目环境的能力),需要软件python和pycharm或者Anaconda 项目有配套的文档
ASP.NET MVC框架是微软开发的一款用于构建Web应用程序的开源、轻量级且高度模块化的框架。这个框架结合了Model-View-Controller(MVC)设计模式的灵活性和ASP.NET的强大功能,为开发者提供了构建可测试、高性能的Web...
MVC框架
Todo应用通常是一个基础的待办事项列表,用于展示基本的CRUD(创建、读取、更新、删除)操作,这有助于理解MVC框架的核心概念。 在PHP MVC框架中: 1. **Model** 负责处理数据和业务逻辑。对于Todo应用,Model可能...
【MVC模式详解:理解框架的核心价值】 在Web开发领域,MVC(Model-View-Controller)模式是一种广泛采用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这个模式...
**简单的MVC框架例子** 在Web开发中,MVC(Model-View-Controller)模式是一种广泛应用的设计模式,它将应用程序的结构分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这个简单的MVC框架...
轻量级MVC框架:基于Java开发,包含89个文件,包括25个...该项目是一个基于Spring MVC的轻量级扩展,借鉴了ASP.Net MVC及JFinal框架的思路,提供了一种更简洁的MVC路由模式,旨在简化Web应用的开发流程,提高开发效率。
本项目是用C++实现的一个简单的MVC框架,名为MVCDemo,旨在帮助开发者理解MVC设计模式的基础概念。 首先,我们来详细解释MVC的三个组成部分: 1. Model(模型):模型层是应用的核心,它负责管理数据和业务逻辑。...
- MVC:Model-View-Controller模式是一种广泛应用于Web开发的软件设计模式,其中模型负责管理应用程序的数据和业务逻辑,视图负责显示数据,控制器则处理用户的输入并协调模型和视图。 - 开源MVC框架:这些框架的源...
"基于Java Web MVC框架的电力班组智能化管理系统" 本文介绍了基于Java Web MVC框架的电力班组智能化管理系统的设计和实现。该系统旨在解决当前电力班组管理中存在的人力资源浪费、信息不完善、缺乏智能化管理等问题...
**MVC框架详解** 在软件开发领域,MVC(Model-View-Controller)框架是一种广泛应用于Web应用设计的架构模式。MVC将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此实现业务...
**MVC(Model-View-Controller)框架是软件开发中常用的一种设计模式,尤其在Web应用领域中,它能够帮助开发者有效地分离业务逻辑、数据处理和用户界面。本例子将详细解析如何创建一个MVC框架,并展示如何通过该框架...
MVC模式与ASP.NET MVC框架概述源码MVC模式与ASP.NET MVC框架概述源码MVC模式与ASP.NET MVC框架概述源码MVC模式与ASP.NET MVC框架概述源码MVC模式与ASP.NET MVC框架概述源码MVC模式与ASP.NET MVC框架概述源码
1、MVC框架 : 使用简单(结合DataBinding更好用) 2、MVP框架 : 高解耦、提高维护效率、类文件多(View、Data、IPresenter、IContract) 3、MVVM框架: 一般般
**MVC(Model-View-Controller)框架教程** MVC是一种设计模式,广泛应用于Web开发领域,它将应用程序的逻辑分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种架构模式有助于实现代码的...