`
Aga
  • 浏览: 218611 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

最简单的一个mvc实现

阅读更多
感谢阿仁(一个香港程序员)告诉了我这个非常棒的网站,让我有时间他塌下心来学习基本的servlet。包括我在内,虽然很多大陆的程序员都声称什么ssh\jsf\jdo其实很多人连最基本的servlet、multi-thread、transaction-level还搞不清楚就去跟风搞ssh实在是本末倒置,没有必要。我觉得甚至还不如下点功夫把基础好好补习一下,看看struts、tomcat的源代码学习一下,然后实现一些自己的框架,哪怕就是单纯的模仿。
根据我自己的分析:struts使用的底层技术:xml\reflection\servlet\multi-thread; spring的底层技术:xml\aop\reflection\multi-thread; hibernate的底层技术:reflection\multi-thread\xml\jdbc\数据库基础。所以,花点时间把基础仔细的学习学习还是很有必要的~j
使用、学习java确实是很幸福的,因为有太多现成的开源软件供你使用,但是同时也有一些问题:如果你只会用,而不能深入学习,那你一辈子只能跟着开源组织走,而不能自己开发一套框架。很高兴,自己能够意识到这些,希望在3、5年之内我能自己实现一些框架,当然一定要是有生产力里的框架!3、5年,应该没有什么问题,至少现在我就能够体会到struts\hibernate\spring的一些底层实现方法。
非话太多了,上代码,转自:Gossip@caterpillar。一个最简单的mvc实现,看看这段代码,对struts有一种豁然开朗的感觉,用了那么久,现在才意识到其中的具体实现方法,太神奇了~~其中对于invoker类我做了一点修改:以保证线程安全。
package com.cxz.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {
	public void execute(HttpServletRequest request, HttpServletResponse response);
}

package com.cxz.mvc;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DispatcherServlet extends HttpServlet {

	private static final long serialVersionUID = 4617894412082217211L;
	private Invoker invoker;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		invoker.request(request, response);
	}

	public void init() throws ServletException {
		invoker = new Invoker();
		invoker.addCommand("/welcome.action", null);//a action
		invoker.addCommand("/login.action", null);//a action
		invoker.setDefaultPage("/welcome.action");
	}

}

package com.cxz.mvc;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Invoker {
	private String defaultPage;

	private Map<String, Action> actions = null;

	public Invoker() {
		actions = Collections.synchronizedMap(new HashMap<String, Action>());
	}

	public void addCommand(String name, Action action) {
		actions.put(name, action);
	}

	public void request(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Action action = actions.get(request.getServletPath());
		if (action != null) {
			action.execute(request, response);
		} else {
			request.getRequestDispatcher(defaultPage)
					.forward(request, response);
		}
	}

	synchronized void setDefaultPage(String defaultPage) {
		this.defaultPage = defaultPage;
	}

	public String getDefaultPage() {
		return defaultPage;
	}

}

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>com.cxz.mvc.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
分享到:
评论
3 楼 macleo 2011-05-19  
阿仁告诉你的网站呢?
2 楼 Aga 2008-08-08  
为什么会混乱呢?
在说你说的状态混乱是指什么?
1 楼 xieke 2008-08-08  
为什么把 action 放到 map 里去呢?
这样的话如果 action 在使用中,
被另外一个请求取出,action的状态会混乱的

相关推荐

    Winform下最简单易懂的MVC实例

    在本文中,我们将深入探讨如何在Winform环境下实现一个简单的MVC(Model-View-Controller)模式。MVC是一种设计模式,它将应用程序分为三个主要组件:模型、视图和控制器,以提高代码的可维护性和可扩展性。在...

    用mvc实现的一个小型计数器

    “用mvc实现的一个小型计数器”这个标题表明了这是一个基于MVC(Model-View-Controller)架构设计的简单计数器应用。MVC是一种流行的设计模式,广泛应用于Web开发中,它将应用程序的业务逻辑、用户界面和数据处理...

    一个简单的mvc实例

    总结,这个简单的MVC实例为我们提供了一个理解MVC模式如何应用于实际项目中的示例,尤其是对于初学者来说,它能帮助我们更好地掌握J2EE环境下的MVC架构,从而提升我们的Web开发技能。通过分析stu.sql和Student,我们...

    最简单的phpMVC实例

    在这个最简单的PHP MVC实例中,我们将探讨如何通过这个小型的留言本应用来理解MVC的运作机制。 【MVC组件解析】 1. **Model(模型)**: 模型层负责处理数据和业务逻辑。在这个例子中,`Model`类代表了与数据库交互...

    最简单的mvc小实例

    **MVC模式详解** ..."最简单的mvc小实例"是一个理想的学习工具,可以帮助初学者快速掌握MVC的基本原理和实践技巧。通过实际操作和分析代码,可以更好地理解和运用这一模式,为未来的开发工作打下坚实的基础。

    JAVA最简单的MVC架构DEMO

    在"JAVA最简单的MVC架构DEMO"中,你可以看到如何将业务逻辑、数据展示和用户交互分离,这有助于代码组织和项目维护。通过学习这个DEMO,你将能够理解MVC模式的核心原理,并将其应用于更复杂的Java Web应用程序开发中...

    简单的加法MVC实现

    在这个"简单的加法MVC实现"中,我们将深入理解如何使用jsp、Servlet和javabean来构建一个简单的MVC架构。 1. **模型(Model)**: 模型是应用程序的核心,负责处理业务逻辑和数据管理。在这个加法运算的例子中,...

    MVC简单例子C#

    2. **定义模型**:创建一个名为`Mvc.Models`的命名空间,定义一个简单的类,如`Person`,包含一些属性。 3. **创建控制器**:在Controllers文件夹中,添加一个新的控制器,如`PersonController`,并添加一个操作方法...

    最简单的PHP MVC留言本实例

    写完那篇“写给懂C语言的人的PHP基本语法入门”后一直在学习PHP5的OOP,目的很简单,就是想研究MVC的PHP实现,所以,兴趣很快转移到MVC上面,网上有很多长篇大论,但是看完了我还是不能写出一个最简单的MVC程序,我...

    MVC java实现的简单案例 球

    在这个简单的Java MVC案例中,我们将探讨如何利用这种模式来创建一个计算球体表面积和体积的应用。 首先,**模型(Model)**是应用程序的核心,负责处理数据和业务逻辑。在这个案例中,模型可能是`SphereModel`类,...

    Spring MVC最简单demo

    在本最简单的Spring MVC demo中,我们将探讨如何从零开始搭建一个基本的Spring MVC项目。 首先,Spring MVC是Spring框架的一部分,主要用于处理Web请求。它通过分离业务逻辑、数据模型和用户界面,提高了代码的可...

    java web MVC的实现

    在简单的登录功能实现中,MVC模式的应用可能如下: - **Controller(Servlet)**:创建一个Servlet来处理用户的登录请求。Servlet接收HTTP请求,验证用户名和密码(这通常是通过查询模型层的JavaBean获取的)。如果...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    你需要掌握如何在MVC架构中实现一个更新表单,并处理更新请求。 6. **安全性考虑**:尽管这是初级项目,但也要注意基本的安全实践,比如使用预编译的SQL语句防止SQL注入,密码应进行哈希处理而非明文存储,以及对...

    最简单的PHP MVC实例

    ### 最简单的PHP MVC实例解析 #### 一、MVC架构简介 MVC(Model-View-Controller)是一种软件架构设计模式,广泛应用于Web应用程序的开发之中。它将应用程序分为三个核心部分: - **Model(模型)**:负责处理应用...

    最简单的MVC框架源码

    在"最简单的MVC框架源码"中,我们可以深入理解MVC模式的基本原理及其在实际应用中的实现。 1. **Model(模型)**: 模型层是整个框架的核心,负责处理数据和业务逻辑。在Discuz! 中,模型类通常用于与数据库交互,...

    最简单的spring MVC框架搭建

    而这个最简单的示例则为我们提供了一个起点,展示了Spring MVC的基本结构和工作原理。随着对Spring MVC的深入理解和实践,我们可以逐步添加更多的功能和优化,构建出满足各种需求的复杂Web应用。

    ASP.NET下MVC最简单数据库增删改查示例

    ASP.NET MVC最简单数据库增删改查示例。数据库采用EF连接。 数据源配置: 1、使用DB目录下的BookDB.sql到SQL数据库中生成数据库BookDB 2、打开代码Models\Book.edmx文件,对任一表右键单击,选择从数据库更新模型。

    MVC设计模式例子程序

    总结来说,"MVC设计模式例子程序"是一个演示了如何在C#的Windows Forms环境下实现MVC模式的应用。通过模型、视图和控制器的分离,这个程序实现了业务逻辑、用户界面和数据管理的清晰划分,增强了代码的可读性和可...

    extjs4MVC实现

    本文将深入探讨 ExtJS4.0 MVC 的核心概念、结构以及如何实现一个简单的 MVC 应用。 1. MVC 架构模式介绍 MVC 分为三个主要部分:Model(模型)、View(视图)和 Controller(控制器)。模型处理数据和业务逻辑,...

    一个简单的PHP MVC留言本实例

    标题上我把这个留言板叫最简单的,其实应该叫最简陋的,因为把全部注意力集中在MVC模式设计和实现上,所以UI方面几乎没有一点修饰。之所以在这里跟大家分享这个东西,是因为我自己通过读该老外的代码并仿照着写留言...

Global site tag (gtag.js) - Google Analytics