程序员一代码搬运工
【Java学习心得和Java学习技术个人总结】

Struts2认识

 

★struts2框架中,从用户发出请求到获得响应整个过程的流转图。要求写出”类名”。p11的图。

流程:

-->FiterDispatcher
-->ActionProxy
-->ActionInvocation 
-->Interceptor(入)
-->Action
-->Result
-->Interceptor(出)
-->jsp/html
-->响应

 

 

!!! struts2和servlet的区别:

servlet:控制器非单例(对于每次请求,都会创建1个action对象。防止多线程同步造成的低效)

struts2:又是pojo(原生java类)(容易从web中剥离,用junit作测试)。

 

★struts2 和 struts1的区别:

struts2:又是 pojo(原生java类)(容易从web中剥离,用junit作测试)。

struts1:struts1的控制器从ActionServlet派生,还有formdata对象来向页面传递数据。

 

★什么叫做pojo(plain original java object):原生java类,没有实现任何接口,没有派生任何的父类。

优点:容易测试。

class student {}

 

★junit 4:作用可以替代main函数对java 对象的方法进行测试。

 

class BookTest extends TestCase
 {
    public testXXXX1()
  
  
    { ... }
 }

 

 

★struts.xml文件:支持分成几个子文件。

 

<struts>  
     <constant name="struts.i18n.encoding" value="gbk"/> 常量定义,处理 post参数
     <package name="xxx" extends="struts-default" namespace="/">
        <interceptors> --拦截器定义
           ...
        </interceptors>
        <action name="xxx" class="全路径" method="xxx">
            <result >/ok.jsp</result><!--没有name,默认是"success"。没有类型,默认是dispatcher(请求转发).
      
    type:dispatcher(请求转发,保留action数据)
          redirect(重定向 )
          redirectAction(重定向到下一个action)
          chain(action链,链中的下一个action,采用请求转发.前一个action的数据还在)
          stream(采用字节流方式传递数据)  .
        </action>
     </package>
  </struts>

 

 

★action对象的生命周期与request对象相同

 

★action对象的属性自动保存在 request作用域!

 

★拦截器的作用是:抽取中多个action中的公有功能模块。

 

★拦截器栈的作用是:把几个拦截器串起来。

 

★拦截器和过滤器的区别:

a:拦截器是struts2的一部分。而过滤器是java web程序的通用组件。

b:拦截器只能拦截发向action的请求。 过滤器可以拦截任何请求,包括img,html,jsp等。

c:struts2过滤器先执行,再执行拦截器。

 

★拦截器分两种:

1、action拦截器–> extends AbstractInterceptor

重写 intercept方法。

String result = invocation.invoke();–分界线。执行拦截器后面的action方法,获得返回值。

2、方法拦截器–>可以仅拦截action中的指定方法。

extends MethodFilterInterceptor。

 

★自定义校验器需要让action从ActionSupport派生。

 

★在action中重写validate()方法和validateXXX()方法的区别:

validate():执行所有的action业务方法前都校验.

validateXXX():仅执行actionXXX方法前校验。

只要在validate()或validateXXX()方法中用“addFieldError语句”抛出异常,action的业务方法进不执行,自动返回name=input的结果。

 

★执行顺序validateXXX()–>validate()–>XXX方法。

“如果validateXXX方法抛出异常,validate()方法仍然执行,但XXX方法不执行。”

 

★转换器的作用是:将表单参数转成自定义类型。

extends StrutsTypeConverter
{
    public Object coverFromString(String para[],...)
    { ... }
    //将请求参数数组转成1个自定义类型的对象!   
}

 

 

★转换器的文件名 :xwork_conversion.properties

 

★无需转换器,实现快速转换的方法:

class BookAction
{
   private  Book book;get/set
}
表单:<input name="book.bname"/> 
      <input name="book.bnum"/>

 

 

★action中,如何获取request和 session对象?

a:action implements ServletRequestAware
b:action代码中.
   ServeltContext.getContext().getRequest();
   Context.getContext().getSession();

 

 

★action的结果类型默认是:dipatcher。

 

★dipatcher和redirect和redirectAction和chain的区别:

dipatcher和chain:能保留action的数据

redirect和redirectAction:无法保留action的数据。

 

★action如何向下一个action中传递数据:

a:放action的属性

b:放session中

 

★值栈是:request作用域的一种数据,按先进后出,后进先出的顺序被读取。

 

★如何通过struts2标签从值栈读取数据?

 

a:<s:property>标签
       <s:property value="action的属性名"/>
       等价于
       <s:property value="#requestScope.action的属性名"/>
       等价于
       <s:property value="#attr.action的属性名"/>
 b:<s:iterator>标签
      <s:iterator value="list" var="s">
         ..
      </s:iterator>
 c:</s:iterator>
      <c:forEach items="${list}" var="s">
    </c:forEach>
  
    <s:debug> //在页面中加入超链接,点击后显示所有作用域的数据。

 

 

★struts2实现国际化需要哪些配置文件?

struts.xml文件中指定文件名前缀。

还需在src根目录下加:

前缀_zh_CN.properties

前缀_en_US.properties。

如果要对某个action生效,Acton名_前缀_zh_CN.properties,放于action文件夹下。

 

★需要在页面中使用什么标签读取:

可以用<s:fieldText> <s:propery>读取

<s:text>不行。

 

 

 

赞(0)
未经允许不得转载:程序员一代码搬运工 » Struts2认识
分享到: 更多 (0)