欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pring的AbstractCommandController简单例子 博客分类: 页面 页面spring 

程序员文章站 2024-03-14 19:11:17
...
(引自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