pring的AbstractCommandController简单例子

阅读更多
(引自Spring in Action -- 命令控制器(如AbstractCommandController,BaseCommandController),通过将请求参数绑定到命令对象来简化请求的处理。请求参数可以通过URL参数或Web表单字段得到。尽管命令控制器可以处理表单输入,Spring还是提供了另一种可以为处理表单提供更好支持的控制器。下面,让我们来介绍Spring的表单控制器(如AbstractFormController,SimpleFormController。)

今天来介绍一下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"%>




Index Page




Username:

Password:






        这里我们要接收username和password两个参数。
        然后配置web.xml:



test
org.springframework.web.servlet.DispatcherServlet
1



test
*.do



SpringTest


index.html
index.htm
index.jsp
default.html
default.htm
default.jsp


        test-servlet.xml:





user





/WEB-INF/jsp/


.jsp




        我们先写一个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"%>




User Information Page



Your username is:${info[0] }



Your password is:${info[1] }





        这里就把刚刚的username和password显示了出来。
        处理简单的输入可以采用AbstractCommandController,就像这个例子一样。可以根据实际情况增加相应的代码来满足不同的需求。
        当然,处理表单还有SimpleFormController和AbstractFormController,以后会讲这类控制器的例子。

你可能感兴趣的:(页面,spring)