`
zh_harry
  • 浏览: 103256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
877aca81-daac-33c8-8bf9-3a886cebc6c3
自己动手写java 框架
浏览量:28748
社区版块
存档分类
最新评论

疯子在思考之从零说MVC

    博客分类:
  • JAVA
阅读更多
这篇主要讲web开发基础,MVC概念的原型会从这里体现。
首先提一个问题main方法在哪?
我们学的第一种语言,写hello world时都会写main方法(除脚本语言外),那么我们想一下,我们写web程序时main在哪?
我们以b/s结构为例,很容易想到main其实有两个,一个在服务器端一个在客户端。那么服务器和客户端的通信走的是socket。通信的内容要有协议,即我们熟悉的http,http请求两个最核心的对象是request和response。那么我们再简单回忆一下web程序的hello world 过程.
request 发现请求服务器端接收处理后通过response返回给客户端.这是web程序的基本概念.
下面是httpwatch截图我们可以简单地了解http协议





到这里我们很容易想到java的servlet。
学java web开发的还都会了解servlet,那么第二个问题?
java是OOP语言,我们知道OOP的对象都是需要new出来才能引用的(或者反射)那么new在哪呢?
我们不难想到new的过程肯定是服务器端?而且是通过反射机制来生成对象,那么每次请求都要new吗?
答案是否定的,大家都知道servlet是单例多线程而且是线程安全的。这里需要注意一点servlet是不能有成员变量的,注意是成员“变量”。这里可以想到为什么struts2的action要配置成非单例?

注意这里的概念与以后的struts以及spring mvc概念的基础。struts 1或2和spring MVC跟这里是有区别和联系的。

其实servlet就是mvc的雏形,通过servlet就可以写一个mvc 的hello world.
那么为什么会出现MVC?下一篇文章介绍,谢谢关注.
  • 大小: 45 KB
  • 大小: 63.4 KB
5
18
分享到:
评论
48 楼 zh_harry 2013-07-25  
http://lizhizhang.iteye.com/blog/1913546这里是MVC-2 请大家继续关注
47 楼 zh_harry 2013-07-24  
rainsilence 写道
zh_harry 写道
小te 写道
楼主思维太跳跃了,前后语句没什么必然联系,楼主应该把语言组织一下,理理思路

接受批评,下篇文章画图。

lz被骂的好爽啊。。~~~~

一边呆着去。呵呵,其实我想得没那么跳,表达出来,别人看起来有点跳。
46 楼 rainsilence 2013-07-24  
zh_harry 写道
小te 写道
楼主思维太跳跃了,前后语句没什么必然联系,楼主应该把语言组织一下,理理思路

接受批评,下篇文章画图。

lz被骂的好爽啊。。~~~~
45 楼 zh_harry 2013-07-24  
小te 写道
楼主思维太跳跃了,前后语句没什么必然联系,楼主应该把语言组织一下,理理思路

接受批评,下篇文章画图。
44 楼 小te 2013-07-24  
楼主思维太跳跃了,前后语句没什么必然联系,楼主应该把语言组织一下,理理思路
43 楼 zh_harry 2013-07-24  
jackra 写道
深入浅出四个字,楼主已经做到了一半,所以迫不得已,踩了一脚

没明白你这是什么逻辑,是在夸我还是在损我
42 楼 jackra 2013-07-24  
深入浅出四个字,楼主已经做到了一半,所以迫不得已,踩了一脚
41 楼 zh_harry 2013-07-24  
rainsilence 写道
写文章的痛苦,太基本老被踩,太深入没人理

有这个感觉,没有必要让大家都喜欢,兄弟顶一个吧。
40 楼 rainsilence 2013-07-24  
写文章的痛苦,太基本老被踩,太深入没人理
39 楼 fourfireliu 2013-07-24  
rainsilence 写道
基本的web容器大都是这个样子
1:从main开始启动,读取web.xml,如果servlet,filter有load标签则实例化,如果是listener则直接实例化,打开socket server,监听套接字。并且运行listener的ContextInit事件方法
2:接收套接字,并且解析。
3:在对象池中查找url对应的Servlet,Filter实例。如果有则进入step4,如果没有报404
4:根据套接字中的内容生成request,response实例,根据url依次运行
      1)Listener方法
      2)Filter方法
      3) Servlet方法(Post,Get,Delete,Put)
      4)Filter方法(责任链模式回调)
5:容器获得response内容,在socket的write流上写入内容
6:调用listener的方法

MVC????一个让你专注于Servlet的一个概念而已。

P.S.Servlet,Filter,Listener,Response,Request,不过是POJO。起作用的还是Socket。这也就是为什么JavaSE学好了,JavaEE一下子就会的原因。

1应该是先读context param 然后创建servletContext,把context param放进去,然后加载listener,实例化listener,然后才是看filter的load标签,看servlet的load标签,然后才是23456
38 楼 zh_harry 2013-07-23  
基础第一,语言第二
rainsilence 写道
你看我blog,几乎没有java的文章,虽然我很了解java。
研究java就是浪费生命,除了市场大,没有其他的优点。供给大,意味着你永远拿不了高新。看着你,想起了我年轻的时候,不懂事,玩起了java。还好那时穷,老妈没给买好的机器。跑不动java的很多东西。于是开始搞起了前端,游戏,设计模式,手机,还顺便搞搞linux。现在回头看看。java,除了语法好看点。没啥优点。而大部分的人学java,不过是跟风,需求大而已。在年轻的时候,这也是必须的,先解决生存问题嘛~但是,再往上走嘛~~基础第一,语言第二。

敢问lz几岁了?

基础第一,语言第二 这句话很不错.
37 楼 zh_harry 2013-07-23  
rainsilence 写道
你看我blog,几乎没有java的文章,虽然我很了解java。
研究java就是浪费生命,除了市场大,没有其他的优点。供给大,意味着你永远拿不了高新。看着你,想起了我年轻的时候,不懂事,玩起了java。还好那时穷,老妈没给买好的机器。跑不动java的很多东西。于是开始搞起了前端,游戏,设计模式,手机,还顺便搞搞linux。现在回头看看。java,除了语法好看点。没啥优点。而大部分的人学java,不过是跟风,需求大而已。在年轻的时候,这也是必须的,先解决生存问题嘛~但是,再往上走嘛~~基础第一,语言第二。

敢问lz几岁了?

谢谢,这跟年龄没关系。别关注我的年龄
36 楼 rainsilence 2013-07-23  
你看我blog,几乎没有java的文章,虽然我很了解java。
研究java就是浪费生命,除了市场大,没有其他的优点。供给大,意味着你永远拿不了高新。看着你,想起了我年轻的时候,不懂事,玩起了java。还好那时穷,老妈没给买好的机器。跑不动java的很多东西。于是开始搞起了前端,游戏,设计模式,手机,还顺便搞搞linux。现在回头看看。java,除了语法好看点。没啥优点。而大部分的人学java,不过是跟风,需求大而已。在年轻的时候,这也是必须的,先解决生存问题嘛~但是,再往上走嘛~~基础第一,语言第二。

敢问lz几岁了?
35 楼 zh_harry 2013-07-23  
rainsilence 写道
你的文章没啥深度啊。。

不说了入门的第一扁嘛
34 楼 rainsilence 2013-07-23  
你的文章没啥深度啊。。
33 楼 zh_harry 2013-07-23  
如果servlet
rainsilence 写道
基本的web容器大都是这个样子
1:从main开始启动,读取web.xml,如果servlet,filter有load标签则实例化,如果是listener则直接实例化,打开socket server,监听套接字。并且运行listener的ContextInit事件方法
2:接收套接字,并且解析。
3:在对象池中查找url对应的Servlet,Filter实例。如果有则进入step4,如果没有报404
4:根据套接字中的内容生成request,response实例,根据url依次运行
      1)Listener方法
      2)Filter方法
      3) Servlet方法(Post,Get,Delete,Put)
      4)Filter方法(责任链模式回调)
5:容器获得response内容,在socket的write流上写入内容
6:调用listener的方法

MVC????一个让你专注于Servlet的一个概念而已。

P.S.Servlet,Filter,Listener,Response,Request,不过是POJO。起作用的还是Socket。这也就是为什么JavaSE学好了,JavaEE一下子就会的原因。

这位同学很不错!理解到位了
32 楼 rainsilence 2013-07-23  
基本的web容器大都是这个样子
1:从main开始启动,读取web.xml,如果servlet,filter有load标签则实例化,如果是listener则直接实例化,打开socket server,监听套接字。并且运行listener的ContextInit事件方法
2:接收套接字,并且解析。
3:在对象池中查找url对应的Servlet,Filter实例。如果有则进入step4,如果没有报404
4:根据套接字中的内容生成request,response实例,根据url依次运行
      1)Listener方法
      2)Filter方法
      3) Servlet方法(Post,Get,Delete,Put)
      4)Filter方法(责任链模式回调)
5:容器获得response内容,在socket的write流上写入内容
6:调用listener的方法

MVC????一个让你专注于Servlet的一个概念而已。

P.S.Servlet,Filter,Listener,Response,Request,不过是POJO。起作用的还是Socket。这也就是为什么JavaSE学好了,JavaEE一下子就会的原因。
31 楼 zh_harry 2013-07-23  
finallygo 写道
zh_harry 写道
finallygo 写道
zh_harry 写道
finallygo 写道
我说的也是变量,建议你看看  java并发编程实践 这本书

源码删了,太长了
我明白你的意思了,我的理解只要他不变行了。因为是单例,多线程共享,变的话就会有问题了,除非加threadlocal

也不一定的,我可以自己加synchronized或者其他方式来保证线程安全就行了

你赢了,把我文章顶回来
理解了就行了呗,别较真。
我不说了threadlocal了嘛。别欺负我了啊

你这种分享的精神我很赞同,不过我觉得写文章还是严谨一些好,另外,不是我踩的

对了你刚说到严谨,我接受
30 楼 zh_harry 2013-07-23  
finallygo 写道
zh_harry 写道
finallygo 写道
zh_harry 写道
finallygo 写道
我说的也是变量,建议你看看  java并发编程实践 这本书

源码删了,太长了
我明白你的意思了,我的理解只要他不变行了。因为是单例,多线程共享,变的话就会有问题了,除非加threadlocal

也不一定的,我可以自己加synchronized或者其他方式来保证线程安全就行了

你赢了,把我文章顶回来
理解了就行了呗,别较真。
我不说了threadlocal了嘛。别欺负我了啊

你这种分享的精神我很赞同,不过我觉得写文章还是严谨一些好,另外,不是我踩的

不是你踩的要你顶不行吗?我都去那回复了,我还会继续写的,给点勇气。
29 楼 finallygo 2013-07-23  
zh_harry 写道
finallygo 写道
zh_harry 写道
finallygo 写道
我说的也是变量,建议你看看  java并发编程实践 这本书

源码删了,太长了
我明白你的意思了,我的理解只要他不变行了。因为是单例,多线程共享,变的话就会有问题了,除非加threadlocal

也不一定的,我可以自己加synchronized或者其他方式来保证线程安全就行了

你赢了,把我文章顶回来
理解了就行了呗,别较真。
我不说了threadlocal了嘛。别欺负我了啊

你这种分享的精神我很赞同,不过我觉得写文章还是严谨一些好,另外,不是我踩的

相关推荐

    .net(mvc)宾馆管理系统

    《.NET(MVC)宾馆管理系统详解》 ...总的来说,选择.NET(MVC)作为宾馆管理系统的开发平台,不仅能提供强大的功能支持,还能带来良好的可扩展性和维护性,是构建现代化宾馆信息系统的一个理想选择。

    《天才在左疯子在右》的基本介绍和推荐理由[定义].pdf

    《天才在左疯子在右》的基本介绍和推荐理由[定义].pdf

    疯子手机apk卸载工具

    疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机apk卸载工具疯子手机...

    疯子苹果助手 v1.0.1.318.zip

    首先,疯子苹果助手的特性之一是其海量的正版软件和游戏资源。用户可以在该平台上找到众多官方认证的应用,涵盖娱乐、教育、工具、社交等多个领域,满足不同用户的个性化需求。每日更新的新增应用确保了用户始终能够...

    疯子CMS_轻简杰奇小说系统.zip

    【疯子CMS-轻简小说系统】是一款专为小说网站设计的内容管理系统(CMS),它以简洁易用为核心理念,旨在让网站管理员能够快速搭建和管理自己的小说平台,无需复杂的操作和大量的技术背景。这款系统可能包含以下关键...

    疯子锁IE插件源码程序演示效果

    在当今数字化时代,个人信息安全和网络隐私保护是广大网民最为关注的问题之一。尤其是对企业或个人电脑上的浏览器而言,防止未经授权的访问和修改就显得尤为重要。在众多浏览器中,尽管Internet Explorer(IE)已...

    手机助手 疯子助手

    疯子助手是一款为苹果设备用户提供应用下载和游戏破解的软件,疯子助手里提供了海量不闪退应用和近千款极高有效度的ios热门游戏存档。 疯子助手完美支持不越狱的iPhone和iPad等iOS设备,是一款下载安装和管理软件、...

    读后感《天才在左,疯子在右》.doc

    《天才在左,疯子在右》这本书以其独特的视角探讨了人类思维的边界,通过对话精神病人的经历,引发读者对自我认知和世界本质的深度思考。以下是对书中的几个核心观点的解读: 首先,作者通过描述吃苹果的过程,强调...

    初中语文文摘社会疯子

    总结来说,这篇文摘通过一个社会边缘人物的故事,讨论了规则遵守、社会责任、环保意识以及社会对非主流行为的态度,引导读者深入思考何为真正的正常,以及如何评价个体在社会中的角色。它提醒我们在面对社会的普遍...

    电脑疯子GHOST-WIN7-SP1旗舰版(64位).doc编程资料

    电脑疯子GHOST-WIN7-SP1旗舰版(64位).doc编程资料

    疯子页面采集器 v4.0

    "疯子页面采集器 v4.0" 是一款专门针对网页数据采集的高效工具,它设计的目的是为了帮助用户从互联网上抓取并处理各种类型的信息,如文字、图片等。这款软件尤其适用于那些需要大量网页信息进行分析、研究或者自动化...

    读后感ۥ天才在左疯子在右精选.doc

    总的来说,《天才在左,疯子在右》不仅是一本书,更是一次对思维边界和人性深度的探索。它教会我们要开放心态,接纳不同,以及深入体验和理解生活中的每一刻。通过阅读,我们有机会反思自我,挑战既定观念,从而获得...

    C# mvc 订单系统(数据库+源码)

    总结来说,"C# MVC 订单系统(数据库+源码)"是一个涵盖C#编程、MVC架构、数据库设计和Web应用开发实践的综合案例。通过分析和学习这个项目,开发者可以深入理解如何构建一个完整的订单处理系统,同时提升自己的C#编程...

    疯子ftp上传工具源码传送数据到服务器源码版.rar

    在这个"疯子ftp上传工具源码传送数据到服务器源码版.rar"压缩包中,包含的源码可能是一个实现了FTP协议的上传工具,允许用户将本地文件上传至远程服务器。 FTP上传工具的核心功能通常包括以下部分: 1. **连接建立...

    疯子ftp上传工具传送数据到服务器2.0.zip

    疯子ftp上传工具传送数据到服务器 ftp上传工具 ftp服务器上传 ftp客户端 ftp服务器客户端 2.0新功能 密码加密 在线更新 更新缓存错误

    推箱子疯子版.zip

    1. **关卡设计**:疯子版可能会有更多精心设计的关卡,这些关卡可能包含多个难度等级,从初级的简单关卡逐渐过渡到需要深度思考和多次尝试的高级关卡。关卡设计可能更加巧妙,利用地形、障碍物以及箱子的数量来增加...

    DELPHI 的仿QQ疯子 不完全

    接下来,我们将详细讨论DELPHI编程语言以及在实现仿QQ疯子过程中可能涉及的关键技术点。 DELPHI是Borland公司推出的一种面向对象的、快速应用程序开发(RAD)工具,基于Pascal语言。它以其高效的编译器和强大的VCL...

    JSP从零开始学(视频教学版)第三部分

    JSP从零开始学(视频教学版),出版时间:2016年01月 .JSP依靠强大的 Java基础,成为世界上最流行的 Web开发利器。本书通过大量的实例,循序渐进地为读者介绍了有关 JSP开发所涉及的各类知识,所有版本一律采用*版本,是...

    初中语文文摘历史父亲不是疯子

    在历史的长河中,常常有那么一些人物,他们或因独特的个性,或因与社会主流格格不入的行为而被人误解,甚至被冠以“疯子”的标签。然而,当我们在历史的尘埃中细细打捞这些人物的故事时,我们往往能够发现,这些所谓...

    疯子扫描器

    在数据扫描方面,疯子扫描器不仅能够读取文件内容,还可能包括文件属性、元数据和隐藏文件。这对于数据安全和隐私保护来说具有重要意义,因为许多敏感信息可能隐藏在这些不显眼的地方。同时,它可以帮助用户识别网络...

Global site tag (gtag.js) - Google Analytics