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>
Struts2问题总结的更多相关文章
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 菜鸟学Struts2——Interceptors
昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...
- 菜鸟学Struts2——零配置(Convention )
又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...
- 菜鸟学Struts2——Results
在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...
- 菜鸟学Struts2——Actions
在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 13、零配置Struts2开发
Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
随机推荐
- luogu P1651 塔
题目描述 小明很喜欢摆积木,现在他正在玩的积木是由N个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块.每个木块只能用一次,也可以不用 ...
- Interactive Extensions简介
自.net 3.5起,MS在System.Linq命名空间下的Enumerable对象中提供了一组IEnumerable的扩展方法,从而极大的方便了我们的查询操作.尽管如此,由于IEnumerable ...
- 使用log4net无法将日志记录插入mysql数据库解决办法
写在前面 今天没事研究了下,将日志文件写入mysql数据库,因为新公司用的数据库也是mysql,项目中需要将日志信息写入数据库,没办法,就研究了下.在使用过程中遇到一个很蛋疼的问题.最后解决了,郁闷了 ...
- quick-coco2d下的事件
qucik下的事件机制很简洁,也很简单,能够处理大多数的自定义时间,我们新建一个类型,然后用扩展的方式实现事件,之前quick的文档上很详细,但是很悲哀,傻逼的的网站现在是404,记下来,怕到时候忘记 ...
- HDU4004
题目大意,有一条长度为L和河流,中间穿插n个石凳,青蛙跳m次经过石凳后到达对岸,求青蛙每次跳跃的最大距离的最小值 本题数据量大n<500000,显然简单的o(n*n)算法是通过不了的,在输入大量 ...
- Flume NetCat Demo
准备工作: 1.apache官网下载flume 2.解压flume 3.修改flume-env.sh,配置JAVA_HOME NetCat采集Demo: 1.在conf中创建netcat-logger ...
- 取消sudo的密码
终端输入sudo visudo,显示为以下内容: 我们只要修改其中的一点内容,就可以实现sudo不需要输入密码了 sudo su -chmod +w /etc/sudoersvim /etc/sudo ...
- PS中混合模式是什么意思?
PS中图层混合模式中的溶解,变暗,正片叠底,颜色加深,线性加深,叠加,柔光,亮光,强光,线性光,点光,实色混合,差值,排除,色相,饱和度,颜色,亮度各是什么原理? Normal 正常模式,也是 ...
- Android开发之WebView具体解释
概述: 一个显示网页的视图.这个类是你能够滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础.它使用了WebKit渲染引擎来显示网页,包含向前和向后导航的方法(通过历史记录) ...
- 【Python】创建和使用类
面向对象编程是最有效的软件编写方法之一 创建Dog类 class Dog(): '''一次模拟小狗的简单测试''' def __init__(self,name,age): self.name = n ...