服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序。
使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构
三层架构
表现层:web层/Controller层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型
业务层:server层,处理公司具体的业务逻辑的
持久层:dao层(Data Access Object 数据访问对象),用来操作数据库的
MVC(Model View Controller)模型视图控制器
Model:数据模型,JavaBean的类,用来进行数据封装。
View:指JSP、HTML用来展示数据给用户。
Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等(Hibernate Validator)
SpringMVC三大组件:
HandlerMapping
处理器映射器:作用:根据客户端请求的资源路径,查找匹配的
Controller
及 拦截器(类似过滤器)链
HandlerAdapter
处理器适配器:作用:用于适配调用不同的
Controller
执行Controller,得到模型和视图
ViewResolver
视图解析器:作用:用于解析视图,根据视图路径找到真实视图(页面)
过滤器(Filter)和 拦截器(Interceptor)的区别?
拦截器(Interceptor)需要在SpringMVC.xml中配置,依赖于SpringMVC框架;
过滤器(Filter) 需要在web.xml中配置,依赖于 Servlet 容器。
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、拦截器不依赖与servlet容器,而过滤器依赖与servlet容器,
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
SpringMVC原理
前端控制器(DispatcherServlet) | 配置的DispatcherServlet把Tomcat的默认处理器覆盖掉了 | DispatcherServlet没有处理静态资源的能力,但会将静态资源转交给Tomcat中的Servlet 处理 |
处理器映射(HandlerMapping) | 根据客户端请求的资源路径,查找匹配的Controller及拦截器(类似过滤器)链 | 负责找Controller类,返回资源路径URL |
处理器适配器(HandlerAdapter) | 用于适配调用不同的Controller执行Controller,得到模型和视图 | 负责调用Controller类,封装视图和数据 ModelAndView |
视图解析器(ViewResolver) |
用于解析视图,根据视图路径找到真实视图(页面) | 负责解析view |
拓展:DispatcherServlet配置成
/
和/*
的区别:
对JSP的处理不同。当客户端请求了
xxx.jsp
时如果DispatcherServlet配置的是
/*
,不能正常访问JSP
/*
是目录匹配,优先级高于扩展名匹配(Tomcat里有JspServlet
,路径是*.jsp
)必定是由DispatcherServlet来处理JSP,但是DispatcherServlet不具备查找和处理jsp的能力,会报错
如果DispatcherServlet配置的是
/
,可以正常访问JSP
/
是缺省匹配,优先级低于扩展名匹配(Tomcat里有JspServlet
,路径是*.jsp
)必定是由Tomcat来处理JSP,Tomcat本身具备查找和处理JSP的能力,可以正常访问JSP
映射路径的优先级:完全路径匹配 > 目录匹配 > 扩展名匹配 > 缺省匹配
映射路径的优先级: /aa > /* > *.jsp 或 *.do > /