韩伟力内容技术开发框架SSH之Struts2SSH之HibernateSSH之Spring一个SSH的Demo内容安排技术开发框架123SSH之Struts2SSH之Hibernate4SSH之Spring5SSHDemo为什么要使用框架Java世界为什么会框架横飞,说到底还是规范化的需要。纯JSP和Struts写Web谁快,摆明了是JSP。那为什么用Struts?原因在于100个人写出来的JSP,有100种写法;而100个人写出来的Struts,基本相似。Struts之成功,正缘于其在JavaWeb层的规范化方面所做出的贡献。技术开发框架SSH:Struts+Spring+HibernateStruts规范内容呈现层到业务逻辑处理层的代码Hibernate规范业务逻辑处理层到数据源的代码Spring规范业务逻辑处理层内部和Struts、Hibernate的代码EasyJWebJSFEasyJWeb2.0EasyJWeb2.0的构成核心MVC。EasyJWeb的核心是一个基于模板技术实现的MVC框架;它能让我们用非常简洁的代码写基于Java的Web应用。容器及通用业务逻辑封装。作为一个旨在让基于Java的Web应用程序开发变得直接、快速、简易的框架,EasyJWeb提供了一个IoC容器,并对企业级应用中的一些通用业务逻辑(如分页、查询、DAO等)进行了抽象及封装,提供了一套可以直接操作、应用企业资源的组件及API。代码生成引擎及工具。仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。如数据库添删改查(CRUD)代码生成、自动页面模版生成、自动配置文件管理等。EasyJWeb插件体系,项目中的各种实用功能的扩展,可以灵活地通过基于插件的形式安装到EasyJWeb中,提供各种针对性的功能。如ajax实用插件、代码生成插件等。JSF(JavaServerFace)JSFJavaServerFaces(JSF)是一种用于构建Web应用程序的新标准Java框架。它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。JavaServerFaces通过提供模型-视图-控制器设计模式的一个简洁实现,同时在不牺牲开发能力和灵活性的前提下提供高效的以组件为中心的开发,解决了JavaWeb开发的许多历史问题。此外,因为JSF是一种Java标准,因此多个软件供应商将继续提供始终高效的开发环境,这些开发环境毫无疑问将达到或很可能超过专有的可视化开发环境。内容安排技术开发框架123SSH之Struts2SSH之Hibernate4SSH之Spring5SSHDemoStruts1.0原理ActionServletJSPJavaBean数据库ActionActionForm,ActionMapping123456开发时只需关注:·两个核心组件:ActionFormAction·一个配置文件1、页面提交的数据封装到ActionForm中2、通过请求路径查找Struts-config.xml中Action的配置,找到并调用对应的ActionController(控制器)Model(模型)View(视图)查找ActionMapping,找到正确的JSP页面,并转发配置文件struts-config.xml配置FormBean和ActionBean服务器启动时,Struts装载struts-config.xml信息struts-configform-beansform-beanname=addForm“type=“web.form.AddForm//form-beansaction-mappingsactionname=addFormpath=/addscope=requesttype=“web.action.AddActionforwardname=inputpath=/add.jsp/forwardname=resultpath=/add_result.jsp//action/action-mappings/struts-configStruts1.0的缺点所支持的表现层技术比较单一只支持JSP,不支持目前流行的FreeMarker、Velocity等与ServletAPI耦合严重,难于测试它完全是基于ServletAPI的,所以在Struts1的业务逻辑控制器内,充满了大量的ServletAPI。Servlet严重依赖于Web服务器,尤其是HttpServletRequest和HttpServletResponse两个参数,通常由Web容器负责实例化。一旦脱离了Web服务器,Action将很难测试。属于侵入式设计Action中包含了大量的Struts1.0的API,影响了代码的重构。一旦系统需要重构时,这些Action类将完全没有利用价值,成为一堆废品。Struts2Struts2是在WebWork2基础发展而来的。和struts1一样,Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。那么既然有了struts1,为何还要推出struts2。主要是因为struts2有以下优点:1在软件设计上Struts2没有像struts1那样跟ServletAPI和strutsAPI有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和strutsAPI。Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。publicclassOrderListActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{}}2Struts2提供了拦截器,实现如权限拦截等功能。3Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。4Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等5Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。6提供了全局范围、包范围和Action范围的国际化资源文件管理实现Struts1.0的缺点publicclassLoginActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsAuctionException{LoginFormloginForm=(LoginForm)form;//当用户名为scott,密码为tiger时返回成功if(“scott”.equals(loginForm.getUsername()&&“tiger”.equals(loginForm.getPassword()){returnmapping.findForward(“success”);}else{returnmapping.findForward(“error);}}}业务逻辑控制器必须继承Struts1提供的Action类//将其强制类型转换为登录用的ActionForm返回一个ActionForward对象Struts2Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个兼容WebWork和Struts1的MVC框架。WebWorkWebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EEWeb框架WebWork支持更多的表现层技术,有更好的适应性。例如:Velocity、FreeMarkerWebWork采用了一种更加松耦合的设计,让Action不再与ServletAPI耦合。使单元测试更加方便。Action无须与WebWork耦合,具有更好的代码重用率。什么是Struts2?Struts框架架构Struts2的体系与Struts1.x体系差别非常大,因为Struts2使用了WebWork的设计核心(XWork)。在Struts2中使用拦截器来处理用户请求,从而允许用户业务逻辑控制器与ServletAPI分离。MVC/Struts2架构Struts2控制器业务逻辑控制器ActionStruts2的业务控制器并没有与ServletAPI耦合,所以无法处理客户请求,而Struts2提供了系列拦截器负责将HttpServletRequest请求中的参数解析出来,然后输出给Action。Struts2体系结构Struts2工作流程结构(1)客户端提交一个(HttpServletRequest)请求。(2)请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先是ActionContextCleanUp,再是其他过滤器(SiteMesh等),最后到FilterDispatcher。(3)FilterDispatcher接收到请求后,询问ActionMapper是否需要调用某个Action来处理这个(HttpServletRequest)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。(4)ActionProxy通过ConfigurationManager(struts.xml)询问框架的配置文件,找到需要调用的Action类(该Action类一般是程序员自定义的处理请求的类)。(5)ActionProxy创建一个ActionInvocation(Action的调用者)实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。(6)一旦Action执行完毕,ActionInvocation根据struts.xml中的配置找到对应的返回结果result。然后根据结果返回对应的视图呈现给客户端(JSP、FreeMarker等)。Struts2sequenceActionMapper和ActionMappingorg.apache.struts2.dispatcher.mapper.ActionMapper接口在HTTP请求和action调用请求之间提供了一个映射。当给定一个HTTP请求时,ActionMapper根据请求的URI来查找是否有对应的action调用,如果有,则返回一个描述了action调用的ActionMapper;如果没有匹配的action调用请求,则返回null.Struts2框架对该接口提供的默认实现是org.apache.struts2.dispatcher.mapper.DefaultActionMapper.ActionProxy和ActionInvocationActionProxy在XWork中和真正的Action充当代理的角色,在通过框架执行Action的过程中,因为是使用代理而