Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。
Struts2他的优点,在我另一篇博客上面写到过,我们这里主要是讲一下从页面上取值,也就是接受参数
Struts2接受参数的方式有四种
1.使用Action的属性进行接受参数
2.使用DomainModel接受参数
3.使用ModelDriven接受参数
4.使用request接受参数
我相信大家对request接受参数都已经用的滚瓜烂熟了,我们这里不做讲解,我们在这里配置的相关环境都是不变的
第一步:创建web项目,搭建Struts2开发环境
第二步:在web.xml 进行struts2的过滤器的配置
第三步:创建stuts.xml 进行关系的映射
第四步:创建一个实体类Action,并继承com.opensymphony.xwork2.ActionSupport
第五步:创建相关方法
第六步:进行页面的编辑,
第七步:测试
下面直接上代码:
Struts的核心包
web.xml的配置:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
testaction类的创建:
import com.opensymphony.xwork2.ActionSupport;
public class testAction extends ActionSupport {
//Action属性进取值
//对属性 要进行生成get() set方法
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//定义前台请求的方法 进行数据的请求
public String Login(){
System.out.println(name);
System.out.println(age);
//返回值 进行页面的跳转
return "ok";
}
}
struts.xml 配置
<!--声明xml的版本和文件编码格式-->
<?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>
<!-- struts2的action必须放在一个指定的包空间下定义 -->
<package name="pk" extends="struts-default" namespace="/">
<!-- 定义处理请求URL为login.action的Action -->
<action name="Login" class="action.testAction">
<!-- 定义处理结果字符串和资源之间的映射关系 -->
<result name="ok">/ok.jsp</result>
</action>
</package>
</struts>
jsp页面的设计
<body>
<form action="Login!Login" method="post">
用户名:<input type="text" name="name"> <br/><br/>
年龄:<input type="text" name="age"><br/><br/>
<input type="submit" value="提交"/>
</form>
</body>
这就是action属性进行取值
大家都知道Java是一种面向对象的一种语言,我们进行取值,我们可以通过进行面向对象进行处理 ,就是我们前面说的 DomainModel接受参数的方法进行接受参数,
在这里我们就只是修改一下Action
首先我们对接受的对象进行封装成一个实体类
public class UserInfo {
private String name;
private Integer age;
public String getAge() {
return age;
}
public void setId(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
testAction里面的变化
import com.opensymphony.xwork2.ActionSupport;
public class testAction extends ActionSupport {
private UserInfo user;
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
//定义前台请求的方法 进行数据的请求
public String Login(){
System.out.println(user.getName);
System.out.println(user.getAge);
//返回值 进行页面的跳转
return "ok";
}
}
页面不做任何改变
我们在这里讲说一下第三种接受参数了 ModeDriven,这是我个人比较建议的一种方法进行接受参数
这里注意一下 ,这里我们的还是需要定义实体类,但是在改变的地方在Action中
首先我们建立的Action不仅仅需要继承AcrtionSupport,而且还需要实现接口ModelDriver并且要实现里面的getModel()方法,在方法中返回你要的对象,其余地方不做任何改变
public class LoginAction extends ActionSupport implements ModelDriven<UserInfo>{
private static final long serialVersionUID = 7199807303646261718L;
//注意这里需要new一个对象
private UserInfo user=new UserInfo();
public String Login(){
System.out.println(user.getName()+"=="+user.getPassword());
return "ok";
}
@Override
public UserInfo getModel() {
// TODO Auto-generated method stub
return user;
}
}
在这里我们把接受参数的方法都提了一下,前面也说了,这里不对request取值的方法进行说明,我们建议用后面一种;
在这里可能有人有疑问了,如果我们的实体类是List的集合我们怎么去接受参数,在这里我们也进行提一下,这里直接上代码了
实体类:
userInfo 实体类:
public class UserInfo {
private int id;
private String name;
private String password;
private List<String> aihao;
private List<Dome> listDome;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 List<String> getAihao() {
return aihao;
}
public void setAihao(List<String> aihao) {
this.aihao = aihao;
}
public List<Dome> getListDome() {
return listDome;
}
public void setListDome(List<Dome> listDome) {
this.listDome = listDome;
}
}
Dome实体类
public class Dome {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
Action中:
public class testAction extends ActionSupport implements ModelDriven<UserInfo>{
private static final long serialVersionUID = 7199807303646261718L;
private UserInfo user=new UserInfo();
public String Login(){
System.out.println(user.getName()+"=="+user.getPassword());
//集合取值
System.out.println(user.getAihao().get(0));
System.out.println(user.getAihao().get(1));
//集合对象取值
System.out.println(user.getListDome().get(0).getName()+"=="+user.getListDome().get(1).getAge());
return "ok";
}
@Override
public UserInfo getModel() {
// TODO Auto-generated method stub
return user;
}
}
页面:
<body>
<form action="Login!Login" method="post">
用户名:<input type="text" name="name"> <br/><br/>
年龄:<input type="text" name="password"><br/><br/>
爱好1:<input type="text" name="aihao[0]"><br/><br/>
爱好2:<input type="text" name="aihao[1]"><br/><br/>
名字:<input type="text" name="listDome[0].name"> <br><br>
年龄:<input type="text" name="listDome[1].age"/> <br><br>
<input type="submit" value="提交"/>
</form>
</body>
这就是Struts的接受参数