您的位置:首页 > 其它

服务器端mvc框架是怎样接收请求的?

2014-04-10 18:20 218 查看
问题:服务器端mvc框架是怎么接收请求的?

即:客户端浏览器发出request请求,服务器收到请求,并将请求交给应用程序处理,之后把处理结果返回给客户端作为应答。



当我们输入:192.168.0.100:8080/csdn/index.do时,ip地址定位到服务器所在的主机,8080端口定位到服务器(类似apache的软件服务器),而csdn指向当前服务器下部署的某一应用,index.do则是具体的路由到哪个控制器。问题出在服务器到控制器间,也就是上图A阶段末期,应用程序怎么才能接收到请求,并将具体请求分发路由到具体控制器让它来解决并应答呢?



服务器有很多应用程序,通过url定位请求。每一个app中的mvc框架都会最终接收请求并分发到具体的控制器去执行。感觉像是对url一层一层的剥离,这样符合网络5层协议的精神!

所以,需要解答mvc怎么样将控制器映射起来,接受请求后又是怎么样找到它的这个问题。

php模式

在php中最简单的方式是:直接定位处理请求的某个php,比如192.168.0.100:8080/csdn/doRequest.php?name=z&age=10,然后在该php文件中通过$_GET['name']获取参数,进一步处理,最后返回结果。

在thinkPHP等框架中,有一个文件作为集中请求分发的入口,然后每次发送请求时都需要指向该入口。thinkPHP一般是根目录下的index.php,则没有隐藏它的时候每次发送请求都需要带上它作为url一部分,比如192.168.0.100:8080/csdn/index.php/Login/login。该url指向Login模块的login方法,入口是index.php,必须由他初始化加载thinkphp来解析url找到Login的login。

这种模式下,我们的url也清晰地指出了入口,指明由它处理,很好理解。

java模式

java中以spring为例,tomcat等启动时加载环境,并根据web.xml初始化部署在其下的所有web应用,而spring也就是在这时候初始化的,负责调度的是一个叫做DispatcherServlet的Servlet。

<web-app>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

假如有一个请求192.168.0.100:8080/csdn/hello.do,会由这个servlet来负责解析并调度hello.do,好像它就代表了csdn一样,而我们的url并没有它,它是如何接收请求的呢?

最开始用java编写web是使用servlet,在web.xml配置如下:

<web-app>
...
// servlet注册
<servlet>
<servlet-name>nameToRegister</servlet-name>
<servlet-class>com.csdn.Hello</servlet-class>
</servlet>

//servlet映射
<servlet-mapping>
<servlet-name>nameToRegister</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
...
</web-app>


服务器启动时加载该文件,自然会初始化注册该servlet,当请求192.168.0.100:8080/csdn/hello时就指向com.csdn.Hello类来处理。spring和原生servlet相似,不过原生servlet编程需在web.xml配置每一个servlet实现类及其映射,而spring把DispatcherServlet作为总入口servlet,凡是符合它映射规则的请求都交由它处理。所以192.168.0.100:8080/csdn/hello.do会交给它,因为符合“*.do”规则。在DispatcherServlet内部会对各种参数进行组合,然后再具体匹配“hello.do”实现类,由该实现类处理实际请求并返回结果。由此,java中的servlet及其url-pattern是在tomcat启动时注册好了的,8080端口由tomcat监听,它负责找到csdn应用并通过url-pattern找到该应用下处理请求的servlet。一切早已就绪,静静的,只是等待用户请求的到来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mvc