一直想写Struts2的底层实现,酝酿了两个星期,今天把它实现。
首先,我们在运用的时候都会使用action,实现跳转,下面我们写一个UserAction:
public class UserAction {
public String toAddUser(){
return "success";
}
public String addUser(){
return "adduser";
}
}
我们在使用Struts2的时候,一个很重要的配置文件是:struts.xml,因此我们需要读取它,知道他里面的内容,java解析xml我写过了一篇文章,可以去看看。
下面我们写一个配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<struts>
<package namespace="/user" >
<action >
<result>/success.jsp</result>
<result>/addUser.jsp</result>
</action>
</package>
</struts>
之后我们就需要去读取这个配置文件,但是之前我们需要我们需要建立几个实体类去存储这些元素,由外到内排列:
1.package的实体类
import java.util.List;
public class PackageEntity {
private String name;
private String namespace;
private List<ActionEntity> actions;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public List<ActionEntity> getActions() {
return actions;
}
public void setActions(List<ActionEntity> actions) {
this.actions = actions;
}
}
private List<ActionEntity> actions;是吧action实体类的内容放到package中。
2.action的实体类
import java.util.List;
public class ActionEntity {
private String name;
private String classname;
private List<ResultEntity> results;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public List<ResultEntity> getResults() {
return results;
}
public void setResults(List<ResultEntity> results) {
this.results = results;
}
}