`

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"%>
<!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,以后会讲这类控制器的例子。
分享到:
评论

相关推荐

    Spring MVC Demo.doc

    在这个例子中,`UserController`继承了`AbstractCommandController`,它提供了数据绑定和类型转换的功能。 在`UserController`中,我们可以定义方法来处理特定的HTTP请求,并使用`@RequestMapping`注解来指定对应的...

    springmvc非注解controller控制器

    在Spring MVC早期版本中,Controller通常通过实现Spring的`Controller`接口或者继承`SimpleFormController`、`AbstractCommandController`等基类来创建。然而,随着框架的发展,注解驱动的编程方式逐渐成为主流,如`...

    外文翻译Spring的MVC构架模式

    控制器是负责处理请求和响应的组件,它可以是一个简单的控制接口,也可以是一个复杂的控制器,例如 AbstractController、AbstractCommandController、MultiActionController、SimpleFormController 和 ...

    外文翻译-Spring的web-MVC-构架模式.docx

    例如,AbstractController、AbstractCommandController等基类帮助开发者创建适合不同场景的控制器。 4. **数据绑定与校验**:Spring的数据绑定机制非常灵活,可以将输入验证错误与系统错误分开处理,减少了业务对象...

    外文翻译-Spring的web-MVC-构架模式 (2).pdf

    缺省控制器接口简单,可以支持多层控制结构,如AbstractController、AbstractCommandController、MultiActionController等。 - **模型与视图**:Spring的数据绑定机制允许灵活地操作和验证模型对象,而不局限于特定...

    外文翻译-Spring的web MVC 构架模式 (2).pdf

    默认的控制接口提供了一个简单的方法`handleRequest(request, response)`,通过扩展AbstractController、AbstractCommandController、SimpleFormController等基类,可以实现多层控制逻辑。与Struts不同,Spring允许...

    外文翻译-Spring的web-MVC-构架模式 (3).pdf

    控制器接口默认简单,但可以通过AbstractController、AbstractCommandController等基类实现更复杂的控制逻辑。Spring的控制器不强制使用特定的表单接口,可以操作任何对象,无论是命令对象还是业务对象,灵活性远...

    外文翻译-Spring的web-MVC-构架模式.pdf

    DispatcherServlet提供了一个简单但可扩展的控制接口,通过不同的Controller子类(如AbstractController、AbstractCommandController等)实现多层控制。与Struts相比,Spring不要求使用特定的FormController,而是...

    SpringMVC教程

    比如,AbstractCommandController用于自动填充命令对象的请求参数,而MultiActionController允许在同一个类中定义多个处理方法,这样可以更好地组织代码。 ModelAndView类提供了多种构造函数,方便开发者根据不同的...

    外文翻译-Spring的web MVC 构架模式.pdf

    Spring提供了多种控制器基类,如`AbstractController`、`AbstractCommandController`、`MultiActionController`、`SimpleFormController`和`AbstractWizardFormController`,以适应不同层次的控制需求。与Struts不同...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    - 默认提供了一个简单的控制接口,主要方法为`ModelAndView handleRequest(request, response)`,开发者可以基于此实现自定义的控制器逻辑。 2. **控制器(Controller)**: - Spring MVC提供多种类型的控制器,...

    外文翻译-Spring的web-MVC-构架模式 (2).docx

    它提供了一个简单的控制器接口,如`ModelAndView.handleRequest(request, response)`,并支持多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和...

    外文翻译-Spring的web-MVC-构架模式讲解学习 (2).pdf

    与Struts相比,Spring Web MVC的控制器接口更简单,允许开发者根据需求选择不同类型的控制器,如AbstractController、AbstractCommandController、MultiActionController等,无需强制使用特定的FormController。...

    毕设 外文文献翻译-Spring的web MVC构架模式 (3).docx

    为了适应复杂的应用场景,Spring提供了多种抽象控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和AbstractWizardFormController,允许开发者按需选择。...

    开源框架 Spring Gossip

    &lt;br&gt;AOP 入门 AOP 的观念与术语都不是很直觉,可以先从代理机制(Spring 实现 AOP 的一种方式)来看看实际的例子,从而了解 AOP 的观念与各种术语。 从代理机制初探 AOP 动态代理 &lt;br&gt;AOP 观念与...

    SSM英文文献翻译 (2).docx

    - **控制器接口**:Spring的控制器接口比Struts更简单,提供了多种控制器类型以适应不同复杂度的需求,如AbstractController、AbstractCommandController等。 - **命令对象**:Spring允许任何对象作为命令或表单...

    外文翻译_Spring的web MVC 构架模式.docx

    Spring提供了更灵活的控制层接口,如AbstractController、AbstractCommandController等,允许开发者根据需求选择合适的基类,而不是强制使用特定的Action或Form类。此外,Spring的数据绑定机制更为强大,可以直接...

    (完整word版)SSM英文文献翻译.pdf

    Spring MVC提供了一套灵活的控制器接口,如AbstractController、AbstractCommandController等,允许开发者选择适合的基类,甚至可以不使用Web表单的情况下进行操作。 与Struts等框架相比,Spring MVC更加灵活,不...

    毕设外文文献翻译--Spring的webMVC构架模式.pdf

    此外,Spring MVC支持多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController等,这使得开发者可以根据具体需求选择合适的控制器基类,增强了代码的可复用性和可维护性。...

    (完整word版)SSM英文文献翻译.docx

    它提供了多种控制器类型,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,满足不同层次的控制需求。与Struts不同,SpringMVC允许直接使用任意对象作为命令或...

Global site tag (gtag.js) - Google Analytics