struts2学习笔记(1)---JSP页面向Action类传递参数
2015-06-06 21:18
696 查看
一、以用户登录为例,struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.action.extension" value="action,do," /> <constant name="struts.devMode" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="default"/> <action name="user_*" class="org.Test.action.UserAction" method="{1}"> <result>/success.jsp</result> </action> <action name="default"> <result>/index.jsp</result> </action> </package> </struts>
二、方法一:Action类中直接写user的属性及其对应的get和set方法,接收到参数后输出显示
UserAction.java文件:package org.Test.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String userName; private String password; private int age; public String getUserName() { System.out.println("getUserName"); return userName; } public void setUserName(String userName) { System.out.println("setUserName"); this.userName = userName; } public String getPassword() { System.out.println("getPassword"); return password; } public void setPassword(String password) { System.out.println("setPassword"); this.password = password; } public int getAge() { System.out.println("getAge"); return age; } public void setAge(int age) { System.out.println("setAge"); this.age = age; } public String login() { System.out.println("userAction:login"); System.out.println("userName:" + userName); System.out.println("password:" + password); System.out.println("age:" + age); return SUCCESS; } }
index.jsp页面
<body> <center> <form action="user_login" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="userName"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td>年龄:</td> <td><input type="text" name="age"></td> </tr> <tr> <td></td> <td align="left"><input type="submit" value="登录"> <input type="reset" value="重置"> </tr> </table> </form> </center> </body>
success.jsp页面:
<body> 登陆成功 <br> </body>
运行结果:
说明:
1.index.jsp页面:输入框的name属性,用户名---name="userName",密码---name="password",年龄---name="age"。2.UserAction中必须有属性(userName,password,age)的get和set方法
3.输出结果说明程序调用了三个属性的set方法,同时UserAction也成功获得了JSP页面传过来的属性的值
三、方法二:另外定义User类并设置其属性的get和set方法,同时将user作为UserAction的内置对象,同时index.jsp页面输入框的name属性的值变为user.属性
User.java文件:package org.Test.entity; public class User { private String userName; private String password; private int age; public int getAge() { System.out.println("User:getAge"); return age; } public void setAge(int age) { System.out.println("User:setAge"); this.age = age; } public String getUserName() { System.out.println("User:getUserName"); return userName; } public void setUserName(String userName) { System.out.println("User:setUserName"); this.userName = userName; } public String getPassword() { System.out.println("User:getPassword"); return password; } public void setPassword(String password) { System.out.println("User:setPassword"); this.password = password; } }
UserAction.java文件:
package org.Test.action; import org.Test.entity.User; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private User user; public User getUser() { System.out.println("UserAction:getUser " + user); return user; } public void setUser(User user) { System.out.println("userAction:setUser " + user); this.user = user; } public String login() { System.out.println("userAction:login"); System.out.println("userName:" + user.getUserName()); System.out.println("password:" + user.getPassword()); System.out.println("age:" + user.getAge()); return SUCCESS; } }
index.jsp页面:
<body> <center> <form action="user_login" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="user.userName"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="user.password"></td> </tr> <tr> <td>年龄:</td> <td><input type="text" name="user.age"></td> </tr> <tr> <td></td> <td align="left"><input type="submit" value="登录"> <input type="reset" value="重置"> </tr> </table> </form> </center> </body>
success.jsp页面:
<body> 登陆成功 <br> </body>
运行结果:
说明:
1.index.jsp页面:输入框的name属性,用户名---name="user.userName",密码---name="user.password",年龄---name="user.age"。2.UserAction中只需要有User类的一个对象及其对象的get和set方法,而User类本身需要有属性的set和get方法
3.输出结果分析:尝试得到一个user对象,为null——随即设置一个user(新建了一个user对象)——设置age属性——再次得到user,不为空——设置password属性——再次得到user,不为空——设置userName属性——执行login函数,输出user对象各个属性的值
四、实现ModelDriven接口,泛型指定User。通过getModel()方法获取User对象。
User.java文件:package org.Test.entity; public class User { private String userName; private String password; private int age; public int getAge() { System.out.println("User:getAge"); return age; } public void setAge(int age) { System.out.println("User:setAge"); this.age = age; } public String getUserName() { System.out.println("User:getUserName"); return userName; } public void setUserName(String userName) { System.out.println("User:setUserName"); this.userName = userName; } public String getPassword() { System.out.println("User:getPassword"); return password; } public void setPassword(String password) { System.out.println("User:setPassword"); this.password = password; } }
UserAction.java文件:
package org.Test.action; import org.Test.entity.User; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User> { //实现ModelDriven接口,泛型指定User private User user; @Override public User getModel() { //此方法是Modeldriven接口的方法,要重写 System.out.println("UserAction:getModel"); if(this.user == null) this.user = new User(); //当前user的实例化由Action来负责 return this.user; //返回该user对象的引用 } public String login() { System.out.println("userAction:login"); System.out.println("userName:" + user.getUserName()); System.out.println("password:" + user.getPassword()); System.out.println("age:" + user.getAge()); return SUCCESS; } }
index.jsp页面
<body> <center> <form action="user_login" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="userName"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td>年龄:</td> <td><input type="text" name="age"></td> </tr> <tr> <td></td> <td align="left"><input type="submit" value="登录"> <input type="reset" value="重置"> </tr> </table> </form> </center> </body>
success.jsp页面:
<body> 登陆成功 <br> </body>
运行结果:
说明:
1.index.jsp页面:输入框的name属性,用户名---name="userName",密码---name="password",年龄---name="age"。(在第二种方法上简化了JSP页面)2.UserAction:必须有User对象,实现ModelDriven接口,重写getModel()方法
3.输出结果表示:先调用getModel()方法——实例化user——设置user的各项属性——调用login方法,输出各项属性值
五、一张图来理解传值过程:
说明:
1.流程:JSP页面向Action传user的属性值——struts2过滤过滤——反射机制寻找对应的user的方法——getUser(),为null——setUser(),新建user——设置age属性值,setAge()——再次得到user,getUser(),是同一个user——设置password属性值,setPassword()——依次进行……直到设置完所有的值2.struts功能:过滤请求,类型转换(如age,String类型转换成int),对user操作(set和get)
以上是我作为初学者一点浅薄的理解,欢迎补充和指正,今后理解深入了,还会修改次博文!
参考链接:http://blog.csdn.net/li_tengfei/article/details/6098145
相关文章推荐
- Spring Security调研记录【七】--核心模型与实现
- java基础--多线程
- java的clone用法
- java基础(十一)--- IO
- 终于Get到了Java8的Lambda表达式,记录。
- JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
- JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
- Spring与quartz集成后的定时任务工厂类
- 解析JDK、J2EE、J2SE、J2ME的区别
- 实现单例模式的五种方法
- 【点滴】Java Calendar 类的使用
- Ubuntu安装jdk
- Struts1入门
- 包装过的异常--InvocationTargetException
- java 抽象X的 学习
- Java父类(SuperClass)和 子类(SubClass)的关系
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- SpringMVC学习系列-后记 开启项目的OpenSessionInView
- SpringMVC学习系列(11) 之 表单标签
- SpringMVC学习系列(10) 之 异常处理