SpringMVC原理篇

1.SpringMVC工作原理
① 客户端发送一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),
web容器将请求转交给DispatcherServlet
② DispatcherServlet接收到这个请求后将根据请求的信息(URL、http方法、报文、参数、cookie等信息)以及HandlerMapping的配置找到
处理请求的处理器(Handlerr)
③-④ DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler,Handler将具体的处理进行封装,在由具体的HandlerAdapter对Handler进行具体的调用
⑤ Handler对数据处理完成以后将返回一个ModelAndView对象给DispatcherServlet
⑥ 由于Handler返回的ModelAndView只是一个逻辑视图并不是一个正式的视图,所以DispatcherServlet通过viewResolver将逻辑视图转化为真正的视图
⑦ Dispatcher通过model解析出ModelAndView中的参数进行解析最终展现出完整的view并返回给客户端

2.WebService如何与客户端交互
① webServices通过SOAP协议进行参数的接收与返回值的传递。
② SOAP协议在web上提供软件服务,使用WSDL文件进行说明,通过UDDI进行注册
③ WSDL文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些信息,大多数情况下由软件自动生成和使用
④ XML是一种扩展型可标记语言,面向短期临时数据和万维网络。
⑤ UDDI是一个主要针对web服务供应商和使用者的项目,在用户能够调用web服务之前,必须确定这个服务包含哪些商务方法,找到被调用的接口定义,还要服务端来编制软件;UDDI是一种根据描述文章来引导系统查找响应服务的机制,UDDI利用SOAP消息机制来发布、编译、浏览及查找注册信息,它采用XML格式来封装各种不同类型的数据,并且发送到注册中心来返回需要的数据。

3.SpringMVC常用注解
① @RequestMapping 用来定义访问接口,可以在类名和方法上使用
② @ResponseBody 用来序列化返回值,可以写在方法上方或返回值前面
③ @Autowired 根据SpringMVC的依赖注入通过包扫描自动注入
④ @Resource 根据SpringMVC的依赖注入通过配置文件注入
⑤ @Controller 用来声明控制器层
⑥ @Service 用来声明业务层

4.springMVC与struts2的区别
① Struts2是类级别的拦截,一个类对应一个request上下文
② SpringMVC是方法级别的拦截,一个方法对应一个request上下文
③ Struts2的Action变量时共享的,每次请求创建一个Action对象
④ SpringMVC的方法之间基本是独立的,独享request和response,数据请求通过参数获取,方法之间不共享呢变量
⑤ Struts2需要针对每个request进行封装,把request/session等servlet生命周期的变量封装成一个个Map供给每个Action使用,耗内存
⑥ 拦截器:Struts2有自己的interceptor SpringMVC使用的是独立的AOP方式,导致Struts2的配置文件比SpringMVC大
⑦ SpringMVC的入口是servlet,而Struts2是filter导致二者的运行机制不同
⑧ SpringMVC集成了Ajax使用方便,而Struts2是拦截器继承了Ajax需要安装插件或自己代码集成
⑨ SpringMVC验证支持JSR303,处理灵活方便
⑩ SpringMVC和Spring是无缝对接的,项目管理和安全高
⑪ Struts2更符合OOP的编程思想,SpringMVC是在servlet上扩展的
        ⑫ SpringMVC开发效率和性能高

5.拦截器和过滤器的区别
① 拦截器inteceptor是基于java的反射机制的,而过滤器Filter是基于函数回调实现filter接口中的doFilter方法,回调函数实现的
② 拦截器不依赖于servlet容器,过滤器filter依赖servlet,没有servlet无法回调doFilter
③ 拦截器只能对action请求起作用,而filter可以对所有请求起作用,filter过滤范围比拦截器大
④ 拦截器可以访问action上下文,值栈里的对象,而过滤器filter不能
⑤ 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
⑥ 拦截器可以获取IOC容器中的各个bean,而过滤器不行

猜你喜欢

转载自blog.csdn.net/yongqi_wang/article/details/80534334