ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
我们都知道SSH是目前比较流行的一个Web应用程序开源框架,而struts又是之中的领头框架,究竟它有怎样的力量竟然可以博客IT界的眼球??一起来看!! ###一、演变之处--MVC 要了解struts必须先来了解MVC,MVC并不是Java语言所特有的设计思想,也不是Web程序所特有的思想,它是所有面向对象程序设计语言都要遵守的设计规范。简单来说,MVC将一个应用程序分为三个部分:Model(模型)、View(视图)和Controller(控制器)。这三个部分以最小的耦合来协同工作,从而最大限度的提高程序的可扩展性。 那么它们之间如何运行才能达到上述的目标呢?请看下图: ![](https://box.kancloud.cn/2016-03-10_56e132d94184d.jpg) 而struts2就是MVC的一种表现形式。下面就一起去探索初露羞面的这位姑娘! ### 二、struts的小秘密 #### 1.为什么使用 ♬.它是建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,因此,它天生就有MVC所带来的一系列优点,如:结构层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等; ♬.其次,它是个开源项目得到了包括它的发明者Craig R.McClanahan在内的一些程序大师和高手持续而细心的呵护,并且经受了实战的检验,使其功能越来越强大,体系也日臻完善; ♬.它对其他技术和框架显示出很好的融合性。 #### 2.struts2应用程序的开发: 1)在web.xml文件中定义核心filter来拦截用户的请求: 由于Web应用是基于请求/响应架构的应用,所以不管哪个MVC Web框架,都需要在web.xml文件中配置该框架的核心Servlet或者filter,这样才可以让该框架介入到Web应用中: ~~~ <!-- 配置Struts2的核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ~~~ 2)如果需要以post方式提交用户的请求,则需要定义包含表单数据的jsp页面。但是如果仅仅是以get方式来发送请求,则无需进行该步骤; 3)定义处理用户的Action类:这一步是MVC框架中必不可少的,Action就相当于controller,主要负责调用Model中的方法来处理用户的请求。 4)配置Action。一直以来我们都有一种思维定势,使用xml文件对Action进行陪孩子,而这个过程就是指定哪个请求对应哪个Action进行处理,从而让核心控制器根据该配置来       创建合适的Action实例,并调用该Action的业务控制方法: ~~~ <action name="login" class="cn.itcast.shop.adminUser.action.LoginAction"> ............. </action> ~~~ 5)配置处理结果和物理视图资源之间的对应关系: 当Action处理用户请求结束后,通常会返回一个处理结果可以认为该名称就是逻辑视图的名称,该逻辑视图需要和制定的物理资源产生关联,所以我们需要配置处理结果之间的关系: ~~~ <!-- 配置用户模块的Action --> <action name="user_*" class="userAction" method="{1}"> <result name="registPage">/WEB-INF/jsp/regist.jsp</result> <result name="input">/WEB-INF/jsp/regist.jsp</result> <result name="loginPage">/WEB-INF/jsp/login.jsp</result> <result name="login">/WEB-INF/jsp/login.jsp</result> <result name="loginSuccess" type="redirectAction">index</result> <result name="quit" type="redirectAction">index</result> <result name="checkcodeFail">/WEB-INF/jsp/regist.jsp</result> </action> ~~~ #### 3.实现的流程: ![](https://box.kancloud.cn/2016-03-10_56e132d958b1d.jpg) 从图中可以看出,struts2框架的控制下,用户请求不再需要向jsp页面发送,而是由核心控制器strutsPreparedAndExecuteFilter 调用 jsp页面来生成响应,此处的调用并不是直接调用,而是将请求forward到指定的jsp页面上。 关于struts2的分析就先到这里,SSH其他框架的讲解请期待接下来的博客!