1。Struts2介绍 Struts2和SpringMVC一样,都是基于MVC封装的框架 Struts1和Struts2没有关系有的也只是名称上的相似 Struts2是在xwork的基础上升级来的,想占个名称的便宜 Struts2的核心是过滤器2。框架搭建 1)导包 拷贝Struts2案例中的jar包 2)配置文件 1。web。xml中配置核心过滤器 参考案例中web。xml的配置 2。struts。xml 拷贝案例中的struts。xml到src目录下 3。部署,启动 解析struts。xml成功,说明Struts2是默认到classpath目录下找struts。xml配置文件解析 4。配置DTD约束 3。入门案例 需求:浏览器访问hello,页面跳转到hello。jsp 1)要一个Action(Springmvc中的Controller)来处理hello请求 2)hello。jsp 3)Action类和请求地址之间的映射关系 struts。xml配置文件中配置一个action 4)浏览器请求hello action配置,name属性指向的请求地址,去掉 重新启动访问,OK4。请求地址后缀 两个请求地址都可以正常访问服务器,进行页面跳转,Struts会自动截取。action后缀 Struts2默认截取的后缀只有。action 请求地址,可以携带后缀,也可以不带。但是一般来说,请求地址中,肯定会携带后缀,因为框架的过滤器拦截不可能拦截所有的请求(。js,。jsp,。css。),一般拦截。action 如果要支持。do,需要修改默认配置 在struts。xml中修改默认配置 请求: 一般来说不改默认配置,Struts2中的请求地址,就以。action结尾5。执行流程 1。tomcat启动的时候,加载web。xml,解析,然后实例化Struts2的核心过滤器 2)核心过滤器在初始化的过程,会加载解析配置文件struts。xml,解析所有的标签,将action标签解析放到容器中,key为当前action所属的package的namespaceaction标签的name属性 3)浏览器请求hello 4)tomcat接收到浏览器请求,解析应用名称,然后到对应的应用的web。xml中找,没有过滤器、servlet等需要拦截处理这个请求。这时,tomcat发现,核心过滤器需要拦截处理这个请求,tomcat就会把请求丢给核心过滤器 5)核心过滤器根据请求地址,找对应的action配置,然后找到class地址,实例化,反射调用指定方法。 6)方法执行完成会返回字符串,核心过滤器再根据返回字符串找对应的跳转地址,跳转的方式(默认转发),最后做页面跳转6。struts。xml1)constant标签 修改struts中的默认配置 2)package package指的是包,struts。xml中可以添加多个package,但是,一般一个配置文件,就只有一个package,对所有的action进行分类管理 属性 name:分类的包名,或者说package的模块名,一般命名需要见名知意、 namespace:属于请求地址(url)的组成部分。一般如果有指定name,那么namespace会和name保持一致 那么action的请求地址,需要在action的name属性之前,加上namespace 在同一个namespace中,action的name,不能重复 extends:继承,值为其他package的name属性,一般来说,自定义的package没有互相继承,只会继承自Struts的默认package,即strutsdefault,默认。 因为继承自默认的配置,所以struts在加载配置文件的时候,一定是先加载strutsdufault。xml配置文件3)action 请求地址和处理请求的类,方法之间的映射,以及方法返回值和跳转页面之间的映射 属性 name:请求地址 class:处理请求的类地址 method:处理请求的类中的方法名 4)result 方法返回值和跳转页面之间的映射 name:匹配的是方法返回值 标签中的text文本:跳转的页面 type:跳转的方式 type默认取值:dispatcher:转发 chain:转发到其他Action redirect:重定向 redirectAction:重定向到其他Action stream:一般用于ajax,或者文件下载 使用chain 5)globalresults 全局的返回配置 当方法返回值,没有在对应的action中找到相应的result标签,那么会去全局配置中找,只能用于当前的package,或者是继承了当前package的请求。 平级关系的package,不可用 当浏览器请求resultTest。action时,核心过滤器会拿resultPage字符串到action标签中找对应的result,发现没有,那么会继续去globalresults配置中去匹配 最终的结果,就是浏览器请求resultTest。action,页面会跳转到index。jsp6)include 项目中,action很多,为了分类管理,会整理成N个配置文件,这个时候,一般主配置文件会引入其他的配置文件(当然,也可以在核心过滤器启动的时候,告诉它加载多个配置文件) 路径变化,include也需要指定 7)struts。xml配置文件目录 如果重命名或者是路径有改变,需要在核心过滤器中配置 路径变化,include也需要指定 7。Action定义1)自定义对象 配置使用: 如果配置的时候,没有指定method,那么struts流程??2)实现Action接口 配置: 在实现了Action接口的HelloAction2中,也还是支持第一种配置方式,自定义方法,配置action中指定method 3)继承ActionSupport类 推荐 可以指定method,也可以不指定,不指定,默认调用execute方法 ActionSupport类,集成了Struts中的校验框架,如果要使用struts中的校验框架,那么Action就一定高继承ActionSupport 一般来说,使用Struts2,都会有一个BaseAction BaseActionextendsActionSupport{ privateHttpServletR privateHttpServletR privateHttpS } 自定义Action继承BaseAction8。访问ServletAPI BaseAction 子类继承 9。Action动态调用actionName!methodName。action strutscompany。xml Action配置相似,减少重复的配置,struts提供了actio动态访问,访问的时候动态指定需要调用的method 1)定义公共的action 2)打开动态调用 3)访问 actionName!methodName。action 使用占位符动态调用 strutscompanyall。xml页面请求地址:index。jsp 查询流程: 更新流程,操作之后,需要转发到其他的action 10。前后台传参,数据传递1)jspAction,传参a。简单类型String,int 定义全局变量,以及框架调用赋值的set方法 b。自定义实体类 定义全局变量,提供set方法 自定义实体类,需要同时定义getset方法,只有set不行,框架在赋值的时候,需要调用Action的getCompany方法获取对象 方法中直接使用company变量 jsp中传参,nameAction中的全局变量名。属性名 c。包装类 自定义对象中含有自定义对象。也是使用导航符属性名。属性名。属性名d。使用ModelDriven 1。实现ModelDriven接口,指定类型 2。提供getModel方法,方法中对company进行实例化 3。jsp页面,控件的name属性直接匹配实体类的属性名 2)Actionjsp数据传递 request。setAttribute,session。setAttribute Springmvc,使用ModelAndView,ModelMap Struts数据传递相对来说,更简单一点。只要Action中的全局变量有值,并且提供了get方法,跳转的页面就可以使用el取值》针对的是转发的跳转方式。 如果是重定向,需要使用session进行传值 方法中赋值 jsp中 或者赋值不是方法中,是前台提交的参数,后面跳转的页面,也可以el取值11。校验 1)Action,需要继承ActionSupport 2)重写validate方法 此方法,在所有的方法被调用之前 在validate方法中,对参数做校验 struts只要发现你调用过addFieldError,也就是说,流程中添加过错误信息,那么,流程到validate就结束,不会继续调用方法,不继续调用方法,就拿不到方法的返回值,struts提供了默认返回值input,所以result标签需要另外配置 jsp页面拿错误信息,使用struts标签库 针对某个特定的方法做的校验,方法名validate需要针对的方法的名称,第一个字母大写 s标签需要struts框架解析返回。 12。struts2springmybatis 1)导包 1。struts所有的包。拷贝teacherstruts2下的所有包 2。springmybatis所有的包。拷贝teacherspringmybatis04版本下的包 3。struts和spring的集成包 2)配置 1。struts。xml 2。applicationContext。xml 3。sqlMapConfig。xml 4。log4j。properties 5。web。xml struts2的核心过滤器 spring的监听配置 mapperaction配置版本 根据企业编码查询企业信息 1。Company。java,company。xml,CompanyMapper。java, CompanyServiceImpl。java,CompanyService。java CompanyAction。java index。jsp,companyDetail。jsp 2。company。xml需要注册到sqlMapConfig。xml中,还需要配置别名 3。applicationContext。xml中需要配置bean service使用注解 action使用bean配置 action需要配置成多例 4。struts。xml中的action配置 action中的class属性值为bean节点的ID值 5。index。jsp确认请求地址 mapperaction注解版本 将Action的bean配置,使用注解