(引自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"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Index Page</title>
</head>
<body>
<center>
<form. action="user.do" method="post">
Username:<input type="text" name="username" /><br/>
Password:<input type="password" name="password" /><br/>
<input type="submit" value="Submit" />
</form>
</center>
</body>
</html>
这里我们要接收username和password两个参数。
然后配置web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<display-name>
SpringTest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
test-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="/user.do" class="src.UserCommandController">
<property name="page">
<value>user</value>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
我们先写一个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"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>User Information Page</title>
</head>
<body>
<center>
<h1>Your username is:${info[0] }</h1><br/>
<h1>Your password is:${info[1] }</h1>
</center>
</body>
</html>
这里就把刚刚的username和password显示了出来。
处理简单的输入可以采用AbstractCommandController,就像这个例子一样。可以根据实际情况增加相应的代码来满足不同的需求。
当然,处理表单还有SimpleFormController和AbstractFormController,以后会讲这类控制器的例子。
分享到:
相关推荐
在这个例子中,`UserController`继承了`AbstractCommandController`,它提供了数据绑定和类型转换的功能。 在`UserController`中,我们可以定义方法来处理特定的HTTP请求,并使用`@RequestMapping`注解来指定对应的...
在Spring MVC早期版本中,Controller通常通过实现Spring的`Controller`接口或者继承`SimpleFormController`、`AbstractCommandController`等基类来创建。然而,随着框架的发展,注解驱动的编程方式逐渐成为主流,如`...
控制器是负责处理请求和响应的组件,它可以是一个简单的控制接口,也可以是一个复杂的控制器,例如 AbstractController、AbstractCommandController、MultiActionController、SimpleFormController 和 ...
例如,AbstractController、AbstractCommandController等基类帮助开发者创建适合不同场景的控制器。 4. **数据绑定与校验**:Spring的数据绑定机制非常灵活,可以将输入验证错误与系统错误分开处理,减少了业务对象...
缺省控制器接口简单,可以支持多层控制结构,如AbstractController、AbstractCommandController、MultiActionController等。 - **模型与视图**:Spring的数据绑定机制允许灵活地操作和验证模型对象,而不局限于特定...
默认的控制接口提供了一个简单的方法`handleRequest(request, response)`,通过扩展AbstractController、AbstractCommandController、SimpleFormController等基类,可以实现多层控制逻辑。与Struts不同,Spring允许...
控制器接口默认简单,但可以通过AbstractController、AbstractCommandController等基类实现更复杂的控制逻辑。Spring的控制器不强制使用特定的表单接口,可以操作任何对象,无论是命令对象还是业务对象,灵活性远...
DispatcherServlet提供了一个简单但可扩展的控制接口,通过不同的Controller子类(如AbstractController、AbstractCommandController等)实现多层控制。与Struts相比,Spring不要求使用特定的FormController,而是...
比如,AbstractCommandController用于自动填充命令对象的请求参数,而MultiActionController允许在同一个类中定义多个处理方法,这样可以更好地组织代码。 ModelAndView类提供了多种构造函数,方便开发者根据不同的...
Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...
- 默认提供了一个简单的控制接口,主要方法为`ModelAndView handleRequest(request, response)`,开发者可以基于此实现自定义的控制器逻辑。 2. **控制器(Controller)**: - Spring MVC提供多种类型的控制器,...
它提供了一个简单的控制器接口,如`ModelAndView.handleRequest(request, response)`,并支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和...
与Struts相比,Spring Web MVC的控制器接口更简单,允许开发者根据需求选择不同类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,无需强制使用特定的FormController。...
为了适应复杂的应用场景,Spring提供了多种抽象控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和AbstractWizardFormController,允许开发者按需选择。...
<br>AOP 入门 AOP 的观念与术语都不是很直觉,可以先从代理机制(Spring 实现 AOP 的一种方式)来看看实际的例子,从而了解 AOP 的观念与各种术语。 从代理机制初探 AOP 动态代理 <br>AOP 观念与...
- **控制器接口**:Spring的控制器接口比Struts更简单,提供了多种控制器类型以适应不同复杂度的需求,如AbstractController、AbstractCommandController等。 - **命令对象**:Spring允许任何对象作为命令或表单...
Spring提供了更灵活的控制层接口,如AbstractController、AbstractCommandController等,允许开发者根据需求选择合适的基类,而不是强制使用特定的Action或Form类。此外,Spring的数据绑定机制更为强大,可以直接...
Spring MVC提供了一套灵活的控制器接口,如AbstractController、AbstractCommandController等,允许开发者选择适合的基类,甚至可以不使用Web表单的情况下进行操作。 与Struts等框架相比,Spring MVC更加灵活,不...
此外,Spring MVC支持多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController等,这使得开发者可以根据具体需求选择合适的控制器基类,增强了代码的可复用性和可维护性。...
它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...