发表于: 2017-11-17 21:56:26
1 710
一.今天完成的主要事情
1.学习struts的处理结果类型
struts中action执行完毕之后,不是直接返回视图,而是先返回相应的字符串,然后在配置文件中配置字符串对应的视图类型和视图名,由struts返回视图
配置文件中结果标签为<result>,该标签中有个name属性,我们通过配置name属性的key和value来将不同的返回结果返回不同的视图.
struts提供五种默认结果
SUCCESS, 约定含义为,执行成功,返回指定视图
NONE, 约定含义为执行成功,不返回指定视图
ERROR,约定含义为执行失败,返回错误视图
LOGIN,约定含义为请求因为没有登陆而没有正确执行,返回登陆视图
INPUT,约定含义为参数输入界面,一般要对这些参数进行验证,如果验证不通过,则自动返回登陆页面
2.学习struts的拦截器
拦截器在springMVC中也有,但是struts中的拦截器和springMVC拦截器的作用和地位是截然不同的,在springMVC中拦截器一般是自定义的,但是在struts中,struts2的很多核心功能都是由拦截器完成的
拦截器是在action之前或者之后执行一部分功能.
我们可以自定义一个拦截器,实现一个自定义拦截器主要需要以下几个步骤
首先,创建拦截器类,该类要实现Interceptor接口或者集成AbstractInterceptor抽象类
如果实现Interceptor接口就需要重写init(),interceptor(),destory()方法,如果继承AbstractInterceptor抽象类则不需要重写这三个方法,只需要重写interceptor方法即可.因为该抽象类实现了Interceptor接口,并重写了init()和destory()方法,所以我们就不用再重写这两个方法,只需要关注重点的interceptor方法即可
代码如下:
Interceptor方法中比较关键的是ActionInvocation参数,该参数讲Action和Interceptor结合在一起,所以我们可以调用该参数的invoke()方法来执行下一个拦截器或者是Action,该方法返回的结果就是Action执行后返回的结果
上面的这个拦截器实现了一个统计时间功能,统计该action执行所耗费的时间
其次,要再struts.xml文件中配置相关的拦截器
<package name="hello" namespace="/" extends="struts-default" abstract="false">
<!--定义/注册拦截器-->
<interceptors>
<interceptor name="countActionTime" class="com.ptteng.struts2.interceptor.interceptor.CountActionTimeInterceptor">
</interceptor>
</interceptors>
<!--全局结果集,要配置在interceptors下面,所有action返回success时默认的视图-->
<global-results>
<result name="success">/result.jsp</result>
</global-results>
<action name="hello" class="com.ptteng.struts2.interceptor.action.HelloWorldAction" method="hello">
<!--局部结果集会覆盖全局结果集-->
<result>/action.jsp</result>
<!--引用拦截器-->
<interceptor-ref name="countActionTime"></interceptor-ref>
<allowed-methods>hello</allowed-methods>
</action>
<action name="login" class="com.ptteng.struts2.interceptor.action.LoginAction" method="login">
<result>/WEB-INF/page/manager.jsp</result>
<result name="error">/WEB-INF/page/login.jsp</result>
<result name="input">/WEB-INF/page/login.jsp</result>
</action>
</package>
先在包中定义/注册拦截器,然后在action中引用拦截器或者将拦截器添加到拦截器栈中,然后再action中引用拦截器栈
拦截器栈就是在结构上将多个拦截器组合在一起,实现的功能实质和拦截器一样
3.学习如何用struts返回json字符串
struts中如果要使用json字符串,首先要在pom文件中添加json插件依赖,如图
然后返回json需要将该对象或者数据序列化,同时还要在action中有该属性的getter方法,官方提供的一个示例如下
如图,field2因为添加了transient关键字,声明该字段是一个短暂属性,所以不能被序列化,所以不能转化为json,而field3属性因为没有getter方法,所以也不能被序列化
最后,要在struts.xml文件中配置结果类型或者拦截器类型,如图
必须要集成json-default包
最后,返回的结果为
除此之外,我们还可以根据需求配置一些其他的属性,如不将对象中的某个字段序列化,或者指定我们需要的字段序列化,这里就不展开
二.明天计划完成的事情
1.和pm约时间,准备demo
2.继续学习struts的restful风给接口的插件
三.遇到的问题
暂无
四.收获
以上
五.项目情况
万事俱备,只欠demo
评论