zoukankan      html  css  js  c++  java
  • struts2总结


    struts2
    1.Struts2跟Struts1的区别?
    action层对比: struts1必须继承, struts2可以继承也可以不继承
    线程方面对比: struts1单例模式(所有的请求共享同一个类的实例), struts2是原型模式(对每一个的请求都创建一个新的实例)
    依赖方面对比: struts1依赖servlet-api; struts2不依赖servlet-api;
    测试方面对比: struts1的action单元测试很困难; strtus2单元测试非常容易;
    封装方面对比: strtus1使用ActionForm对象获取jsp传递的参数; struts2有多种方式获取请求的数据;
    表达式的对比: struts1使用jstl表达式; struts2使用jstl,ognl等表达式;
    类型转换对比: struts1使用commons-beanutils进行类型转换; struts2使用OGNL表达式进行类型转换;


    2.Struts2的运行原理(执行流程)?
    1.客户端浏览器发出HTTP请求;
    2.根据web.xml配置,该请求被StrutsPrepareAndExecuteFilte(过滤器)接收;
    3.根据struts.xml配置,找到需要调用的Action类和方法,通过IoC方式或者是非IoC方式,将值注入Action;
    4.Action调用业务逻辑组件处理业务逻辑;
    5.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转相应页面;
    6.返回HTTP响应客户端浏览器。

    3.浅谈struts2拦截器, 你使用过哪些内置拦截器?
    1.conversionError(转换器错误拦截器):负责处理类型转换错误的拦截器;
    2.createSession(创建Session拦截器):负责创建一个HttpSession对象;
    3.clearSession (清除Session拦截器):负责销毁HttpSession对象;
    4.fileUpload(文件上传拦截器):主要用于文件上传;
    5.i18n(国际化拦截器):主要负责把用户所选的语言、区域放入用户Session中;
    6.logger(日志拦截器):主要是输出Action的名字,提供简单的日志输出;
    7.modelDriven(模型驱动拦截器):用于模型驱动的拦截器;
    8.params(参数过滤拦截器):负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值;
    9.workflow (验证拦截器) :负责调用Action类中的validate方法


    4.如何使用struts2中的validate方法验证数据;
    1.action类通过继承ActionSupport类来重写validate方法; //(这个方法是 validateable接口的,ActionSupport实现了这个接口)
    2.validate方法在execute方法之前执行,仅当数据合法时,才执行execute方法;
    若数据不合法时,通过addfielderror方法将错误信息添加到fieldError作用域中;
    3.判断是否存在fieldError,若存在则跳转到input所指向的jsp页面,否则执行execuute方法。

    5.struts2中validate的执行过程是怎么样的? jsp页面数据-->将请求参数转换为bean的属性-->
    是否出现异常(如类型转换异常)-->
    -- 是 ---> 将其保存到ActionContext对象-->conversionError拦截器将其加入到fieldError-->通过反射调用validateXxx()方法
    -- 否 ---> 通过反射调用validateXxx()方法(Xxx方法与execute的方法名要一致)
    -->调用validate()方法-->
    是否存在fieldError-->
    -- 是 ---> 跳转到你input指向的jsp页面,执行完毕
    -- 否 ---> 调用Action类的execute方法 --> 跳转到相应页面,执行完毕。
    6.如何在Action中使用request,response,session等对象? 有哪些方式? (2种方式)
    一、非IoC方式:
    HttpServletRequest request = ServletActionContext.getRequest();
     HttpServletResponse response = ServletActionContext.getResponse();
     HttpSession session = request.getSession();
    ServletContext application = session.getServletContext();

    二、IoC方式:
    需要实现 ServletRequestAware, ServletResponseAware, SessionAware, ServletContextAware这几个接口, 然后set注入从而间接实现servlet-api对象。
    public class BaseAction implements ServletRequestAware, ServletResponseAware, SessionAware, ServletContextAware {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected ServletContext application;
    protected Map session;
    public void setServletRequest(HttpServletRequest arg0) {
    this.request =arg0;
    }
    @Override
    public void setServletContext(ServletContext arg0) {
    this.application = arg0;

    }
    @Override
    public void setSession(Map<String, Object> arg0) {
    this.session = arg0;
    }
    @Override
    public void setServletResponse(HttpServletResponse arg0) {
    this.response = arg0;
    }
    }

    7.Struts2上传文件,如何设置上传文件格式和上传文件大小? 如何修改Struts默认的上传文件大小? 设置上传文件格式:在struts.xml中的action标签下配置以下标签 <interceptor-ref name="fileUploadStack" />
    <interceptor-ref name="fileUpload">
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
    </interceptor-ref>

    修改Struts默认的上传文件大小:在struts.xml中struts标签下配置 以下标签,value为文件上传的最大值
    <constant name="struts.multipart.maxSize" value="20971520"></constant>
    value为文件上传的最小值
    <constant name="struts.multipart.minSize" value="20971520"></constant>

    8.如何实现Struts2自定义拦截器;
    1.实现Interceptor 接口, 实现接口里面的方法
    2.继承AbstractInterceptor 抽象类, 重写里面的方法
    需要在struts.xml文件中配置interceptor 标签及 interceptor-stack拦截器链(栈)标签; 然后在每个action标签中引用即可


    9.Struts2 如何实现国际化
    需要struts.xml文件中定义<constant name="struts.custom.i18n.resources" value="message" />
    需要给不同的语言地区配置不同的资源文件; message_zh_CN.properties, message_en_US.properties, zh_TW, zh_HK, en_UK,

    在jsp页面使用s:text标签实现获取国际化中的数据;
    在action中使用getText方法实现获取国际化中的数据(前提是action必须继承ActionSupport);


    10.struts-default.xml 文件的作用
    struts-default.xml文件是struts2框架默认加载的配置文件。
    它定义struts2一些核心的bean和拦截器


    11.Struts 有哪些标签; 你使用过哪些?
    <s:textfield> 文本输入框,<s:textarea> 文本域输入框,<s:password> 密码输入框,<s:radio> 单选按钮,
    <s:form/> 表单标签 ,<s:submit/> 提交标签,<s:checkbox/> 多选框,<s:checkboxlist/> 复选框,
    <s:if>、<s:elseif>、<s:else> 判断标签,<s:select/> 下拉框。

    12.Struts支持哪些表达式? OGNL有什么特点?
    Struts支持的表达式:
    1.JSP表达式:格式为<%=key%>;
    2.EL表达式:格式为${key};
    3.OGNL表达式(Struts2特有:格式为 #key.a;


    OGNL的特点:
    1.支持对象方法调用,形式如:objName.methodName();
    2.支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括路径)]@[方法名 | 值名];
    3.支持赋值操作和表达式串联;
    4.访问OGNL上下文(OGNL context)和ActionContext;
    5.操作集合对象。


    13.OGNL表达式中’#’, ‘%’, ’$’ 三个符号有哪些作用?
    #有三种用途:
    1.访问非根对象;
    2.用于过滤和投影(projecting)集合,如: books.{?#this.price>35};
    3.构造Map,如: #{'foo1':'bar1', 'foo2':'bar2'}。

    %符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

    $有两种用途:
    1.在国际化资源文件中,引用OGNL表达式;
    2.在Struts2配置文件中,引用OGNL表达式 。

    14.Struts2中返回结果类型(struts-default.xml)中的dispatcher, redirect,stream 和redirect-action的区别?
    dispatcher 和 redirect 跳转到 view(jsp页面等);
    redirectAction 跳转到 action;
    stream 将原始数据作为流传递回浏览器端,对下载的内容和图片非常有用;

    dispatcher 服务器间的跳转,浏览器的url不变;redirect 和 redirectAction 是客户端间的跳转,浏览器的URL改变。
    15.ActionSupport类的作用?
    ActionSupport类是一个工具类,它已经实现了Action接口。
    除此之外,它还实现了Validateable接口,提供了数据校验功能。
    通过继承该ActionSupport类,此类中实现了很多的实用接口,提供了很多默认方法,简化Struts 2的Action开发。

    16.Struts2 拦截器有哪些用处? 你在项目中是如何使用的?
    拦截器是对调用的Action起作用,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,
    也可以在一个action执行前阻止其执行。

    根据业务需求在struts.xml文件中配置interceptor 标签及 interceptor-stack拦截器链(栈)标签;
    然后在每个action标签中引用即可


    17.Struts2 有哪些核心类? 说说他们在框架中的作用?
    1.ActionSupport,自定义action都可以继承,简化Struts 2的Action开发
    2.AbstractInterceptor,自定义拦截器都继承于它,可以根据需求自定义拦截器类
    3.RequestAware,SessionAware,ApplicationAware,
    ServletRequestAware,ServletResponseAware,ServletContextAware,提供IcO方式注入的action的核心类;


    20.Struts2中解决重复提交的token 思想是什么?
    需要在jsp的页面使用s:token标签;
    需要在struts.xml文件的action中配置<interceptor-ref name="token" />
    需要配置一个返回invalid.token结果对应的页面 <result name="invalid.token">/reg.jsp </result>


    22.struts2的四个主题simple,xhtml(默认主题),css_xhtml和ajax的区别?
    1.simple主题是最简单的主题,它是最底层的结构,主要用于构建附加的功能或者行为;
    2.xhtml主题是Struts2的默认主题,它对simple主题进行扩展;
    3.css_xhtml主题则对原有的xhtml主题进行了扩展,在xhtml主题基础上加入了CSS样式控制;
    4.ajax主题在xhtml主题基础上增加了如下特性:
    1.支持Ajax方式的客户端校验。
    2.支持远程表单的异步提交(最好和submit标签一起使用)。
    3.提供高级的div标签,允许实现局部更新部分HTML的功能。
    4.提供高级的a标签,允许动态加载并执行远端的javaScript代码。
    5.提供支持ajax的tabbedPanel。
    6.提供"富客户端"模型的pub-sub事件模型。


    23.FilterDispatcher(StrutsPrepareAndExecuteFilter)核心控制器的作用?

    FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,
    它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。
    如果用户请求以action结尾,该请求将被转入Struts2框架处理。

  • 相关阅读:
    11.枚举类.md
    10. Lambda表达式.md
    9.内部类
    8.抽象类、接口和多态.md
    7.final关键字.md
    jQuery学习笔记(5)-事件与事件对象
    Log4Net学习笔记(1)-完整的例子
    SqlServer知识点-操作xml
    NHibernate常见错误汇总(0)-持续更新中
    jQuery学习笔记(4)-设置元素的属性和样式
  • 原文地址:https://www.cnblogs.com/zlazm/p/7898584.html
Copyright © 2011-2022 走看看