1.核心组件:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,要将它在web.xml里进行配置
2.struts.xml配置方法:
根元素<struts></struts>,
第二级元素<package></package>,该元素有name,namespace,extends属性。
name代表package元素的唯一性,namespace代表访问该页面的url路径组成部分之一,extends属性貌似一般都使用struts-default
第三级元素<action></action>,该元素有name,class,method属性。
name代表访问该页面的url组成部分之一,class代表action类的包路径,method代表访问该url会调用的方法名,不写method代表一般默认为写成method="execute"
第四级元素<result></result>,该元素有name属性,代表action中方法的返回值,result标签中的文本代表转发某个页面的路径。
3.action配置方法:
新建一个action类,不用继承任何类,在类里创建一个方法,方法访问修饰符为public,返回值为String类型。
action类里的方法执行起来一般都是转发到某个页面,如果是附带某些基本或者引用类型的数据展示到jsp上,那就需要用到el表达式了。用法还是和以前写spring的
时候一样,即${基本类型名称},${引用类型名称.引用类型属性},引用类型属性命名要符合javabean命名规范,第一个字母小写,后面每个单词首字母大写。
还有就是要注意展示到jsp页面的数据都需要为action的成员属性,都要加上get,set方法。
有时候还会遇到需要表单传数据到页面上的问题,表单的input name属性必须符合javabean命名规范,即<input type="text" name="user.userName"/>
每次一个请求过来,action对象都会被创建一次。发现这个的原因是我写了action类的构造方法,里面有syso输出文字。
Struts2如何实现MVC,与Spring MVC有什么不同?
Struts2采用filter充当前端控制器来处理请求,filter会根据struts.xml的配置,将请求分发给不同的业务控制器Action,再由Action处理具体的业务逻辑。Action处理完业务之后,filter会根据其返回的字符串,从struts.xml中找到对应的result,最终由result将请求转发给页面。
这个实现的思路与Spring MVC基本一致。其差异如下:
- Spring采用Servlet充当前端控制器,分发请求。
- Spring采用RequestMapping配置请求与业务控制器的关系。
- Spring采用Controller充当业务控制器。
- Spring采用ViewResolver将请求转发给页面。
在Struts2中页面如何向Action传参
Struts2中常用的传参方式有2种,分别是基本属性注入和域模型注入。
其中,基本属性注入是将表单中的数据,分别传给Action中声明的基本属性,要求这些属性有set方法,并且名称与表单中框体的name值一致。
域模型注入是将表单中的数据,传给Action中的一个实体对象,要求这个对象具有set方法,并且表单中框体的name中的表达式要有如下格式“对象.属性”。