Spring的AbstractCommandController简单例子

作者在 2007-12-26 09:59:08 发布以下内容

        今天来介绍一下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,以后会讲这类控制器的例子。

默认分类 | 阅读 2944 次
文章评论,共0条
游客请输入验证码