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准备工 ...
随机推荐
- linux 入门测验
cd . 当前目录.. 返回上一级目录 ../../../返回多级目录 grep "目标信息" 目标地址 -v :显示没有被匹配的信息 mkdir -p:创建多级目录 mkdir ...
- XLua 网络加载(基础操作)
LoadGameMethod 网上资源加载更新:加载场景中另建协程用来加载; public void LoadGameMethod() { StartCoroutine(start()); ...
- 基于前端js模板替换的多语言方案思考
最近在做将一个系统多语言化的项目,系统使用的是ASP.NET,直接使用了一种已有的方案:在页面渲染时采用正则表达式替换{XXX:001 确定}格式的标记.但是这个方式增加了服务端的字符串处理,对页面性 ...
- 虚拟机xp系统中Oracle 10g的安装
1 安装过程(11步) 2.如果是xp系统可以直接并双击解压目录下的setup.ext,出现安装界面,如下: 3.输入口令和确认口令,如:oracle,点击下一步,出现如下进度条. 注:此口令即是管理 ...
- 线程同步(windows平台):互斥对象
一:介绍 互斥对象是系统内核维护的一种数据结构,保证了对象对单个线程的访问权. 二:函数说明 创建互斥对象: HANDLE CreateMutex( LPSECURITY_ ...
- Mixamo Fuse10分钟创建角色
http://edu.manew.com/course/132 太6了
- vim源码编译启用python
坑:只指定with-python-config-dir没有指定enable-pythoninterp是没有用的 ./configure --enable-pythoninterp --with-pyt ...
- JDBC的PreparedStatement启动事务使用批处理executeBatch()
JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理, 普通的执行过程是:每处理一条数据,就访问一次数据库: 而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数, ...
- The Java serialization algorithm revealed---reference
Serialization is the process of saving an object's state to a sequence of bytes; deserialization is ...
- artDialog组件应用学习(三)
一.可以加载url的对话框 预览: 对话框编写代码 //弹出一个对话框,加载页面 function OpenBox(url, title, width, height) { seajs.use(['j ...
