Web开发最重要的基本功是Http,Java Web开发最重要的是Servlet Specification。
B/S Web框架设计思想:MVC、事件代理机制、页面组件、IoC、AOP等;Servlet规范不断引入Filter、Listener(自Servlet2.3引入)。
一、Http Request—Response Cycle的处理过程
Http Request Url一般分为三段:host、context、path。
eg: http://yourhost/yourApp/en/index.html 中,host:yourhost;context:yourApp;path:en/index.html。其中,context部分可以通过request.getContext()获取,path部分可以通过request.getServletPath()获取。
yourhost主机上运行的Tomcat Web Server接受到这个Url,根据Context定义,把yourApp这个网络路径映射为yourApp-dir/webapp,并在此目录下定位en/index.html,返回客户端。
en/index.html——en/index.jsp——en/index.do,上述演变,其中jsp时,Tomcat编译器会把jsp文件编译成Servlet,并调用这个Servlet;index.do时,Servlet中最重要的类之一RequestDispatcher登场了,RequestDispatcher根据WEB-INF/web.xml配置文件的定义,调用对应的Servlet来处理en/index.do这个路径。如果web.xml中没有定义对应en/index.do这个路径的Servlet,那么Tomcat返回"您请求的资源不存在"。
RequestDispatcher用于Web Server中,也可以用于应用程序中进行处理转向,资源定位。比如,我们在处理en/index.do的代码中调用。
request.getRequestDispatcher("cn/index.jsp").forward(request,response),就可以转交另外的资源cn/index.jsp来处理。
几乎所有的Web FrameWork都需要定义自己的Dispatch作用的Servlet,并调用RequestDispatcher进行转向处理。
对Web Frame源代码,两条主线:
1)、根据web.xml找到对应的servlet类。2)、搜索包含"RequestDipatcher"词的代码文件。
二、MVC结构,一般处理流程
处理Http Request的基本单位一般称为Action,是一个比Servlet轻量的多的接口定义,通常只有一两个方法,如Struts1.1中的execute(perform),validate等。
Url——Servlet映射通常定义在web.xml里,但MVC框架通常会有另外一个定义Url——Action映射文件,入口DispatcherServlet根据Url——Action的映射关系,把请求转发给Action。Action获得输入参数,调用商业逻辑,并把结果数据和View标识(Model&View)返回给DispatcherServlet。DispatcherServlet根据这个View标识定位相应的View Template Path,把处理转交给View。
View一般通过request.getAttribute()获得结果数据,并显示到客户端。一般由Action或者DispatcherServlet把结果数据设置到request.attribute里面。
三、EL表达式简述
JSP2.0中出现了Expression Language(EL)的语法,诸如,${... ...},${logininfo.username}。
jsp会从哪里找对象logininfo呢?从以下几个方面:
1、当前页面是否定义变量logininfo.
2、再依次从Request、Session、Application范围内寻找,直到找到为止。
3、如果最后依然没有找到匹配的变量,则返回null。
当然,我们也可以指定变量的寻找范围,可以在EL表达式中指定搜寻范围。
${PageScope.logininfo.username}、${RequestScope.logininfo.username}、${SessionScope.logininfo.username}、${ApplicationScope.logininfo.username}。
EL会自动根据结果返回不同的类型数据。
(对于Spring而言,所有逻辑单元返回的结果数据(ModelAndView),均作为Attribute被放置到HttpServletRequest对象返回,可参照org.springframework.web.servlet.view.InternalResourceView)。
四、MVC结构综述
1)、拦截请求,并把输入元素封装成特定的对象Model(例如:Struts1.1中的ActionForm);
2)、根据Url——Action的映射关系,找到对应的Action进行逻辑处理,并将(请求)数据对象作为参数输入。
3)、Action逻辑处理完毕后,返回一个结果数据和View标识。
4)、DispatcherServlet根据这个View标识定位相应的View Template Path,把处理转交给View并呈现给用户。
















