今天来介绍一下Spring的AbstractCommandController。Spring的Controller有很多选择,在你的应用中选择最合适的一个将会让你事半功倍。Spring Controller有一个自上而下的等级分类,基本上是从简单到复杂:
Controller, AbstractController
-->
ThrowawayController
-->
MultiActionController
-->
BaseCommandController, AbstractCommandController
-->
AbstractFormController, SimpleFormController
-->
AbstractWizardFormController
如果Controller中不需要处理逻辑事务,或者只需要少量的功能,大都可以继承AbstractController。如果需要处理请求中的输入,那么可以继承AbstractCommandController。这就是今天要介绍的内容。注意,环境参照Spring的简单例子。
首先,我们编写一个index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Username:
Password:
这里我们要接收username和password两个参数。
然后配置web.xml:
SpringTest
test-servlet.xml:
我们先写一个User类,可以看成User Bean(User.java):
package src;
public class User {
private String username;
private String password;
public User(){
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
这里也就两个属性即username和password,同时还有相应的get和set方法。
然后就是UserCommandController.java:
package src;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
public class UserCommandController extends AbstractCommandController{
private String page;
public UserCommandController(){
setCommandClass(User.class);
}
public ModelAndView handle(HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors) throws Exception{
User user = (User)command;
String username = user.getUsername();
String password = user.getPassword();
List list = new ArrayList();
list.add(0, username);
list.add(1, password);
return new ModelAndView(getPage(), "info", list);
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
}
这个控制器要处理输入的username和password(很简单),不像在Struts中必须要继承ActionForm。该类有一个要覆盖的handle()方法。在handle()方法中,command就是输入的一个对象,这里需要先转化为User类,并调用相应的方法得到username和password两个参数。然后放到一个list里面,再调用getPage()方法传回到指定的视图去。这个视图名则在test-servlet.xml中指明了为user。这里我们可以看出Spring框架的灵活性。要修改映射或者指定视图等的话只要在配置文件里面修改就可以了,而不用修改源程序。
那么接下来就是user.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Your username is:${info[0] }
Your password is:${info[1] }
这里就把刚刚的username和password显示了出来。
处理简单的输入可以采用AbstractCommandController,就像这个例子一样。可以根据实际情况增加相应的代码来满足不同的需求。
当然,处理表单还有SimpleFormController和AbstractFormController,以后会讲这类控制器的例子。