结果处理

  1.转发

    type可以不写,默认就是转发    

    <package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="dispatcher">/index.jsp</result>
</action>
</package>

    运行后浏览器地址不变

  2.重定向

    type="redirect" 就是重定向

    <package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="redirect">/index.jsp</result>
</action>
</package>

    运行后浏览器地址变为index.jsp了

  3.转发到Action(不常用)

    运行后地址不变

    <package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="chain">
<param name="actionName">HaHaAction</param>
<!--要转发的命名空间 -->
<param name="namespace">/hello</param>
</result>
</action>
<action name="HaHaAction" class="com.struts2.web.UserAction" method="Add">
<result name="success">/chain.jsp</result>
</action>
</package>

    先执行hello 执行完毕后 再执行Add

  4.重定向到Action

    运行后地址变为/hello/HaHaAction.action (默认.action 或不写)

    <package name="hello" namespace="/hello" extends="struts-default">
<action name="HelloAction" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="redirectAction">
<param name="actionName">HaHaAction</param>
<!--要转发的命名空间 -->
<param name="namespace">/hello</param>
</result>
</action>
<action name="HaHaAction" class="com.struts2.web.UserAction" method="Add">
<result name="success">/chain.jsp</result>
</action>
</package>

    

获得原生ServletAPI

  struts2 中 有一个ActionContext 数据中心对象 通过他可以获得

    原生request、原生response、原生ServletContext、request域、session域、application域、param参数、attr域 分别对应

    HttpServletRequest、HttpServletResponse、ServletContext、 四大域和param参数都是Map 通过setAttribute 和getAttribute 分别设置和获取他们的Map键值对 attr域是(request域、session域、application域 三合一)

    ActionContext 数据中心 也是一个Map

    ActionContext生命周期:每次请求时都会创建一个与请求对应的ActionContext对象,请求处理完ActionContext销毁。

      获得ActionContext对象,struts2设计的是,将ActionContext对象创建好之后,将ActionContext与当前线程绑定。我们要获得ActionContext,只需要从ThreadLocal中获得即可。

  方式1.通过ActionContext

public class HelloAction extends ActionSupport{
public String hello(){
//request域(struts2并不推荐获取原生request域)
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
//推荐设置request域方式
ActionContext.getContext().put("requestKey","requestValue"); //session域
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name","zhagnsan");
//application域
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("username","zhangsan"); return "success";
}
}
  <body>
${request.requestKey}
${session.name}
${application.username}
</body>

  方式2.通过ServletActionContext(代码中其实也是从ActionContext中获得的) struts不推荐原生的

public class HelloAction extends ActionSupport{
public String hello(){
//原生request
HttpServletRequest request = ServletActionContext.getRequest();
//原生resposne
HttpServletResponse response = ServletActionContext.getResponse();
//原生session
HttpSession session = request.getSession();
//原生ServletContext
ServletContext servletContext = ServletActionContext.getServletContext(); return "success";
}
}

  方式3.实现接口的方式(实现各自对应的接口)(通过拦截器完成的)

public class HelloAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
public String hello(){
request.setAttribute("adsf","sdf"); return "success";
} @Override
public void setServletRequest(HttpServletRequest httpServletRequest) {
this.request = request;
}
}

获取参数

  方式1.属性驱动获得参数(只能转换8大基本数据类型及对应包装类和Date日期类)

设置带get set方法的属性  参数名要与属性名一致 (每次请求Action时都会创建新的Action实例对象,struts是线程安全的,可以使用成员变量接收参数。servlet不行)

  <form action="${pageContext.request.contextPath}/User/User_Add">
<input name="name">
<button type="submit">提交</button>
</form>
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
public String Add(){ System.out.println(name); return "success";
}
}

  方式2.对象驱动  新建一个user类

package com.struts2.domain;

public class User {
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} private String name; }

提交表单时,名字设置为user.name

  <form action="${pageContext.request.contextPath}/User/User_Add">
<input name="user.name">
<button type="submit">提交</button>
</form>

action中

package com.struts2.web;

import com.opensymphony.xwork2.ActionSupport;
import com.struts2.domain.User; public class UserAction extends ActionSupport {
private User user = new User();
public String Add(){
System.out.println(user);
return "success";
}
}

  方式3.模型驱动(缺点只能返回一个对象)

User类不变,前台不需要user.name了

  <form action="${pageContext.request.contextPath}/User/User_Add">
<input name="name">
<button type="submit">提交</button>
</form>

Action实现ModelDriven<T>接口

package com.struts2.web;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.domain.User; public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String Add(){
user = getModel();
System.out.println(user);
return "success";
} @Override
public User getModel() {
return user;
}
}

集合类型参数

public class UserAction extends ActionSupport{
public List<String> getList() {
return list;
} public void setList(List<String> list) {
this.list = list;
} private List<String> list;
public String Add(){
System.out.println(list.size());
return "success";
}
}
  <form action="${pageContext.request.contextPath}/User/User_Add" method="post">
<input name="list[0]">
<input name="list[1]">
<button type="submit">提交</button>
</form>

struts2结果处理、获取参数(二)的更多相关文章

  1. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  2. struts2框架学习笔记4:获取参数

    第一种参数获取方式: 编写一个前端页面,提交表单,做示例: <form action="${pageContext.request.contextPath}/Demo1Action&q ...

  3. Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较

    servlet中通过request.getParameter()从网页获取参数 通过request session servletContext几个域对象的setAttribute(String ,O ...

  4. Struts2获取参数的几种方式

    Struts2由于是一个贴心的框架,所以获取参数这种体力活,就无需再通过原生的request来getParameter了,有如下几种方式进行获取 1.Action中属性驱动,必须提供与form表单na ...

  5. 微信小程序通过二维码获取参数运行

    小程序开发过程中会遇到参数id会通过二维码获取,然后执行接口获取数据,但是难免会遇到带过来的参数出现乱码,这样就需要解码,多个参数时就需要进行处理取我们需要的字段值:小程序开发过程中会遇到参数id会通 ...

  6. Struts2的标签库(二)——OGNL表达式

    Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...

  7. Struts2的处理结果(二)——处理结果的类型

    Struts2的处理结果(二) --处理结果的类型 1.Struts2內建的支持的结果类型: 在<result>元素中的type属性,确定了结果类型. chain:Action链式处理的结 ...

  8. Servlet生命周期以及获取参数

    1. 创建Servlet几种方式  1) 实现Servlet接口     控制Servlet的生命周期       构造器       init()       service()       des ...

  9. Struts2中Action接收参数的方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...

随机推荐

  1. 【Flutter学习】基本组件之AppBar顶部导航栏

    一,概述 AppBar 显示在app的顶部.AppBar包含5大部分,如下图: 二,构造函数及参数含义 构造函数 AppBar({ Key key, this.leading, //在标题前面显示的一 ...

  2. 彩色MT9V034摄像头 Bayer转rgb FPGA实现

    1 图像bayer格式介绍 bayer格式是伊士曼·柯达公司科学家Bryce Bayer发明的,Bryce Bayer所发明的拜耳阵列被广泛运用数字图像.Bayer格式是相机内部的原始数据, 一般后缀 ...

  3. 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

    如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看 ...

  4. java web 基本属性

    page指令 属性 描述 默认值 language 指定JSP页面使用的脚本语言 java import contenType include指令 taglib注释 <!--我是html注释-- ...

  5. 清北学堂模拟赛d1t4 一道图论好题(graph)

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,不仅有边权还有点权. LYK给出了一个子图的定义,一张图G’={V’,E’}被称作G的子图,当且仅当 ·G ...

  6. DSP广告系统架构及关键技术解析(转)

    广告和网络游戏是互联网企业主要的盈利模式 广告是广告主通过媒体以尽可能低成本的方式与用户达成接触的商业行为.也就是说按照某种市场意图接触相应人群,影响其中潜在用户,使其选择广告主产品的几率增加,或对广 ...

  7. 中缀表达式转逆波兰式(后缀表达式)求值 C++ Stack

    给一个包含小数的中缀表达式 求出它的值 首先转换为后缀表达式然后利用stack求出值 转换规则: 如果字符为'('  push else if 字符为 ')' 出栈运算符直到遇到‘(' else if ...

  8. 【从0開始Tornado建站】发表文章和评论

            先上个效果图: 这是每一个用户的主页.由于是基本功能.所以用户头像.爱好等信息都还没有,在下一阶段加上.右側"发表新文章"按钮点击后进入发表文章的页面: 之前尝试过 ...

  9. PF, Page File, 页面文件

    PF, Page File, 页面文件 是硬盘中用来当作内存使用的,仅仅提高物理内存可能导致CPU使用率高,因为降低了命中率: 学习了:https://baike.baidu.com/item/PF% ...

  10. CSS学习(十四)-CSS颜色之中的一个

    一.理论: 1.RGB色彩模式  a.CMYK色彩模式  b.索引色彩模式 (主要用于web) c.灰度模式  d.双色调模式 2.opacity: a.alphavalue:透明度 b.inheri ...