2018.11.21 struts2获得servletAPI方式及如何获得参数
访问servletAPI方式
第一种:通过ActionContext (重点及常用 都是获得原生对象)
原理

Action配置

被引入的配置文件

在页面调用取值


第二种:通过ServletActionContext

第三种:通过实现接口

也可以注入其他接口
在这里找

看源码
struts-default.xml文件

封装配置了20个拦截器,刚才配置的是servletConfig 拦截器

注册拦截器

进入源码的类ServletConfigInterceptor

核心方法


数据中心ActionContext
debug启动测试



如何获得参数
Action设置


servlet是线程不安全的,在运行期间只创建一个实例,
输入地址栏 http://localhost:8080/Struts2Day02/form1.jsp

获取结果


验证Action中的生命周期



结论
1.每次请求到来时,都会创建一个心的Action实例;
2.在struts2中的Action是线程安全的,能在方法之前声明接收的变量;可以使用成成员变量接受参数
第一种获取参数实例--- 属性驱动获得实例 (struts2官方推荐使用,但是现实开发不用)
记得提供属性的get/set方法


输入参数

控制台输出

第二种获取参数实例----对象驱动
声明对象


页面设置属性


控制台输出页面参数


第三种获取参数实例---模型驱动
Action配置

struts.xml 配置

页面输入


控制台输出

封装集合类型
List集合




也可以写集合下标


Map集合


点击提交会发现出现404错误

在map集合中,存储数据是以键值对的形式存在的,接下来修改参数页面


struts2中的mvc


附录
获取参数====对象驱动
package com.legend.c_param;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
/**
* 如何获得参数---方式一 属性驱动
* @author qichunlin
* action的生命周期
* 每次请求Action时都会穿件新的Action实例对象
*/
public class Demo8Action extends ActionSupport{
private static final long serialVersionUID = 1L;
//线程安全的
public Demo8Action() {
super();
System.out.println("Demo8Action被创建了");
}
//准备与参数键名称相同的属性
private String name;
//自动类型转换 只能转换8大基本数据类型以及对应包装类
private Integer age;
private Date birthday;
//支持特定类型字符串转换为Date 例如 yyyy-MM-dd
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute() throws Exception {
System.out.println("name参数值"+name+"年龄"+age+"生日"+birthday);
return SUCCESS;
}
}
获取参数====对象驱动
package com.legend.c_param;
import com.legend.domain.User;
import com.opensymphony.xwork2.ActionSupport;
/**
* 如何获得参数---方式二 对象驱动
* @author qichunlin
* action的生命周期
* 每次请求Action时都会穿件新的Action实例对象
*/
public class Demo9Action extends ActionSupport{
private static final long serialVersionUID = 1L;
//准备user对象
private User user;
//线程安全的
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Demo9Action() {
super();
System.out.println("Demo8Action被创建了");
}
//执行方法
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
}
获取参数===模型驱动
package com.legend.c_param;
import com.legend.domain.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 如何获得参数---方式三 模型驱动
* @author qichunlin
* action的生命周期
* 每次请求Action时都会穿件新的Action实例对象
*/
public class Demo10Action extends ActionSupport implements ModelDriven<User>{
private static final long serialVersionUID = 1L;
//准备user 成员变量
private User user = new User();
//执行方法
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
封装集合类型参数
package com.legend.c_param;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
/**
* 如何获得参数---封装集合类型参数
* @author qichunlin
* action的生命周期
* 每次请求Action时都会穿件新的Action实例对象
*/
public class Demo11Action extends ActionSupport {
private static final long serialVersionUID = 1L;
//list集合
private List<String> list;
//map集合
private Map<String,String> map;
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
//执行方法
public String execute() throws Exception {
System.out.println("list"+list);
System.out.println("map"+map);
return SUCCESS;
}
}
被引入的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 是否开启开发模式
struts.enable.DynamicMethodInvocation = false
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="param" namespace="/" extends="struts-default">
<action name="Demo8Action" class="com.legend.c_param.Demo8Action" method="execute">
<result name="success" type="dispatcher">/form1.jsp</result>
</action>
<action name="Demo9Action" class="com.legend.c_param.Demo9Action" method="execute">
<result name="success" type="dispatcher">/form2.jsp</result>
</action>
<action name="Demo10Action" class="com.legend.c_param.Demo10Action" method="execute">
<result name="success" type="dispatcher">/form3.jsp</result>
</action>
<action name="Demo11Action" class="com.legend.c_param.Demo11Action" method="execute">
<result name="success" type="dispatcher">/form4.jsp</result>
</action>
</package>
</struts>
Struts.xml主要配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 是否开启开发模式
struts.enable.DynamicMethodInvocation = false
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="result" namespace="/" extends="struts-default">
<!-- 转发 -->
<action name="Demo1Action" class="com.legend.action.Demo1Action" method="execute">
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
<!-- 重定向 -->
<action name="Demo2Action" class="com.legend.action.Demo2Action" method="execute">
<result name="success" type="redirect">/hello.jsp</result>
</action>
<!-- 转发到action -->
<action name="Demo3Action" class="com.legend.action.Demo3Action" method="execute">
<result type="chain">
<!-- action的名字 -->
<param name="actionName">Demo1Action</param>
<!-- action所在的命名空间 -->
<param name="namespace">/</param>
</result>
</action>
<!-- 转发到action -->
<action name="Demo4Action" class="com.legend.action.Demo4Action" method="execute">
<result type="redirectAction">
<!-- action的名字 -->
<param name="actionName">Demo1Action</param>
<!-- action所在的命名空间 -->
<param name="namespace">/</param>
</result>
</action>
</package>
<!-- 引入xml文件 -->
<include file="com/legend/b_api/struts.xml"></include>
<include file="com/legend/c_param/struts.xml"></include>
</struts>
2018.11.21 struts2获得servletAPI方式及如何获得参数的更多相关文章
- China Intelligent Office Summit(2018.11.21)
时间:2018.11.21地点:中关村软件园国际会议中心
- 2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析
介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析 这是我们的jar包里面找的位置目录 打开往下拉看到result-type节点 name那一列就是我们的type类型取值 上一篇博 ...
- 2018.11.19 Struts2中Action类的书写方式
方式1: 方式2: 方式3
- struts2访问ServletAPI方式和获取参数的方式
一.访问ServletAPI的三种方式 方式1:通过让Action类去实现感知接口. 此时项目依赖:servlet-api.jar. ServletRequestAware:感知HttpServlet ...
- 2018.11.29 Struts2中拦截器的学习&项目的实际运用
struts2官方架构 拦截器的创建 第一种方式 第二种方式 看源码AbstractInterceptor 底层已经帮我们写过这些方法了 第三种方式(推荐) 拦截器API学习 放行 前后处理 不放行, ...
- 2018.11.26 struts2流程源码
struts2的架构图 从最上面的类开始,也就是i 我们的核心过滤器strutsPrepareAndExecuteFilter 判断当前请求是否由struts2来处理,如果是就往else走,不由它来处 ...
- 2018.11.25 struts2与OGNL表达式的结合(高级)
两者的结合原理 底层源码分析 栈原理 先进后出 我们的valuestack其实是一个接口 在实现类中有这个参数 CompoundRoot的类继承的是ArrayList,具体实现弹栈和压栈的方法具体实现 ...
- 2018.11.17 Struts2框架入门
Struts2 框架学习 一.struts2是什么? (1)概念 (2)struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 (3)st ...
- 2018.11.24 struts2中的OGNL表达式及两者的结合
OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...
随机推荐
- oracle 备份恢复篇(一)---rman
一,rman介绍 RMAN(Recovery Manager)是随Oracle服务器软件一同安装的工具软件,它可以用来备份和恢复数据库文件.归档日志和控制文件,用来执行完全或不完全的数据库恢复.与传统 ...
- oracle 基础知识(四) 构成
一, oracle服务 一个oracle 服务由一个oracle 实例和一个oracle数据库组成. oracle = instance + database 总体概念: 二, oracle 实例 0 ...
- BNU4299——God Save the i-th Queen——————【皇后攻击,找到对应关系压缩空间】
God Save the i-th Queen Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %lld ...
- Java对象的生命周期与作用域的讨论(转)
导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对 ...
- [转]浅谈微信小程序
本文转自:http://www.cnblogs.com/liziyou/p/6340159.html 微信小程序 1.什么是小程序 小程序是指微信公众号平台小程序,小程序可以在微信内被便捷的获取和转播 ...
- 8、列表:ion-list
1.基本样式 no-lines 属性 隐藏列表项之间的分割符 inset 属性 去掉 ion-list的 外边框. 默认 的 ion-list 是有外边框的. /* ---示例代码----*/ & ...
- Cocos2d-x手游技术分享(1)-【天天打蚊子】数据存储与音效篇
前言: 手游项目<天天打蚊子>终于上线,特地写几篇技术分享文章,分享一下其中使用到的技术,其中使用cocos2d-x引擎,首选平台iOS,也请有iPhone或者iPad的朋友帮忙下载好评. ...
- ACM-线段树
http://blog.csdn.net/libin56842/article/details/8530197 基础可以看上面这篇文章 风格: maxn是题目给的最大区间,而节点数要开4倍,确切的说… ...
- sublime开启vi编辑器功能,与vi常用快捷键
sublime开启vi编辑器 install package -> vintageES 设置里面 ignored_packages 里面的vintage去掉 VI命令 游标控制 h 游标向左移 ...
- 10th week task -1
1:For each ... inFor...in ExamplesFor...of 对以上的内容进行 Examples和Explanation (1)For...in 以任意顺序遍历一个对象的可枚举 ...
