结果处理

  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>

最新文章

  1. MySQL 拷贝数据库表方式备份,还原后提示 table xxx &#39;&#39; doesn`t exist
  2. [SGU495] Kids and Prizes (概率dp)
  3. CPU阿甘:函数调用的秘密
  4. 集成学习原理:Adaboost
  5. sql语句语法大全
  6. 转载: C++ 转换构造函数 和 类型转换函数
  7. Questions?
  8. hdu 3123 GCC
  9. 使用Java编写并运行Spark应用程序
  10. Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端
  11. jq实现鼠标经过图片翻滚效果
  12. Android中AsyncTask的简单用法 .
  13. 幂次法则power law
  14. nginx配置https双向验证(ca机构证书+自签证书)
  15. 第二次Srum冲刺
  16. 消除 ASP.NET Core 告警 &quot;No XML encryptor configured. Key may be persisted to storage in unencrypted form&quot;
  17. ereg
  18. 递归加载Treeview
  19. webpack项目轻松混用css module
  20. 001.Linux开机启动过程

热门文章

  1. python之urllib库
  2. Oracle数据库的自动备份脚本
  3. js里的深度克隆
  4. Secret of Chocolate Poles (Aizu1378——dp)
  5. vue 微信授权解决方案
  6. BZOJ 2038 2009国家集训队 小Z的袜子【模板&#183;莫队】
  7. (问题待解决)sql查询不显示前置‘0’的问题
  8. ZOJ 3687 The Review Plan I
  9. noip模拟赛 楼
  10. Apache模块开发指南-APR池