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准备工 ...
随机推荐
- nginx 问题总结
1, 403错误 403是很常见的错误代码,一般就是未授权被禁止访问的意思. 可能的原因有两种:Nginx程序用户无权限访问web目录文件Nginx需要访问目录,但是autoindex选项被关闭 修复 ...
- 飞檐走壁navMesh
http://www.manew.com/thread-106030-1-1.html
- pat00-自测2. 素数对猜想 (20)
00-自测2. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn ...
- jqgrid 上移下移单元格
在表格中常常需要调整表格中数据的显示顺序,我用的是jqgrid,实现原理就是将表中的行数保存到数据库中,取数据时按行进行排序 1.上移,下移按钮 <a href="javascript ...
- c#-FrameWork02泛型
泛型 l 泛型(generic)编程是一种编程范式,它利用”参数化类型”将类型抽象化,从而可以实现更为灵活的复用.把数据类型参数化 sh泛型集合 泛型集合与集合的对比 泛型集合类 非泛型集合类 Li ...
- Csharp
c#简介 c#程序结构 c#基本语法 c#数据类型 c#类型转换 c#变量 c#常量 c#运算符 c#判断 c#循环 c#方法 c#简介 C# 是一个现代的.通用的.面向对象的编程语言,它是由微软(M ...
- VB.Net遍历已安装的程序卸载信息
Private Shared Function ProgramExists(ByVal pgName As String) As Boolean Dim temp As String = Nothin ...
- 1094 FBI树
1094 FBI树 2004年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 我们可以把由“ ...
- 1e6等于多少?
如果抽象成这样:aeb 要求a不能不写,也就是说是1也要写上 b必须是整数. 实现上就是 a*10^b a乘以10的b次方 所以楼主的就是1*10^6 100000
- JS中的继承方式总结
1. 原型链继承(又称类继承) Child.prototype = new Parent(); function Parent (name, age) { this.name = name; this ...