最近自己通过视频与相关书籍的学习,对action里面接收参数做一些总结与自己的理解。

0.0、接收参数的(主要)方法

 

  1. 使用Action的属性接收参数
  2. 使用DomainModel接收参数
  3. 使用ModelDriven接收参数

1.1、使用Action的属性接收参数

本文以最简单的表单提交为例:

  1.1.1.建立login.jsp页面

  

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="loginAction.action" method="post">
  11. 用户名:<input type="text" name="username">
  12. 密码:<input type="password" name="password">
  13. <input type="submit">
  14. </form>
  15. </body>
  16. </html>

  1.1.2.创建loginAction

  

  1. package com.zzh.action;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. public class loginAction extends ActionSupport {
  6.  
  7. private static final long serialVersionUID = 1L;
  8.  
  9. private String username;
  10. private String password;
  11.  
  12. public String getUsername() {
  13. return username;
  14. }
  15.  
  16. public void setUsername(String username) {
  17. this.username = username;
  18. }
  19.  
  20. public String getPassword() {
  21. return password;
  22. }
  23.  
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27.  
  28. public String login(){
  29. System.out.println(username);
  30. return SUCCESS;
  31. }
  32. }

注意:System.out.println(username);后面可以做一些逻辑处理

  1.1.3.配置struts.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <package name="login" extends="struts-default" namespace="/">
  7. <action name="loginAction" method="login" class="com.zzh.action.loginAction">
  8. <result name="success">/success.jsp</result>
  9. </action>
  10. </package>
  11. </struts>

  1.1.4.创建success.jsp页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 你好!六月的余晖
  11. </body>
  12. </html>

1.1.5.启动tomcat服务器,测试是否能接收

打开网页输入http://localhost:8080/zzh/login.jsp

输入用户名与密码提交。。。

这时后台显示用户名

页面跳转为

1.2、使用DomainModel接收参数

对于java而言,它是一种面向对象的语言,我们会发现将大量的属性直接放在loginaction中显得太过臃肿,于是,我们需要用一个对象来作为这些属性的容器,也就是将这些属性放在对象中,这时我们便可以使用DomainModel来进行。

  1.2.1.新建对象User

将loginaction.java中的属性username与password删去,相应的getter和setter方法也删去。

然后在User.java中

  1. package com.zzh.us;
  2.  
  3. public class User {
  4.  
  5. private String username;
  6.  
  7. private String password;
  8.  
  9. public String getUsername() {
  10. return username;
  11. }
  12. public void setUsername(String username) {
  13. this.username = username;
  14. }
  15. public String getPassword() {
  16. return password;
  17. }
  18. public void setPassword(String password) {
  19. this.password = password;
  20. }
  21.  
  22. }

接着在LoginAction中声明User

注意login()方法中要用user.getUsername()

  1. package com.zzh.action;
  2.  
  3. import com.zzh.us.User;
  4.  
  5. import com.opensymphony.xwork2.ActionSupport;
  6.  
  7. public class loginAction extends ActionSupport{
  8.  
  9. private static final long serialVersionUID = 1L;
  10.  
  11. private User user;
  12.  
  13. public User getUser() {
  14. return user;
  15. }
  16.  
  17. public void setUser(User user) {
  18. this.user = user;
  19. }
  20.  
  21. public String login(){
  22. System.out.println(user.getUsername());
  23. return SUCCESS;
  24. }
  25. }

  1.2.2.指定login.jsp页面需要明确属性所属对象

当我们有多个对象时,每个对象都有参数,而login.jsp传过来的参数没有明确对象,这时便会出现混乱。

所以我们在login.jsp中必须明确对象。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="loginAction.action" method="post">
  11. 用户名:<input type="text" name="user.username">
  12. 密码:<input type="password" name="user.password">
  13. <input type="submit">
  14. </form>
  15. </body>
  16. </html>

  1.2.3.重启服务器,测试

结果与上个方法所得 一致。

1.3、使用ModelDriven接收参数

ModelDriven也叫模型驱动,通过实现ModelDriven接口来接收表单数据,首先Action类必须实现ModelDriven接口,同样把表单传过来的数据封装起来,Acting类中必须实例化该对象,并且要重写getModel()方法,这个方法返回的就是Action所使用的数据模型对象。

  1.3.1.Action类中实现ModelDriven接口

  实现ModelDriven接口,将我们需要赋值转换的类(User)设置为ModelDriven的泛型,然后添加实现此接口的方法getModel()。此时,getModel()中返回的是我们需要转换的对象(user)。当然,使用了ModelDriven,我们的对于user对象的getter,setter方法需要去掉,并将user对象实例化即:user = new User();

  1. package com.zzh.action;
  2.  
  3. import com.zzh.us.User;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. import com.opensymphony.xwork2.ModelDriven;
  6.  
  7. public class loginAction extends ActionSupport implements ModelDriven<User>{
  8.  
  9. private static final long serialVersionUID = 1L;
  10.  
  11. private User user = new User();
  12.  
  13. public String login(){
  14. System.out.println(user.getUsername());return SUCCESS;
  15. }
  16.  
  17. @Override
  18. public User getModel() {
  19.  
  20. return user;
  21. }
  22.  
  23. }

  1.3.2.login.jsp中去除属性前缀

注意:使用了ModelDriven的方式,一个Action只能对应一个Model,因此在login.jsp中不需要添加user前缀,页面上的username对应到这个Model的username属性。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="loginAction.action" method="post">
  11. 用户名:<input type="text" name="username">
  12. 密码:<input type="password" name="password">
  13. <input type="submit">
  14. </form>
  15. </body>
  16. </html>

  1.3.2.重启服务器,测试

结果与前面一致。

2.0 传递数据集

在通常情况下,我们需要传递的参数不只是单一的字符串,更多的是数据集。

  2.0.1.User中添加属性List<String>

  

  1. package com.zzh.us;
  2.  
  3. import java.util.List;
  4.  
  5. public class User {
  6. private String username;
  7.  
  8. private String password;
  9.  
  10. private List<String> bookList;
  11.  
  12. public List<String> getBookList() {
  13. return bookList;
  14. }
  15. public void setBookList(List<String> bookList) {
  16. this.bookList = bookList;
  17. }
  18.  
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31.  
  32. }

  2.0.2.login.jsp中增加两条记录给List<String>赋值

  我们可以通过booklist[0]与booklist[1]来作为name。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="loginAction.action" method="post">
  11. 用户名:<input type="text" name="username">
  12. 密码:<input type="password" name="password">
  13. 书籍1:<input type="text" name="bookList[0]">
  14. 书籍2:<input type="text" name="bookList[1]">
  15. <input type="submit">
  16. </form>
  17. </body>
  18. </html>

  2.0.3.在Action类中添加后台打印验证接收到的参数

  1. package com.zzh.action;
  2.  
  3. import com.zzh.us.User;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. import com.opensymphony.xwork2.ModelDriven;
  6.  
  7. public class loginAction extends ActionSupport implements ModelDriven<User>{
  8.  
  9. private static final long serialVersionUID = 1L;
  10.  
  11. private User user = new User();
  12.  
  13. public String login(){
  14. System.out.println(user.getUsername());
  15. System.out.println(user.getBookList().get(0));
  16. System.out.println(user.getBookList().get(1));
  17. return SUCCESS;
  18. }
  19.  
  20. @Override
  21. public User getModel() {
  22.  
  23. return user;
  24. }
  25.  
  26. }

  2.0.4.重启服务器,验证后台是否接收

  

跳转至 你好!六月的余晖页面,控制台输出:

2.1.1.User中添加属性List<User>

如果将泛型中的字符串改为对象,也就是说不再是一个简单的类型

  1. package com.zzh.us;
  2.  
  3. import java.util.List;
  4.  
  5. public class User {
  6. private String username;
  7.  
  8. private String password;
  9.  
  10. private List<User> bookList;
  11.  
  12. public List<User> getBookList() {
  13. return bookList;
  14. }
  15. public void setBookList(List<User> bookList) {
  16. this.bookList = bookList;
  17. }
  18.  
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31.  
  32. }

2.1.1.更改login.jsp页面的name值

此时的bookList【】中已经不是字符串,而是一个对象,也就是说书籍的名称在bookList中的一个属性,所以需要加后缀.username

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="loginAction.action" method="post">
  11. 用户名:<input type="text" name="username">
  12. 密码:<input type="password" name="password">
  13. 书籍1:<input type="text" name="bookList[0].username">
  14. 书籍2:<input type="text" name="bookList[1].username">
  15. <input type="submit">
  16. </form>
  17. </body>
  18. </html>

2.1.2.Action类中的后台输出

此时后台输出user.getBookList().get(0)得到的是User对象,所以还需要增加后缀.getUsername()。

  1. package com.zzh.action;
  2.  
  3. import com.zzh.us.User;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. import com.opensymphony.xwork2.ModelDriven;
  6.  
  7. public class loginAction extends ActionSupport implements ModelDriven<User>{
  8.  
  9. private static final long serialVersionUID = 1L;
  10.  
  11. private User user = new User();
  12.  
  13. public String login(){
  14. System.out.println(user.getUsername());
  15. System.out.println(user.getBookList().get(0).getUsername());
  16. System.out.println(user.getBookList().get(1).getUsername());
  17. return SUCCESS;
  18. }
  19.  
  20. @Override
  21. public User getModel() {
  22.  
  23. return user;
  24. }
  25.  
  26. }

2.1.3.启动服务器,测试

3.小结  总之三种方法给有优缺点,应根据不同情况选择使用。总算是写完了,自己第一篇博客,如果你觉得对你有帮助的话,请麻烦点赞或关注我,谢谢观看!

学习笔记之Struts2—浅析接收参数的更多相关文章

  1. struts2学习笔记(4)接收参数

    ①用action属性接收 登录界面例子 在webroot下创建login.jsp和success.jsp login.jsp中加入表单: <form action="LoginActi ...

  2. 第七篇——Struts2的接收参数

    Struts2的接收参数 1.使用Action的属性接收参数 2.使用Domain Model接收参数 3.使用ModelDriven接收参数 项目实例 1.项目结构 2.pom.xml <pr ...

  3. Tornado学习笔记(一) helloword/多进程/启动参数

    前言 当你觉得你过得很舒服的时候,你肯定没有在进步.所以我想学习新的东西,然后选择了Tornado.因为我觉得Tornado更匹配目前的我的综合素质. Tornado学习笔记系列主要参考<int ...

  4. struts2 Action 接收参数的三种方法

    刚学Struts2 时 大家可能遇到过很多问题,这里我讲一下Action 接收参数的三种方法,我曾经在这上面摔过一回.所以要警醒一下自己..... 第一种:Action里声明属性,样例:account ...

  5. SpringMVC学习笔记:数据的接收与返回

    SpringMVC的定义:Spring Web MVC is the original web framework built on the Servlet API and included in t ...

  6. Struts2学习笔记(六)——Action处理请求参数

    在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在 ...

  7. SpringMVC学习笔记:表单提交 参数的接收

    SpringMVC可以接收原生form表单和json格式数据 有一个名为Book的model,其中的属性如下: 字符串类型的name,数字类型的price,数组类型的cover,集合类型的author ...

  8. 【学习笔记】Struts2 类型转换

    为什么需要类型转换 在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boo ...

  9. 【学习笔记】Struts2之配置处理结果

        Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应.Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据.     Ac ...

随机推荐

  1. 使用JAVA爬取去哪儿网入住信息

    昨天帮一个商科同学爬取去哪儿网站的所有广州如家快捷酒店的所有入住信息. 就是上面的商务出行 xxx年入住这些东西 然而去哪儿的前端很强,在获取所有如家快捷酒店的时候就遇到了问题. 他显示的酒店列表是j ...

  2. 记录两个python的小问题

    使用python也前前后后也一个月的样子,记录两个一直没注意的问题. 1. 元组的使用(拼接字符串) 直接看下面的代码: >>> kel = 'some','strings' > ...

  3. Nodejs&Express

    http://www.expressjs.comhttp://github.com/lelandtseng/form-datahttp://github.com/lelandtseng/mongo-m ...

  4. delphi XE8 Android SDK SET

    delphi XE Berlin Android SDK SET RAD>Tools>Options>SDk Manager> https://dl-ssl.google.co ...

  5. struts.xml配置文件(package,namespace,action)

    struts2.0 xml配置 struts.xml文件结构 struts.xml文件是整个Struts2框架的核心. struts.xml文件内定义了Struts2的系列Action,定义Actio ...

  6. redis 开发与运维 学习心得1

    主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...

  7. python:ord()和chr()——字符串和ASCll编码转换

    ord()函数:字符串——>ascll编码 chr()函数:ascll编码——>字符串 #函数 for i in range(ord('d'),ord('f')+1):#拿到d和f对应的a ...

  8. Reids 批量删除有相同前缀的keys

    redis-cli 登录redis 我一般使用 redis-cli 登录redis ,但是进去后会提示" Redis (error) NOAUTH Authentication requir ...

  9. visjs使用小记-1.创建一个简单的网络拓扑图

    1.插件官网:http://visjs.org/ 2.创建一个简单的网络拓扑图 <!doctype html> <html> <head> <title> ...

  10. Linux命令详解1--文件和目录管理之文件查找和比较

    1. 文件查找 1.1 strings命令 ------- 在对象文件或二进制文件中查找可打印的字符串.字符串是4个或更多可打印的任意序列,以换行或空字符结束. strings命令对识别随机对象文件很 ...