java开发和structs的关系_Java程序员必会springmvc框架三大组件工作流程与struts2框架区别...

112d6b06b28e9e9ccf4135e35ac3c9f3.png

SpringMVC围绕着Servlet进行开发Web,代码的实现上同时也依赖Spring开发,不然也不会叫做SpringMVC,本文着重强调的重点在于SpringMVC的工作流程,并不设计具体代码开发,所以并不要求掌握Spring的知识。

SpringMVC的处理流程为,用户访问的地址被DispathcherServlet的url-pattern匹配到后,

afb18d7caebe744c88e51c806eb4984f.png

DispathcherServlet会在内部从Spring容器中拿到HandlerMapping对象。

a106a3abbb5584611edae87a0412ed69.png

该对象内部有一个LinkedHashMap,

4f3089135f44b5575dccba27c8b93061.png

在Spring容器初始化时,我们在@requestMapping中填写的url路径被存入这个map中作为Key值,一旦用户发送请求DispathcherServlet通过RequestMappingHandlerMapping中获取请求地址然后迭代这个Map寻求匹配的Key值,也就是我们在@requestMapping中写的路径,如果匹配成功就能够获取到我们的controller处理器的全包名和方法名

ca50f4bb9a77f649bf474db35181398c.png

这时候DispathcherServlet创建一个HandlerAdapter接口下的子类对象执行从map中获取的方法,也就是我们在controller编写的方法

fccb6c2b907386786c3665acff0a3f74.png

,返回一个ModelAndView对象,DispathcherServlet又从SpringWeb容器中拿到ViewResolver对象,

2dd023bf33366ca8ca81ec99b193507d.png

ViewResolver对象能够将上面方法的返回值ModelAndView中的ViewName解析出,该ViewName就是我们写的/WebINFO/下的JSP页面的这段字符串,ViewResolver通过该地址将整个jsp页面解析成View对象,将对象返回给DispathcherServlet。然后调用processDispatchResult方法对页面进行渲染,也就是将controller处理后的model数据与ViewResolver返回的view对象进行渲染,就是将他们重新组合成了一个处理后的jsp页面对象返回给浏览器。

以上就是DispathcherServlet的工作流程了,可以说整个流程都是在DispathcherServlet的方法内部进行的,SpringMVC框架的三大组件处理器映射器,处理器适配器,和视图解析器都是由DispathcherServlet从Spring的webapp容器中获取的。非常有意思的设计,下面让我们来看看这三大组件都有哪些配置。

2696984294372f53116b09136479fee2.png

这是一个property文件,位于springmvc框架的依赖jar包下。红色框框标识出都是DispathcherServlet中的对象属性。

LocaleResolver 是一个国际化的解析器,它使用i18n国际化的标准能够为不同国家的展示不同语言的页面。ThemeResolver 用于防止注入式攻击。HandlerMapping 配置默认使用的requestMapping映射器。HandlerAdapter 配置默认使用的requestMapping适配器。HandlerExceptionResolver 异常解析器RequestToViewNameTranslator 请求jsp路径时的事务管理器ViewResolver 配置默认使用的r视图解析器。

等等等等,同类型Struts2框架有22种拦截器分别对应不同的功能,因为web层与用户进行直接交互所以功能相比service和dao都要复杂些。我们也可以在xml文件中自定义每个功能所使用的类。

2e3b3bb2f7d4ea71883d1ecc09db1ca0.png

我们可以在xml文件中手动指定想要使用的组件类型,只需要将该类注册到spring容器中即可,不需要配置其他东西。

35a17cb6d12fc285fad05806ae2296e6.png

该标签用于启动mvc的注解驱动,有这个标签相当于我们默认使用注解来表示请求路径,就是@requestMapping注解,默认在上面property文件中是启用的,所以这个标签可以不写。

1378f81b90633cbd4982654807bcfe37.png

InternalResourceViewResolver则是个很有用的功能,他能够为我们controller中set的ViewName补充前后缀。见下图

06f1401554ba4d3a84e31dad0f857ca4.png

图中代码本是配置jsp页面的路径的,有了上面的配置后我们可以省略所以jsp页面共同的前后缀部分,最后拼接后的路径为/WIN-INF/asas.jsp。

本文多是偏概念的部分,因为SpringMVC框架使用起来确实非常简单,下面说一下与Struts2框架的区别。

springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用jstl。

对于我本人来说struts2使用起来相比springmvc更加复杂。以上就是springMVC框架的的工作流程以及与Struts2框架的区别了。大家学会了吗,请在下方留言吧,如果有不明白的地方在评论区留下问题我会回复的,web层是异常最多的地方,遇到异常一定要冷静分析,有搞不定的贴上来让大家一起帮忙看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值