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>

Struts2问题总结的更多相关文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  2. 菜鸟学Struts2——Interceptors

    昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...

  3. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  4. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  5. 菜鸟学Struts2——Actions

    在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...

  6. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  7. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  8. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  10. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. ES6十大特性

    本文主要针对ES6做一个简要介绍. 主要译自:  http://webapplog.com/ES6/comment-page-1/.也许你还不知道ES6是什么, 实际上, 它是一种新的javascri ...

  2. Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类

    该工具类是在JavaWeb中连接mysql所用到的通用工具类 该类用于Java+Servlet的编程中,方便数据库的操作,连接,获取其列表值.下面是这个数据库操作类的通用方法,基本上能够用于类里面只含 ...

  3. org.apache.commons.io.Charsets

    requiredCharsets:由Java平台支持字符集对象标准名称,构造一个sorted map. public void test() { Map<String, Charset> ...

  4. 开源日历TimesSquare在iOS7下诡异渲染的解决办法

    因为没有时间自己写一个日历,所以暂时使用了一个三方的日历https://github.com/square/objc-TimesSquare 但是在iOS7下.突然产生了一个诡异的BUG..如下图: ...

  5. 详解UIView的frame、bounds和center属性

    From: http://ios.wpjam.com/2011/08/29/uiview-frame-bounds-center/ 1.概要 翻开ios官方开发文档,赫然发现上面对这三个属性的解释如下 ...

  6. 从数据库中选取数据形成select标签

    添加文章时用代码如下: <select name="NClass" id="NClass" class="sel"> <? ...

  7. spring batch的使用和定时器Quart的使用

    Spring Batch是一个基于Spring的企业级批处理框架,它通过配合定时器Quartz来轻易实现大批量的数据读取或插入,并且全程自动化,无需人员管理. 在使用spring batch之前,得对 ...

  8. Linux学习之十三-vi和vim编辑器及其快捷键

    vi和vim编辑器及其快捷键 1.vi与vim区别 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. vim的这些优势主要体现在以下几个方 ...

  9. 2016.6.20 tomcat安装出现No Java Virtual Machine found in..

    安装tomcat时,选择安装路径为自定义路径,但是出现提示: No Java Virtual Machine found in.. 心想这和java虚拟机什么关系啊.百度了之后发现,安装过程中有一步是 ...

  10. FMSC 使用理解

    看了非常长时间 FMSC资料 都说的模糊的. 事实上非常easy: fsmc就是为了扩展内存的,如我们在stm32芯片外加入一个sram芯片.那么我们仅仅须要把 sram芯片的地址线和数据线和stm3 ...