Hello Spring MVC

搭建一个最简单的Spring MVC的项目

1、准备开发环境与运行环境

1)开发环境

我用的是Myeclipse6.5/Tomcat6.0

2)运行环境

jre版本应该没什么要求,我用的是jre1.6

将spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar包拷贝到项目的WEB-INF/lib目录下;

需要添加Apache commons logging日志,此处使用的是commons.logging-1.1.1.jar

2、配置前端控制器

在web.xml中添加如下配置


<?xml version="1.0" encoding="UTF-8"?>
<web-app 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>springmvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>
</web-app>


注:

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

它的值必须是一个整数,表示servlet应该被载入的顺序

当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

当值相同时,容器就会自己选择顺序来加载。

2)默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例为WEB-INF/ springmvc-servlet.xml。


3、配置HandlerMapping、HandlerAdapter

<!-- HandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
 
<!-- HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
 
<!-- 处理器 -->
<bean name="/hello" class="com.chc.controller.HelloWorldController"/>

注:DispatcherServlet会加载到springmvc-servlet.xml这个配置文件

1)HandlerMapping 映射处理器,根据url的/hello找到相应的处理器类,调用HandlerMapping类中的getHandler(HttpServletRequest request)方法返回一个

HandlerExecutionChain对象,HandlerExecutionChain对象包含一个处理器(即HelloWorldController)和若干个拦截器,返回的对象再交回给DispatcherServlet。

2)HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

处理器功能处理方法的调用:HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视

图名),交回给DispatcherServlet;

4、配置ViewResolver

在springmvc-servlet.xml中加入如下代码:

<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

注:refix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“/jsp/hello.jsp”;


5、实现controller接口的处理器

package com.chc.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloWorldController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
       //1、收集参数、验证参数
       //2、绑定参数到命令对象
       //3、将命令对象传入业务对象进行业务处理
       //4、选择下一个页面
       ModelAndView mv = new ModelAndView();
       //添加模型数据 可以是任意的POJO对象
       mv.addObject("message", "Spring MVC,我来了");
       //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
       mv.setViewName("hello");
       return mv;
    }
}

注:

1) 实现controller接口的时候注意不要导错了包,现在大多数都用注解方式实现了,现在暂时用实现接口的方式,注解机制以后会整理。

ModelAndView:包含了视图要实现的模型数据和逻辑视图名;“mv.addObject("message", "Hello World!");”表示添加模型数据,此处可以是任意POJO对象;

“mv.setViewName("hello");”表示设置逻辑视图名为“hello”,视图解析器会将其解析为具体的视图,如前边的视图解析器InternalResourceViewResolver会将其解析

为/jsp/hello.jsp”。

6、视图页面 hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
${message}
</body>
</html>

7、测试项目

启动项目,请求路径http://localhost:9090/SpringMVC/hello,页面显示出“Spring MVC,我来了”,证明例子搭建成功。

你可能感兴趣的:(spring,mvc,mvc,HandlerMapping,HandlerAdapter)