访问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方式及如何获得参数的更多相关文章

  1. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

  2. 2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析

    介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析 这是我们的jar包里面找的位置目录 打开往下拉看到result-type节点 name那一列就是我们的type类型取值 上一篇博 ...

  3. 2018.11.19 Struts2中Action类的书写方式

    方式1: 方式2: 方式3

  4. struts2访问ServletAPI方式和获取参数的方式

    一.访问ServletAPI的三种方式 方式1:通过让Action类去实现感知接口. 此时项目依赖:servlet-api.jar. ServletRequestAware:感知HttpServlet ...

  5. 2018.11.29 Struts2中拦截器的学习&项目的实际运用

    struts2官方架构 拦截器的创建 第一种方式 第二种方式 看源码AbstractInterceptor 底层已经帮我们写过这些方法了 第三种方式(推荐) 拦截器API学习 放行 前后处理 不放行, ...

  6. 2018.11.26 struts2流程源码

    struts2的架构图 从最上面的类开始,也就是i 我们的核心过滤器strutsPrepareAndExecuteFilter 判断当前请求是否由struts2来处理,如果是就往else走,不由它来处 ...

  7. 2018.11.25 struts2与OGNL表达式的结合(高级)

    两者的结合原理 底层源码分析 栈原理 先进后出 我们的valuestack其实是一个接口 在实现类中有这个参数 CompoundRoot的类继承的是ArrayList,具体实现弹栈和压栈的方法具体实现 ...

  8. 2018.11.17 Struts2框架入门

    Struts2 框架学习 一.struts2是什么? (1)概念 (2)struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 (3)st ...

  9. 2018.11.24 struts2中的OGNL表达式及两者的结合

    OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...

随机推荐

  1. 远程上传下载文件-Xftp5

    Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP,  选择SF ...

  2. Bloom filter和Counting bloom filter

    Bloom filter原理: https://en.wikipedia.org/wiki/Bloom_filter 推导过程结合博客: https://blog.csdn.net/jiaomeng/ ...

  3. 关于TypeScript中null,undefined的使用

    TypeScript本质是javascript,因此基本上js所有的功能在ts上完全可以照搬照抄过来使用.根据ts的文档,有些我觉得值得商榷的——比如null,undefined就是例子. 文档上说一 ...

  4. 使用selenium时碰到的某一个坑

    如图:

  5. 百度地图api-动态添加覆盖物

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. python 对列表去重,并保持列表原来顺序

    mailto = ['cc', 'bbbb', 'afa', 'sss', 'bbbb', 'cc', 'shafa'] addr_to = list(set(mailto)) addr_to.sor ...

  7. 获取top10

    ips = ['', '123.125.71.49', '164.132.161.48', '217.182.132.55', '217.182.132.55', '217.182.132.94', ...

  8. 信鸽推送 C#版SDK

    信鸽官方sdk没提供C#版的DEMO,考虑到应该有其他.NET的也会用到信鸽,下面是我在使用信鸽过程中写的demo.有什么不对的地方,欢迎各位大牛指导. 使用过程中主要是有2个问题: 1.参数组装,本 ...

  9. Android使用主题属性引发的问题

    最近在做一个项目的Porting.直接改变了应用的Theme,最没有仔细的检查.结果应用在某些场景下直接就Crash了.还好,通过Log可以看到是在Inflate某个资源的时候出错导致的.通过定位资源 ...

  10. input placeholder 在chrome 浏览器自动填充时,背景色覆盖原有背景图片问题。

    user-block-name, .user-block-pwd { margin-bottom: 10%; text-align: center; position: relative; } .us ...