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. Loj #6287 诗歌

    link: https://loj.ac/problem/6287 一开始差点写FFT了23333,并且FFT还能算这样的三元组的数量而且还不用要求这是一个排列.... 但这太大材小用了(而且很可能被 ...

  2. Display LOV (List Of Values) Using Show_Lov In Oracle Forms

    Show_Lov Function is used to display list of values (LOV) in Oracle Forms. It returns TRUE if the us ...

  3. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  4. Python scapy 实现一个简易 arp 攻击脚本

    原文链接:http://www.jianshu.com/p/df5918069612 scapy 是 python 写的一个功能强大的交互式数据包处理程序,可用来发送.嗅探.解析和伪造网络数据包,常常 ...

  5. Struts2学习记录-Value Stack(值栈)和OGNL表达式

    仅仅是学习记录.把我知道的都说出来 一.值栈的作用 记录处理当前请求的action的数据. 二,小样例 有两个action:Action1和Action2 Action1有两个属性:name和pass ...

  6. Web开发框架 SSH 简介

    Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp.Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明. 官方地址:http://struts.apac ...

  7. iWatch报错: Missing com.apple.developer.healthkit entitlement

    今天开发iWatch项目,报错: Optional (Error "Missing come.apple.developer.healthkit entitlement.") Us ...

  8. mongodb配置副本集(多台服务器间的副本集搭建) replica[ˈrɛplɪkə]

    副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了“主节点挂掉了,整个集群内会自动切换”的问题.我们来看看mongoDB副本集的架构图: 由图可以看到客户端连接到整个副本集 ...

  9. CentOS下配置iptables防火墙 linux NAT(iptables)配置

    CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/syscon ...

  10. Python将JSON格式数据转换为SQL语句以便导入MySQL数据库

    前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据.我们希望把这些数据导入到MySQL数据库中.phpMyadmin能够把MySQL数据库中的数据导出为JSON格式文件,但却 ...