zoukankan      html  css  js  c++  java
  • Struts2问题总结

    1 如何搭建Struts2开发环境?

    Struts2 获取   http://struts.apache.org/download.cgi

    Struts-2.3.16.3-all.zip

    创建Web项目,引入Struts2 搭建所需 jar包:

    commons-fileupload-1.3.1.jar:Struts文件的上传和下载

    commons-io-2.2.jar:文件读取

    commons-lang3-3.1.jar:为java.lang包提供扩展

    freemarker-2.3.19.jar:FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具

    ognl-3.0.6.jar:支持ognl表达式

    javassist-3.11.0.GA.jar:分析、编辑和创建JAVA字节码的类库

    struts2-core-2.3.16.3.jar:Struts2的核心包

    xwork-core-2.3.16.3.jar:xwork的核心包

    asm-*.jar 类似javassits

    log4j-1.2.17.jar 日志类库

    修改web.xml

    配置struts.xml


    2 创建Action有几种方式?

    普通的Java类,编写public String execute(){}方法

    实现Action接口,重写execute()方法

    继承ActionSupport类,重写execute()方法


    3 Action接收参数的常用方式有哪些?

    属性方式 ------------>

    Action中,对应表单参数的属性及对应的setter、getter

    页面中,(1)Form中元素name取值属性名(2)取值:<s:property value="属性名"/>

    应用场景,接收的参数字段个数少

    JavaBean方式 ------------>将模型数据从Action中分离了出来

    Action中,为Action添加实体属性以及setter和getter

    页面中,(1)Form中元素name取值对象名.属性名(2)<s:property value="对象名.属性名" />

    应用场景,字段多,可以封装为一个对象:将模型数据从Action中分离出来时

    ModelDriven方式 ------------>

    Action中,Action实现ModelDriven接口,重写方法getModel();Action中要提供JavaBean类型的属性,需要实例化,但不需要相应的setter和getter方法

    页面中,(1)Form中元素name取值属性名(2)取值:<s:property value="属性名" />

    应用场景,和JavaBean方式相似,不常用


    4 如何调用Action方法?

    访问Action时,默认调用的时execute()方法

    可以在Action中定义多个业务方法,方法签名要与execute()方法相同

    配置多个<action>标签,method属性指定调用的方法

    <action name="house_add" class="com.pb.web.action.HouseAction" method="add">
    <action name="house_update" class="com.pb.web.action.HouseAction" method=“update">

    5 result的type取值有哪些?

    type属性

      指定result的类型,不同类型的result代表了不同的结果输出

      默认取值dispatcher,将请求转发(forward)到本应用程序里指定的资源

    可以在struts-default.xml中查看result的类型

      redirect: 请求重定向到指定的URL

      redirectAction: 请求重定向到指定的Action

      chain: Action链式处理,将请求转发(forward)到指定的Action

      json: 实现Ajax时返回JSON对象

      ... ...

      可以自定义结果类型

    dispatcher与redirect的区别

      dispatcher转发形式,把参数等资源转发给本资源

      redirect重定向到指定URL,参数等资源丢失

    redirect与redirectAction的区别

      redirect跳转页面或Action; 可以跳转到本应用程序内部或者外部

      redirectAction跳转Action; 只能跳转本应用程序内部


    6 全局结果如何进行配置?

    全局结果

      想一想:

        场景一:有些操作需要跳转公共页面,比如:登录首页

        场景二:每个Action进行逻辑控制时,可能都会遇到异常的情况,需要跳转到一个公共的错误页面

      解决方案:

        方案一:在struts.xml中的每个<action>中都配置一个<result>

        方案二:全局结果(global-results):可以满足多个Action共享一个结果

    全局结果小结:

      使用<result>来配置,只不过不是在<action>中嵌套,而是在<global-results>中嵌套

      当所有Action需要共享某个结果时,可以定义为全局结果。比如,类似登录页面这样的公共页面、错误页面、异常页面

      全局结果的影响范围为整个包的所有Action,如果不是对所有Action都有效的结果,不要定义在<global-results>中

     
    7 全局异常处理如何进行配置?

      <global-exception-mappings>:全局异常映射

        <package>的子元素

        要配置一个全局结果<global-results>

         <global-results>应该在<global-exception-mappings>之前

        可以声明到一个父包中,被其它包继承


    8 访问Servlet API有哪些方式?

     Struts2的Action实现了MVC中C层的作用

      针对请求向用户显示所在城市信息

      登录后保存用户信息

      保存当前的在线人数

    传统Servlet API类型

      HttpServletRequest

      HttpSession

      ServletContext

    Struts2中传统Servlet API类型被处理成Map类型

      访问更方便

      不依赖传统Servlet API类型 -- 解耦合

    关于ActionContext

      所在包com.opensymphony.xwork2

      ActionContext被称为Action上下文或Action环境

      ActionContext提供每个Action运行时与之相关的所有信息

    访问Servlet API

      ActionContext类提供getContext()方法获得实例

      通过ActionContext类的实例可获得Map类型的请求、会话等

      通过put()和get()方法在Map类型的对象中存取数据

    Action类中声明request等对象

      Map<String, Object> request;

    获得ActionContext实例

      ActionContext ac = ActionContext.getContext();

    获取request等对象

      request = (Map<String, Object>)ac.get("request");

    在request等对象中保存数据

      request.put("loginAccess","登录地点是:北京");

      request.get("loginAccess");

    在页面中获取保存数据提倡的方式

      <s:property value = "#request.loginAccess" />访问Servlet API

    之前获得Servlet API对象的方式

      自己获得request: ac.get("request")

      自己获得session: ac.getSession()

    让“别人”为你提供Servlet API的对象

      通过实现相应接口获得Servlet API对象

      获得request需要实现RequestAware接口

      获得session需要实现SessionAware接口

      获得application需要实现ApplicationAware接口

    9 值栈存储了哪些信息?

    OGNL可以直接访问值栈中的值

      值栈(Value Stack)存放数据的内存空间,值栈中存放了Action的实例,如:可以通过OGNL来访问Action实例中的属性值。


    10 Stack Context存储了哪些信息?

    Stack Context, 存放数据的内存空间, Stack Context 中存放了

      request的参数、属性

      session的属性、application的属性

      attr:在所有的属性范围中获取值,一次搜索page、request、session和application

    11 OGNL如何访问值栈和Stack Context的内容?

    OGNL可以通过#访问Stack Context的值。


    12 Struts2标签有哪些分类?

    通用标签(Generic Tags)

      数据标签(Data Tags)

      控制标签(Control Tags)

    UI标签(UI Tags)

    Ajax标签(Ajax Tags)

    13 Struts2实现数据验证有哪几种方式?

    客户端验证:

      数据提交前在客户端验证

      可使用JavaScript或jQuery实现

      特点:1.减少客户的等待时间   2.减少服务器的压力

    服务器端验证

      在数据提交后服务器端验证

      特点:1.防止“绕过”客户端验证提交非法数据    2.可以在服务器端处理数据前确保数据的合法性


    14 列举常用的自带拦截器,并说明其的作用?

    params拦截器

      负责将请求参数设置为Action属性

    servletConfig拦截器

      将源于Servlet API的各种对象注入到Action

    fileUpload拦截器

      对文件上传提供支持

    modelDriven拦截器

      如果Action实现了ModelDriven接口,则将getModel()返回的结果压入值栈

    validation拦截器

      调用验证框架进行数据验证

    workflow拦截器

      调用Action类的validate(),执行编码验证


    15 文件上传主要步骤有哪些?

      01.在JSP页面实现在客户端选择上传文件

      02.配置struts.xml,拦截器会自动接收上传的文件

      03.在Action中写代码把上传的文件存入服务器中

      04.跳转至新页面展示上传的文件


    16 Struts2中怎么实现AJAX?

     Ajax

      jQuery

      JSON

    Struts2

      json-lib

      struts2-json-plugin

    public class DataAction extends ActionSupport {
      private String name;
      private int age;
      private User user;
      private List<User> users;


      //处理请求的方法
      public String getData(){
      //代码省略
      return SUCCESS;
      }

      //省略getter和setter
    }

    <package name="data" namespace="/" extends="json-default">

      <action name="getData" class="action.DataAction" method="getData">

        <result type="json">

          <param name="includeProperties">name,user.*</param>

        </result>

      </action>

    </package>

  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7145101.html
Copyright © 2011-2022 走看看