Struts基础知识

这里写图片描述
上图是model2的流程。在model2架构中,Servlet作为前端控制器,负责接收客户端发送的请求,在Servlet中只包含控制逻辑和简单地前端处理;然后调用后端JavaBean来完成实际的逻辑处理,最后转发到相应的JSP页面处理现实逻辑。

Struts2应用开发步骤:
1、在web.xml文件中定义核心filter来拦截用户请求。
2、如果用post提交请求,则定义包含表单数据的jsp页面。只是get请求就无须这一步。
3、定义处理用户请求的action类。
4、配置Action
5、配置处理结果和物理视图资源之间的对应关系。
6、编写视图资源。如果action需要传数据给视图资源可以使用OGNL表达式。

这里写图片描述

Struts2配置
下载好struts2,导入struts2相应jar包。然后编辑web.xml文件,配置struts2的核心Filter。
接下来就是在web-inf/classes下写structs.xml配置文件。
struts2常量配置和包含其他配置文件。
为了避免struts.xm过于庞大,可以将struts.xml分解成多个配置文件,然后用struts.xml包含其他配置文件。被包含的配置文件和struts.xml没什么区别,都放在web-inf/classes路径下。

实现Action
Struts2的Action是一个普通的pojo类,包含一个无参数execute方法。Struts2使用Action来封装HTTP请求参数和处理结果,里面包含对请求参数或结果对应的属性及其setter和getter方法。(系统只是通过setter和getter方法处理请求参数,而不是field名,所以是否包含field并不重要,重要的是要包含setter和getter方法
如果用户的http请求中包含了名为tip的请求参数,系统会调用Action类的setTip方法,将请求参数传给Acion实例。
通过Struts2标签来输出tip属性值。< s:property valie=”tip”>
ActionSupport实现了Action类,里面提供了很多默认方法,直接ActionSupport可以简化开发。

Struts2提供了ActionContext类,用此可以访问Servlet API.
Struts2中还提供了几个接口,使实现接口的类可以直接访问Servlet API.例如实现ServletResponseAware接口可以直接获得HttpServletResponse。但是不能通过获取的HttpServletResponse生成服务器相应。因为Action只是业务控制器。
Servlet还提供了ServletActionContext,该类的静态方法可以在Action中访问Servlet API.

配置Action
Struts2的核心组件就是Action,拦截器等,Struts2使用包来管理他们。
< package>必须指定name属性,这是引用这个包的唯一标识。可以指定extends,表示该包继承另一个包,如果是抽象包,则加上abstract=”true”属性。namespace指定包的命名空间(以”/”开头)。而
当包指定了命名空间后,包下所有的Action处理的URL应该是命名空间+Action名。
namespace=”/”就代表根命名空间。
如果请求为/login.action,就会到根命名空间找名为login的Action。找不到就去默认空间查找。
如果请求为/bookservice/search/get.action,就会去/bookservice/search的命名空间查找,找不到就去默认空间查找,而不会去/bookservice命名空间查找。

Action至少得指定name属性。class属性不指定默认是ActionSupport。name指定action所处理的请求的URL,class属性指定Action的实现类。
Action是一个逻辑控制器,不直接对浏览器生成任何响应,因此处理完用户请求后,将指定资源呈现给用户。一个< result>定义逻辑视图和物理视图之间的一次映射。
使用Action动态方法调用可以再js中使用form.action=”login!regist”使表单提交login Action的regist方法。
action可以指定method方法。默认的是excute()方法。
action的name属性可以使用”*”通配符,class、method、result使用{N}来指定name属性的第N个值.
如果有URL为abcAction.action的请求,就先给名为abcAction的Action处理,没有abcAction就给第一个abcAction能匹配的Action处理。所以我们可以将name=”*”的Action配置在最后。
当找不到对应的Action时,系统默认的Action将处理用户请求,我们可以用< default-action-ref >元素完成默认Action配置。

Action处理完用户请求后并未直接将请求转发给任何具体的视图资源,而是返回一个资源视图(普通字符串),Struts2框架收到这个逻辑视图后,把请求转发给对应的视图资源呈现给用户。
Struts2使用< result>配置结果根据< result>所在位置的不同,Struts2提供了2种结果。
局部结果,< result>作为< action/..>的子元素配置
全局结果,< result>作为< global-results/..>的子元素配置
result有通常指定两个属性:
name:逻辑视图名,默认是”success”
type:指定结果类型,默认是”dispatcher”
Struts2支持的结果类型如下:
chain、dispatcher、freemarker、httpheader、redirect、redirectAction、stream、velocity、xslt、plainText
使用plainText返回的是页面源代码,必须指定charSet参数
使用dispatcher将请求forward到指定的JSP资源。
使用redirect将请求重定向到指定的视图资源。(丢失所有的请求参数,请求属性,Action处理结果)
使用redirectAction将请求重定向到指定的Action。两个参数是actionName,namespace
使用stream向浏览器返回一个Inputstream。

定义result的时候允许使用OGNL表达式,这种用法允许根据Action属性值来定位物理视图资源。${属性名}
全局结果,如果有一个Action里包含了与全局结果名同名的结果,则全局结果会被Action的局部结果覆盖

Struts2提供了一个PreResultListener接口,在Action完成控制处理之后,系统转入实际的物理视图之间被回调。可以被Action、拦截器添加。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值