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>

  • 相关阅读:
    由群里在职的同学给出污染物推断题想到的
    参考文献期刊和会议的缩写
    并行程序开发笔记
    对有关推理方法的理解---支离破碎篇
    改基金的困惑与无奈
    对生物信息学基础的补习
    DPI深度报文检测架构及关键技术实现
    OSGi 和 C++
    CentOS安装glibc-2.14,错误安装libc.so.6丢失急救办法
    误删除libc.so.6的解决方法
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7145101.html
Copyright © 2011-2022 走看看