Struts2学习——0500不同方式接收参数
来源:互联网 发布:端口在线扫描 编辑:程序博客网 时间:2024/06/07 06:50
背景
在平常的开发中,接收参数是一个很常见的需求,例如用户登录,肯定要把用户名和密码传输过去的。这个时候,我们用什么方法接收呢,这个文档有三个部分。就是用Action、DomainModel、ModelDriven三种方式接收参数。
用Action接收参数
第一种用Action方式接收参数是最简单的一种。看一看代码就都明白了
1. 分析
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /> <!-- 名称空间是/user --> <package name="user" extends="struts-default" namespace="/user"> <!-- action_name=user 具体的Action内容看UserAction --> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_add_success.jsp</result> </action> </package></struts>
UserAction
package com.bjsxt.struts2.user.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport { //定义这个成员变量就是为了来接收参数 private String name; private int age; public String add() { System.out.println("name=" + name); System.out.println("age=" + age); return SUCCESS; } //只要getXXX setXXX和参数的名称相同,就会调用相应方法,把参数值赋给成员变量 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
index.jsp
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><% String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <base href="<%=basePath %>"/> <title>Insert title here</title> </head> <body> <!-- 可以看得到,传给服务器的参数是name和age,值分别为a和8 --> 使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a> </body></html>
user_add_sucess.jsp
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> User Add Success! </body></html>
2. 结果
可以看到在控制台,打印出了结果,页面也跳转到了相应页面
DomainModel接收参数
用Action直接接收的话,其实,并不是特别常用,因为我们接收到的参数,肯定不是像上一个demo一样打印出来,肯定是封装到一个bean对象里面,然后传到service层或者dao层,操作数据库。
所以下面这种方式,才是开发中最为常用的一种。
1. 分析
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /> <package name="user" extends="struts-default" namespace="/user"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_add_success.jsp</result> </action> </package></struts>
可以看到struts.xml和上面一个demo是一样的,不一样的东西,在jsp和Action
UserAction
package com.bjsxt.struts2.user.action;import com.bjsxt.struts2.user.model.User;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport { // 这里是用的User,也就是bean,但是定义了不用new // Struts会帮你new的 private User user; //private UserDTO userDTO; public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
index.jsp
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><% String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <base href="<%=basePath %>"/> <title>Insert title here</title> </head> <body> <!-- namespace=user action_name=user method=add--><!-- 这里的参数就不只是name和age了,实际上是getUser.setName() --><!-- getUser().setAge() --> 使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a> </body></html>
User就很简单了
package com.bjsxt.struts2.user.model;public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
2. 结果
可以发现,可以跳转到正确页面,并能打印到控制台
3. 补充知识点——DTO
DTO(Date Transfer Object)数据传输对象,一般用在传输的参数和bean(或称Domain Moel)不匹配的时候。举例就是用户注册系统。一般输入密码之后,要进行确认密码的校验,还要进行表单校验。这个时候,传输的参数,和bean对象,无法一一对应。一般这个时候,就先定义出一个DTO来接收参数,然后处理之后,再将DTO的相关数据传到bean对象上。
因为这个DTO的作用就是接收和处理数据,然后传到新的对象上,所以称为DTO,算是一个重要的中间对象。
ModelDriven接收参数
其实这种方法,在开发中并不常见,但是设计到一个重要的接口ModelDriven,所以拿出来讲一讲。
首先,Struts2 new 一个action出来,发现了这个action有实现ModelDriven接口,这个action就返回了一个Model,本题就是user给Struts2,Struts2拿到User之后,就直接调用Use的setName(),setAge()方法将参数设置到User中了。
1. 分析
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /> <package name="user" extends="struts-default" namespace="/user"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_add_success.jsp</result> </action> </package></struts>
这个文件依然没有变化
ActionUser有所不同
package com.bjsxt.struts2.user.action;import com.bjsxt.struts2.user.model.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//首先要实现ModelDriven接口public class UserAction extends ActionSupport implements ModelDriven<User>{ //和第二种方法的不同就是要new出一个bean private User user = new User(); public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } @Override public User getModel() { return user; }}
index.jsp
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><% String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <base href="<%=basePath %>"/> <title>Insert title here</title> </head> <body> <!-- 直接name和age就可以了,因为拿到model了 --> 使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a> </body></html>
User 里面也没什么特别的
package com.bjsxt.struts2.user.model;public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
user_and_success.jsp
<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030" /><title>Insert title here</title></head><body> User Add Success!</body></html>
2. 结果
若有不足之处,请不吝赐
- Struts2学习——0500不同方式接收参数
- Struts2学习笔记(二)——请求参数的接收
- Struts2接收参数的几种方式
- Struts2接收参数的几种方式
- Struts2接收参数的几种方式
- Struts2接收参数的几种方式
- Struts2接收参数的几种方式
- Struts2接收参数的三种方式
- struts2之Action请求参数接收方式
- struts2接收参数的三种方式
- Struts2 接收参数的三种方式
- Struts2 学习笔记 —— 07 —— Action接收参数(1)
- Struts2 学习笔记 —— 08 —— Action接收参数(2)
- Struts2 学习笔记 —— 09 —— Action接收参数(3)
- Struts2 学习笔记 —— 10 —— Action接收参数时的中文乱码问题
- struts2学习笔记(接收参数——域模型、DTO)
- 学习笔记-----------struts2请求参数接收
- Struts2.0学习笔记 --- 接收参数
- 计算机网络基础知识总结
- Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/Accessibil
- faster rcnn matlab
- C语言(Ⅰ)
- 《Gartner2016年度新兴技术成熟度曲线》全解读
- Struts2学习——0500不同方式接收参数
- Android Camera2教程之打开相机、开启预览、实现PreviewCallback、拍照
- Codeforces Round #375 (Div. 2)A. The New Year: Meeting Friends(水题)
- 面向对象多态之接口
- 关于问题short s1 = 1; s1 = s1 + 1;出现编译错误,而 short s1 = 1; s1 += 1;不出现编译错误。
- 回调函数
- ios利用短信SKD实现短信验证(使用mob网站提供的免费接口)
- 找到含有n个不同字符的子串的最大长度
- Codeforces Round #375 (Div. 2) B. Text Document Analysis(字符串处理,简单题目)