struts2结果跳转和参数获取
一、结果跳转方式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 指定struts2是否以开发者模式运行,以开发者模式运行会有更多的方便之处 可以热加载主配置文件,提供更多的日志信息输出,方便开发时调试 -->
<constant name="struts.devMode" value="true"></constant>
<!-- package元素:不对应Java源文件的任何一个包,只是struts2框架的将Action进行封装,就是在一个package中可以配置很多Action
name属性:给包起个名字,起标识作用,随便起,一般见名知意即可。不能与其他包名重复 namespace属性:给action的访问路径中定义一个命名空间,方便从路径上区分不同的模块
extends属性:继承另一个指定的包,struts-default是struts框架内置的一个包,必须继承它 abstract属性:标明包是否是抽象的,标识性属性,标识该包不能独立运行,专门被继承,类似Java中的抽象类 -->
<package name="result" namespace="/" extends="struts-default">
<!-- action元素:配置Action类 name属性:决定了Action访问资源名 class属性:Action的完整类名 method属性:指定调用Action中的哪个方法来处理请求 -->
<!-- 转发 -->
<action name="Demo1Action" class="com.fei.a_result.Demo1Action" method="execute">
<!-- result元素: name属性:标识结果处理的名称与Action方法的返回值对应 type属性:指定调用哪个Result类里处理结果,默认使用转发,具体有哪些类型,可以查看struts-default.xml配置文件,该文件位于struts2的核心包下
标签体:填写页面的相对路径 -->
<!-- 在struts2.3之前的版本,正常的配置就可以了,但在struts2.3版本之后, 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要加上下面的代码 -->
<result name="success" type="dispatcher">/hello.jsp</result>
<allowed-methods>execute</allowed-methods>
</action>
<!-- 重定向 -->
<action name="Demo2Action" class="com.fei.a_result.Demo2Action" method="execute">
<result name="success" type="redirect">/hello.jsp</result>
<allowed-methods>execute</allowed-methods>
</action>
<!-- 访问Demo3Action完成之后会转发到/命名空间下的Demo1Action,但是这种Action之间的转发方式不常用 -->
<action name="Demo3Action" class="com.fei.a_result.Demo3Action" method="execute">
<result name="success" type="chain">
<param name="actionName">Demo1Action</param>
<param name="namespace">/</param>
</result>
</action>
<!-- 重定向到另一个命名空间/下的Action,这是比较常用的 -->
<action name="Demo4Action" class="com.fei.a_result.Demo4Action" method="execute">
<result name="success" type="redirectAction">
<param name="actionName">Demo1Action</param>
<param name="namespace">/</param>
</result>
</action>
</package>
</struts>
二、获得原生servlet对象的数据中心ActionContext
- 原生request对象--HttpServletRequest
- 原生response对象--HttpServletResponse
- 原生ServletContext--ServletContext
- request域(一个Map)
- session域
- application域
- param参数
- attr域(3个域合一)等等很多
ActionContext也是一个Map
其生命周期为: 每次请求时都会创建一个与请求对应ActionContext对象,请求处理完ActionContext销毁。
如何获得ActionContext域
struts2设计的是,将ActionContext对象创建好后,将ActionContext与当前想成绑定。因此需要获得ActionContext,只需要从ThreadLocal中获取即可。
方式一(通过ActionContext,不推荐)
// 向域中存数据
ActionContext.getContext().put("name", "requestTom");
// session域
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "sessionTom");
// application域
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name", "applicationTom");
取的时候和servlet一样,使用el表达式取即可
requst:${requestScope.name }<br>
session:${sessionScope.name }<br>
application:${applicationScope.name }<br>
方式二(通过ServletActionContext,也不推荐)
// 原生request
HttpServletRequest request = ServletActionContext.getRequest();
// 原生response
HttpServletResponse response = ServletActionContext.getResponse();
// 原生ServletContext
ServletContext servletContext = ServletActionContext.getServletContext();
// 原生session
HttpSession session = request.getSession();
方式三
public class Demo7Action extends ActionSupport implements ServletRequestAware, ServletResponseAware {
private HttpServletRequest request;
private HttpServletResponse response;
public String execute() throws Exception {
System.out.println("原生request对象:" + request);
System.out.println("原生response对象:" + response);
return SUCCESS;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
// 注入原生域对象参见源码ServletConfigInterceptor.class
}
结论
这三种方式其实质就是一个,获得的都是原生的api,方式一(通过ActionContext)比较常用。
strutsMVC
- filter-->C
- Action-->M
- Result-->V
Action生命周期
- 每次请求时,都会创建一个新的action实例
- Action是线程安全的,可以使用成员变量接收参数
二、获得参数
获得参数方式一:属性驱动获得参数(准备与参数键名称相同的属性并提供set、get方法)
public class Demo8Action extends ActionSupport {
private String name;
// struts框架会自动类型转换,但是只能转换八大基本数据类型及包装类
private Integer age;
// struts2还支持将特定字符串转换为Date,yyyy-MM-dd
private Date birthday;
public Demo8Action() {
// 每次访问都会创建一个新的Action
System.out.println("Demo8Action被创建了");
}
public String execute() throws Exception {
System.out.println("name参数值为:" + name);
System.out.println("age参数值为:" + age);
System.out.println("birthday参数值为:" + birthday);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
页面内容为:
<form action="${pageContext.request.contextPath }/Demo8Action">
用户名:<input type="text" name="name"/><br>
年龄:<input type="text" name="age"/><br>
生日:<input type="text" name="birthday"/><br>
<input type="submit" value="提交"/>
</form>
获得参数方式二:对象驱动
Action
public class Demo9Action extends ActionSupport {
// 准备User对象
private User user;
public Demo9Action() {
// 每次访问都会创建一个新的Action
System.out.println("Demo8Action被创建了");
}
public String execute() throws Exception {
System.out.println("user参数值为:" + user);
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
html表单代码
<form action="${pageContext.request.contextPath }/Demo9Action">
<!-- 提交到对应Action的user对象的name属性 -->
用户名:<input type="text" name="user.name"/><br>
年龄:<input type="text" name="user.age"/><br>
生日:<input type="text" name="user.birthday"/><br>
<input type="submit" value="提交"/>
</form>
获得参数方式三:模型驱动
- 属性是有get、set方法的
- 成员是没有get、set方法的
后台Action代码
public class Demo10Action extends ActionSupport implements ModelDriven<User> {
// 准备User对象
private User user = new User();
public Demo10Action() {
// 每次访问都会创建一个新的Action
System.out.println("Demo10Action被创建了");
}
public String execute() throws Exception {
System.out.println("user参数值为:" + user);
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
前台页面代码
<form action="${pageContext.request.contextPath }/Demo10Action">
<!-- 提交到对应Action的user对象的name属性 -->
用户名:<input type="text" name="name"/><br>
年龄:<input type="text" name="age"/><br>
生日:<input type="text" name="birthday"/><br>
<input type="submit" value="提交"/>
</form>
此方法缺点就是当页面提交多个对象时,不好处理。
struts2结果跳转和参数获取的更多相关文章
- url跳转路径参数获取
function getUrlParam1(name){ //正则表达式过滤 var reg = new RegExp("(^|&)" + name + "=([ ...
- struts2框架学习笔记4:获取参数
第一种参数获取方式: 编写一个前端页面,提交表单,做示例: <form action="${pageContext.request.contextPath}/Demo1Action&q ...
- Struts2 DomainModel、ModelDriven接收参数
一.DomainModel(域模型) 1. 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensy ...
- 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)
本篇紧接着上一篇文章[一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面] 验证码功能 一般验证码功能实现方式为,前端界面访问一个url请求,后端服务代码生成一个图片流返回至浏览器 ...
- js获得页面get跳转的参数
通过js获得页面跳转参数 页面通过window.location.href或通过window.parent.location.href进行页面跳转,在新的页面如何获得相应的参数呢? window.lo ...
- JavaWeb_(Struts2框架)参数传递之接收参数与传递参数
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- servlet获取参数时,request.getParameter("id")参数获取失败
servlet获取参数时,request.getParameter("id")参数获取失败,这里的参数是“index”里面href中的参数 要注意,取不到值,是不是要取的参数有没有 ...
- paip.微信菜单直接跳转url和获取openid流程总结
paip.微信菜单直接跳转url和获取openid流程总结 #------不能直接跳转,贝儿提示不安全的链接.. #-------使用auth跳转. //todox 直接转到.. direct ...
- Spring3 MVC请求参数获取的几种方法
Spring3 MVC请求参数获取的几种方法 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}&q ...
随机推荐
- PHPcms编辑器如何粘贴带格式的word文档
在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...
- Leetcode_395. Longest Substring with At Least K Repeating Characters_[Devide and Conquer]
题目链接 对一个字符串,找出一个最长的子串长度,这个子串中所有字符出现的次数至少为k. 1.滑动窗口 一开始把题目看成了,子串中每个字符至多出现k次.如果是这样,那么是一道典型的滑动窗口的题目. 然而 ...
- asp.net开发微信公众平台----目录汇总-持续更新
1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...
- Appium解决native+webview混合型APP(公众号、小程序)切换webview后元素无法定位问题
问题:最近在做一个安卓+H5混合开发的APP自动化测试,发现在从native切换到webview后,元素仍然无法找到,报错:no such element 思路:于是思考webview会不会像web页 ...
- 20180826(05)- Java URL处理
Java URL处理 URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址.表示为互联网上的资源,如网页或者FTP地址. 本章节我们将介绍Java是 ...
- Factors and Multiples
Factors and Multiples PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Y ...
- __I、 __O 、__IO是什么意思?怎么用?
出处:http://www.chuxue123.com/forum.php?mod=viewthread&tid=122&ctid=3 __I. __O .__IO是什么意思?这是ST ...
- Linux_自制系统服务启动脚本
目录 目录 前言 Case语句 Apache 启动脚本 Postfix service 启停脚本 前言 在Linux的某些系统服务中,需要自己定制启动服务的脚本.通常会使用Cash语句来实现. Cas ...
- 16/7/11_PHP-日期和时间
取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和. PHP ...
- 记一次 Json 对象转换为 Java 对象的问题
1.描述 最近在使用 Jackson 将 Json 串转换回 Java 对象的时候遇到了 ClassCastException 错误,特此记述. 2.问题复现 问题出现的节点在于属性节点的 JavaT ...