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

疯子在思考之从零说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了嘛。别欺负我了啊

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

相关推荐

Global site tag (gtag.js) - Google Analytics