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框架处理。

  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/zlazm/p/7898584.html
Copyright © 2011-2022 走看看