Struts2是Java Web项目开发中最经典的框架技术,受到许多软件开发人员的喜欢和追捧,是软件企业招聘Java软件人才时要求必备的技能之一。
Struts2是基于MVC设计模式的Java Web框架技术之一,Struts2框架按照MVC的设计思想把Java Web应用程序分为三层:控制器层(包括核心控制器StrutsPerpareAndExecuteFilter和业务控制器Action);模型层(包括业务逻辑组件和数据库访问组件);视图层(包括HTML、JSP、Struts2的标签等)
Struts2中使用拦截器来处理用户请求,从而允许用户的业务控制器Action与Servlet分离。
一个客户请求在Struts2框架中处理的过程大概有以下几个步骤:
1、客户提交请求到服务器。
2、请求被提交到一系列的过滤器或者拦截器,最后到达StrutsPerpareAndExecuteFilter;StrutsPerpareAndExecuteFilter是核心控制器,是Struts2中MVC模式的控制器部分。
3、StrutsPerpareAndExecuteFilter读取配置文件struts.xml,根据配置信息调用某个Action来处理客户请求。
4、Action处理后,返回处理结果,StrutsPerpareAndExecuteFilter根据struts.xml的配置找到对应的页面跳转。
Struts2的控制器主要有核心控制器StrutsPerpareAndExecuteFilter和业务控制器Action。
那么我们就来分别了解一下这些控制器。
1、StrutsPerpareAndExecuteFilter控制器
StrutsPerpareAndExecuteFilter是一个过滤器,是Struts2的核心控制器,控制着整个Java Web项目中数据的流向和操作。而且StrutsPerpareAndExecuteFilter需要在web.xml中进行配置。除了用web.xml配置文件配置核心控制器StrutsPerpareAndExecuteFilter外,Struts2控制数据的操作时,还需要用到Struts2的另一个配置文件struts.xml。
2、Action控制器
Action时Struts2的业务控制器,它可以不实现任何接口或者不继承任何Struts2类。Action类是一个基本的Java类,具有很高的重用性。Action类不实现任何的业务逻辑,只负责组织调度业务模型组件。(就只是申明一个类,类里面只有属性和它的get、set方法,不过也可以重写Action类的execute()方法——仅返回一个字符串作为处理结果,例如 success、false)。
下面我们举一个银行存款的模型组件和业务控制器的代码:
Bank模型组件(Bank.java)
public class Bank{
private String accounts; //账号
private String money; //资金
private String getAccounts(){
return accounts;
}
public void setAccounts(String accounts){
this.accounts=accounts;
}
public String getMoney(){
return money;
}
public void setMoney(String money){
this.money=money;
}
//模拟存款功能的方法
public boolean saving(String accounts,String money){
............. //调用其它类对数据库进行操作,这里省略的代码部分表示数据库查询的数据
boolean b1;
if(getAcccounts().equals("accounts")&&getMoney().equals("money")){
b1=true;
}
else{
b1=false;
}
return b1;
}
}
业务控制器(BankSavingAction.java)
public class BankSavingAction{
private String accounts; //账号
private String money; //资金
private String getAccounts(){
return accounts;
}
public void setAccounts(String accounts){
this.accounts=accounts;
}
public String getMoney(){
return money;
}
public void setMoney(String money){
this.money=money;
}
public String execute(){
Bank bk=new Bank();
if(bk.saving(accounts,money)){
return "success";
}
else{
return "error";
}
}
}