在struts2框架中接收参数的方式主要有属性驱动获取参数、对象驱动获取参数、模型驱动获取参数以及集合类型获取参数这四种,属性驱动获取参数是struts2框架官方所推荐使用的一种,但是在实际开发中并不常用,具体原因请看下面属性驱动方式获得参数的代码~然后总结出原因;
struts2属性驱动方式获得参数
第一步:创建jsp页面
此jsp页面就是用于输入传递的参数的,其代码如下:
form1.jsp
<form action="${pageContext.request.contextPath}/api/DemoApi4" method="post">
<label>姓名:<input type="text" name="username"></label><br/>
<label>年龄:<input type="number" min="18" max="90" name="age"></label><br/>
<label>生日:<input type="date" name="birthday"></label><br/>
<input type="submit" value="OK">
</form>
第二步:创建action类
在上一步中看到此类名为DemoApi4,其中的接收数据的代码如下所示:
DemoApi4.java
// struts2如何获得参数
public class DemoApi4 extends ActionSupport {
// 准备与参数键名称相同的属性;
private String username;
// struts2框架会自动转换类型---只能转换八大基本类型以及包装类
private Integer age;
// 支持特定字符串转化为Date
private Date birthday;
public String action_name() throws Exception{
System.out.println("姓名是:" + username + ",年龄是:" + age + ",生日是:" + birthday);
return SUCCESS;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
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;
}
从中可以看出,要有私有的成员变量,这个成员变量名称要和所要接收的表单中的那个数据的键名一致,而且要对成员变量设置set/get方法;
第三步:struts.xml文件配置
struts.xml
<action name="DemoApi4" class="com.java.Demo.api.DemoApi4" method="action_name">
<result name="success" type="dispatcher">/form1.jsp</result>
</action>
第四步:Demo测试
配置完成后运行demo,然后在输入框中输入字段,在控制台中得到相应的如下图所示的数据:
运行后:
总结:
由上面的代码可以看出,属性驱动获得参数的方式是在Action方法内使用成员变量进行接收参数的,每个参数对应一个成员参数,如果在实际编码操作中使用这种属性驱动的方式获得参数的话就需要建立很多的成员变量以及每个成员变量的set/get方法,比较繁琐,因此在实际开发中使用的并不是属性驱动方式获得参数;
另外,要知道,servlet是线程不安全的,因为多人同时调用servlet的话得到的是同一个servlet,操作在同一个servlet上会出现脏读等问题,而struts2框架中的属性驱动获取参数的方式就不必担心了,他是线程安全的,因为每次请求Action对象时都会生成一个新Action实例对象,有几个调用就会产生几个,也正是因为如此才允许在成员变量中编写参数;
重点:
在struts2框架会自动转换数据的类型,不过只能转换八大基本类型以及包装类,而且可以将特定的字符串参数转换成Date类型数据(既是:在jsp的表单里,输入框的输入类型可以全部写为“text”类型的,在进行参数接收时struts2框架会自动的转化成action类中设置好的成员变量的类型,特定的字符串参数可以转化成Date类型的参数是指当输入框中输入了“YYYY-MM-DD”类型的字符串时,只要将其对应的成员变量的类型设置为Date,在参数接收时也是可以自动转化为Date类型的数据的;
struts2中几种参数传递获取方式如下:
属性驱动方式获得参数:https://blog.csdn.net/qq_40762011/article/details/84975163
对象驱动方式获得参数:https://blog.csdn.net/qq_40762011/article/details/84975677
模型驱动方式获得参数:https://blog.csdn.net/qq_40762011/article/details/84976004
List集合封装传递获取参数:https://blog.csdn.net/qq_40762011/article/details/84976453
Map集合封装传递获取参数:https://blog.csdn.net/qq_40762011/article/details/84988210