您的位置:首页 > 编程语言 > Java开发

springmvc入门例子(AbstractCommandController)

2014-08-07 15:10 609 查看
由于最近看spring方面的书籍,其中介绍了springmvc框架,先试了下spring官方给的例子,但是感觉不是很易懂,所以我就了个小例子

首先实现的是用户登录,并在另外个页面显示用户名和密码

一、首先新建个web项目,创建实体User.导入需要的jar包(jar可以参考官方给的文档)可以参考官网,有详细的jar名称和包所在位置。

User实体包含两个属性username和password,添加get/set方法.

First create a 
'lib'
 directory in the 
'war/WEB-INF'
 directory.
Then, from the Spring distribution, copy 
spring.jar
 (from 
spring-framework-2.5/dist
)
and 
spring-webmvc.jar
 (from 
spring-framework-2.5/dist/modules
)
to the new 
'war/WEB-INF/lib'
 directory. Also, copy 
commons-logging.jar
 (from 
spring-framework-2.5/lib/jakarta-commons
)
to the 
'war/WEB-INF/lib'
 directory. These jars will be deployed to the server and they are also used during the build
process.

二、修改web.xml

按照官方API,在web.xml中添加springmvc的命名空间,并配置springmvc的核心控制器DispatchServlet,并让该类在项目启动时加载,配置如下

<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

(注意:本例中url-pattern定义格式为.htm,则说明所有请求后缀为.htm的都会被DispatchServlet拦截)

三、在web.xml同级目(WEB-INF)下创建springapp-servlet.xml。

   创建的这个xml名称取决于web.xml中配置的<servlet-name>springapp</servlet-name>,两者需要保持一致(The
name of this file is determined by the value of the 
<servlet-name/>
 element from the 
'web.xml'
,
with 
'-servlet'
 appended to it (hence 
'springapp-servlet.xml'
))。该xml将会被springmvc
框架自动调用,在这个xml中将会定义一些DispatchServlet需要调用bean.

在springapp-servlet.xml定义处理登录需要的bean对象,内容如下。
<?xml
version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

       

       <bean name="/login.htm" class="com.huansoo.controller.LoginController">

        <property name="page" value="user"></property><!-- 注入属性值,用户登录成功后,返回查看用户用户和密码时使用 -->
       </bean>
 
   <!-- springmvc framework提供的解析视图的资源工具,此项也可不配置,下文将会详细说明 -->
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/jsp/"></property><!--视图前缀-->
       <property name="suffix" value=".jsp"></property><!--视图后缀-->
       </bean>
</beans>

四、index.jsp中写两个form元素,
<form action="login.htm"
method="post">
用户名:<input name="username" type="text"/></br>
密码<input name="password" type="password"></br>
<input type="submit" value="登录">
</form>

当点击“登录”时,会访问login.htm,改请求会被DispatchServlet拦截。DispatchServlet会去springapp-servlet.xml查找该请求对应的控制器即com.huansoo.controller.LoginController这个类,会默认访问实例中的ModelAndView方法,在这个方法中做逻辑处理然后返回ModelAndView。代码如下
public class LoginController
extends AbstractCommandController{
private String page;
public LoginController(){
super.setCommandClass(User.class);//此句是必须,否则会报错(Cannot create command without commandClass being),作用是将jsp表单中属性绑定到表单对象中.当然如果在LoginController
中配置了<property name="commandClass" value="comand.User">时,此句无需再写
}
@Override
protected ModelAndView handle(HttpServletRequest req,
HttpServletResponse res, Object command, BindException errors)
throws Exception {
User user = (User) command;
List list = new ArrayList();
list.add(0, user.getUsername());
list.add(1, user.getPassword());
return new
ModelAndView(getPage(), "info", list);
}

public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}

}

代码中new ModelAndView(getPage(),
"info", list)中的getPage()获取到的是springapp-servlet.xml中注入的值user,“info”是显示用户名和密码时,包含该用户名和密码的实体数组bean的名称,一会在user.jsp中会看到。
如果上面springapp-servlet.xml没有注入<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">,
此时返回的应该是return new ModelAndView("/WEB-INF/jsp/user.jsp",
"info", list),工具InternalResourceViewResolver为了方便灵活配置,将“/WEB-INF/jsp/user.jsp”分为三部分,第一部分,就是前缀即prefix,第二部分是真正的jsp名称user,第三部分是要跳转的页面后缀jsp。
user.jsp中内容如下。
<table
cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="60%" style="font-size: 14px;font-weight: bold">用户名:</td>
<td>${info[0]}</td>
</tr>
<tr>
<td width="60%" style="font-size: 14px;font-weight: bold">密 码:</td>
<td>${info[1]}</td>
</tr>
</table>

好了,简单的springmvc小例子就完成了。需要该例子源码的可以去我的百度网盘下载,http://pan.baidu.com/s/1c07v81U
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息