springmvc入门例子(AbstractCommandController)

来源:互联网 发布:日本 首都 知乎 编辑:程序博客网 时间:2024/05/01 10:51

由于最近看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



0 0
原创粉丝点击