Action属性接收参数
一、action的属性(地址栏传参)接收参数:如果使用的JDK属性不一致,则会使得传值无法实现。
解决办法:
1.系统自身需要用到的JDK(window——>属性——>Java——>Installed JREs——>选择符合条件的JDK版本)
2.设置JDK级别(项目右键——>属性——>Java Compiler——>Compiler compliance level——>选择符合条件的级别)
3.Tomcat下的JDK版本(Window——>属性——>MyEclipse——>sever——>tomcat——>JDK)
二、使用例子验证其传值的方法:
1.新建项目 ParamInputAction——>新建类“UserAction”,并设置两个属性userName、password。在此需要遵循Java的规则(属性首字母要小写,类名首字母大写,不要乱用不符合常规的名字)
package cn.cqvie.paraminput;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String userName;
private String password;
public String insert() {
System.out.println("userName=" + userName);
System.out.println("password=" + password);
return SUCCESS;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.配置index.jsp页面属性,用超链接使得在地址栏将其两个参数传过去。这里的“!”表示user中将要被调用的方法(定义方法:?属性=值&属性=值)
此处赋值:userName=admin,password=123。
<body>
运用action属性接收参数<a href=user/user!insert?userName=admin&password=123>添加用户</a>
</body>
3.配置struts.xml页面。使得action的动作去寻找相应的方法。
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="cn.cqvie.paraminput.UserAction" >
<result>/user_insert_success.jsp</result>
</action>
</package>
</struts>
4.由上可知,需要创建user_insert_success.jsp页面,以显示页面跳转结果。
<body>
User Insert Success!
</body>
5.运行、调试
部署项目,开启服务,打开浏览器,输入相应的项目名。
访问首页结果如上,点击超链接“添加用户”
由结果可知,地址栏里有之前定义的两个属性及对应的值,已经一并传到了user_insert_success.jsp页面,由控制台结果显示传值成功。
6.总结、教训。
1)学会了该种赋值方法,简洁明了:user/user!insert?userName=admin&password=123(package/action name!action要调用的方法?属性=值&属性=值)
2)需要注意的是属性的名字要与先前定义的一致,避免后面传值的时候混淆,以至于传值失败。
3)需要熟练运用该种赋值方法,虽然经常看见“!、?”等写法但是并没有真正明白其中的寓意,还需要加强练习,以便掌握。
三、用Action 的整个对象接收参数
1.基于上个项目,新建一个beans类 User,并设置它的三个属性。
package cn.cqvie.beans;
public class User {
private String name;
private String password;
private String confimingPassword;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfimingPassword() {
return confimingPassword;
}
public void setConfimingPassword(String confimingPassword) {
this.confimingPassword = confimingPassword;
}
}
2.新建UserAction继承至ActionSupport.此时定义的User user是整个对象,而非它拥有的各个属性,注意引入beans 包才能识别User。
package cn.cqvie.paraminput.model;
import cn.cqvie.beans.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
public String insert() {
System.out.println("name:"+user.getName());
System.out.println("Password:"+user.getPassword());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
3.同样的方法配置struts.xml文件的内容:只需改动class即可。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="cn.cqvie.paraminput.model.UserAction" >
<result>/user_insert_success.jsp</result>
</action>
</package>
</struts>
4.为了有一个较好的用户体验效果,需要建立一个登陆界面login.jsp,使用户自己输入登陆信息。需要注意到的是name和password一定要用(对象.属性)的方法来获取。
注:基于实践用此种方式是否传值成功,所以登陆的用户名及密码没有进行验证,有漏洞。
<body>
<form action="user/user!insert" method="post">
用户名称:<input type="text" name="user.name"><br>
密 码:<input type="password" name="user.password"><br>
确认密码:<input type="password" name="user.password"><br> <input
type="submit" value="登录">
</form>
</body>
5.当用户点击“登录‘按钮时,需要有一个页面显示登录结果:user_insert_success.jsp ,在这里只是显示了用户登录名;注意引入EL标签库。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
登录成功,欢迎<c:out value="${user.name}"></c:out>!
</body>
</html>
6.运行、调试
在浏览器地址栏输入项目名/login.jsp,访问登录界面
输入相应的用户名、密码、以及确认密码。
点击“登录”
可以发现表单提交到action,访问UserAction的insert方法,切换到后台可以发现输出了用户的用户名和密码。
7.总结、教训。
1)struts是通过set方法传参的,所以需要注意编码时要将字段名写的一致,避免后面获取不到对象的属性。
2)用DTO(Data Transfer Object)数据传输对象,可以避免重写大量的属性,直接用model将对象封装到entity,再用(该对象 . 属性)的方法即可访问到。
3)由于重点在于实践action属性对象传参,所以此程序有较大漏洞,比如当我输入的”密码“与“确认密码”不一致,也会跳转到登录成功界面,显示登录成功,因为没有做登录名和密码的验证。
4)通过这个小项目,我学到了新的知识,之前登录界面的action跳转的方式是user/user.action,可以跳转成功,但是发现控制台没有输出我想要的结果,也就说明并没有访问到“insert”方法,后来才又改了代码,使得“login.jsp”的action="user/user!insert" 直接访问“insert”方法;结果证明我成功了,控制台输出了结果。
Action属性接收参数的更多相关文章
- 01_7_Struts_用Action的属性接收参数
01_7_Struts_用Action的属性接收参数 1. 配置struts.xml文件 <package name="user" namespace="/user ...
- struts----用Action的属性接收参数
本次学习的内容是用Action的属性接收参数 具体内容为: 一.准备工作 1.新建Web工程 2.添加struts:右键点击工程名选择My Eclipse-->点击add struts..--& ...
- Struts2(四)Action一接收参数
一.属性接收参数并输出 导入struts2的包,导入需要的包 和struts.xml配置文件 <?xml version="1.0" encoding="UTF-8 ...
- 参数对象Struts2中Action的属性接收参数
题记:写这篇博客要主是加深自己对参数对象的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. Action中三种传递并接受参数: 1. 在Action添加成员属性接受参数 例如请求的 ...
- Struts2_用Action的属性接收参数
先在 Action 中定义要接收的属性,需要编写属性的getter 和 setter 方法 struts2 会自动帮我们把 String 类型的参数转为 Action 中相对应的数据类型. priva ...
- struts用action的属性接收参数
新建一个javaweb项目 在项目中加入Struts.xml( 选中项目右键MyEclipse-->project facets-->Struts2-->finish) 在src项目 ...
- struts2属性Struts2中属性接收参数中文问题和简单数据验证
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 一:如果表单提交数据中有中文时,尽量应用post方式. 需要在Struts. ...
- Struts2--Action属性接收参数
1. JSP文件调用格式: <a href="user/user!add?name=a&age=8">添加用户</a> 2. struts.xml文 ...
- Net Core 中间件实现修改Action的接收参数及返回值
新一个WebApi项目(Net Core 2.1) 新建InputOutputAlterMiddleware类,修改命名空间为Microsoft.AspNetCore.Builder(不修改也没关系, ...
随机推荐
- 10、JPA-二级缓存
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Http请求中Content-Type讲解以及在Spring MVC中的应用【转】
完全引用自: http://blog.csdn.net/blueheart20/article/details/45174399#t1 此文讲得很清晰,赞! 引言: 在Http请求中,我们每天都在 ...
- 攻击WEP加密无线网络
1.介绍 针对客户端环境和无客户端环境下破解WEP的几类方法. 有客户端环境: 一般当前无线网络中存在活动的无线客户端环境,即有用户通过无线连接到无线AP上并正在进行上网等操作时. 无客户端环境: 1 ...
- xss漏洞利用
简述 跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息.攻击者通过在链接中插入恶意代码,就能够盗取用户信息.攻击者通常会在有漏洞的程序中插入 JavaScript.VBScript. ...
- pyqt5-键盘事件
视频教程:https://v.qq.com/x/page/p08592bhsag.html keyPressEvent(QKeyEvent) 键盘按下时调用 keyReleaseEvent(QK ...
- POJ 2503 Babelfish (STL)
题目链接 Description You have just moved from Waterloo to a big city. The people here speak an incompreh ...
- Java垃圾回收机制复习
一.如何确定某个对象是“垃圾” 二.典型的垃圾收集算法 三.典型的垃圾收集器 JVM(HotSpot) 7种垃圾收集器的特点及使用场景 https://www.cnblogs.com/chengxuy ...
- gflags命令行参数解析
gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...
- 在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码。
在使用NSArray打印的时候如果遇到中文字符那么会打印出来编码,如下代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any addition ...
- weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP
我们都知道在weblogic中JSP是每次第一次访问的时候才会编译,这就造成第一次访问某个JSP的时候性能下降,有时候我们也希望JSP被编译成class然后打包在jar中实现隐藏JSP的功能,下面介绍 ...