spring mvc 为什么要以servlet为入口

spring mvc 为什么要以servlet为入口,第1张

SpringMVC就猛行是Servlet呀。不过是一个Servlet调用不同的具体Bean来处理业务罢了。 评论(0)| 引用橘知派此答案| 举报 (2013-04-02 09:40) 0 逝水fox 2年圆贺前 相同的优化程度,相同的业务下,单以执行效率上说,servlet,没反射没那么多层次方法调用。

只要问及Spring MVC框架,这一题基本80%的概率会被问及,大致如下:

从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发,大致处理流程如下:

A.用户向服务器发送请求,请求被 springMVC前端控制器(DispatchServlet)捕获

B.前端控制器对请求URL进行解析,得到请求资源标识符(URL)然后根据该URL调用页面处理器(HandlerMapping)获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

C.前端控制器根据获得 Handler 选择一个合适的 HandlerAdapter 适配器处理

D. Handler 对数据处理完成以后将返回一个 ModelAndView()对象给前端控制器

E. Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,前端控制器通过ViewResolver 试图解析器将逻辑视图转化为真正的视图 View

F. DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端

@requestMapping:用于请求 url 映射。

@RequestBody: 注解伍羡实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。

@ResponseBody :注解实现将 controller 方法返回对象转化为 json 响应给客户。

@Conntroller:控制器的注解,表示是表现层,不能用用别的注解代替

在配置文件中(一般命名为springmvc.xml )通过开启 <mvc:annotation-driven>来实现注解处理器和适配器的开启。

解决 post 请求乱码:在 web.xml 里边配置一个 CharacterEncodingFilter 过滤器并设置编码为 utf-8即可。

解决 get 请求乱码:

在返回值前面加"forward:"就可以让结果转发

如"forward:user.do?name=method4"

在返回值前面加"衫橘手redirect:"就可以让返回值重定向

如"redirect: http://www.baidu.com "

A.springmvc的入口是一个servlet即前端控制器(DispatchServlet)

struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。

B.springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)

struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

C.springmvc通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模或嫌型数据通过reques域传输到页面,Jsp视图解析器默认使用jstl

Struts采用值栈存储请求和响应的数据,通过OGNL存取数据。

spring mvc的入氏郑口是servlet,而struts2是filter,这样就导致了二者的机制不同。

spring mvc是基于方法的设计,sturts2是基于类设计的。

springmvc将url和controller方法映射。映射成功后springmvc生成肆核孝一个裂稿Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似service开发。strts2每次请求都会实例一个action,每个action都会被注入属性。spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8275580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存