Maven学习总结(六)——用Maven创建Spring3 MVC项目

一、      环境

spring-framework-3.2.4.RELEASE

jdk1.7.0_11

Maven3.0.5

eclipse-jee-juno-SR2-win32

二、      创建Web项目

Eclipse中创建Web项目,见前边日志《Maven3路程(三)用Maven创建第一个web项目(1)》

三、      项目依赖,配置pom.xml文件

pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lei.demo</groupId>

  <artifactId>spring3-mvc-demo</artifactId>

  <packaging>war</packaging>

  <version>0.0.1-SNAPSHOT</version>

  <name>spring3-mvc-demo Maven Webapp</name>

  <url>http://maven.apache.org</url>

  <dependencies>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-core</artifactId>

        <version>3.2.4.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-web</artifactId>

        <version>3.2.4.RELEASE</version>

    </dependency>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

        <version>3.2.4.RELEASE</version>

    </dependency>

  </dependencies>

  <build>

    <finalName>spring3-mvc-demo</finalName>

  </build>

</project>

 

四、      Controller & Mapping

Spring3中,annotation的应用无处不在,以下创建一个Controller,命名为HelloController,请注意@RequestMapping的配置。

HelloController.java

package com.lei.demo.controller;

 

import java.text.SimpleDateFormat;

 

import javax.print.attribute.standard.DateTimeAtCompleted;

import javax.xml.crypto.Data;

 

 

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

 

@Controller

@RequestMapping("/welcome")

public class HelloController {

    @RequestMapping(method = RequestMethod.GET)

    public String printWelcome(ModelMap model) {

 

        model.addAttribute("message", "Spring3 MVC 例子");

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

        model.addAttribute("date", dateFormat.format(new java.util.Date()));

        return "hello";

    }

}

 

 

五、      创建Jsp页面

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</title>

</head>

<body>

    <h1>Message : ${message}</h1>

    <h2>当前时间:${date}</h2>

</body>

</html>

 

 

六、      Spring 的配置文件

WEB-INF下,创建配置文件mvc-dispatcher-servlet.xml如下

<?xml version="1.0" encoding="UTF-8"?>

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

    xmlns:context="http://www.springframework.org/schema/context"

    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-3.0.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

       

    <context:component-scan base-package="com.lei.demo.controller" />

   

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix">

            <value>/WEB-INF/pages/</value>

        </property>

        <property name="suffix">

            <value>.jsp</value>

        </property>

    </bean>   

 

</beans>

 以上配置视图解析中,属性prefix和属性suffix负责组装呈现视图的前缀和后缀,再配合自己写的controller,此例是“HelloController.java”中的return ”hello“,那么对应关系就是如下:

[prefix]+[controller return]+[stuffix]="/WEB-INF/pages/"+"hello"+".jsp"=/WEB-INF/pages/hello.jsp

七、      Web配置文件和Spring配置文件的集成

web.xml文件配置如下

<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">

  <display-name>Archetype Created Web Application</display-name>

  <servlet>

        <servlet-name>mvc-dispatcher</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

 

    <servlet-mapping>

        <servlet-name>mvc-dispatcher</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>

 

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>

    </context-param>

 

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

</web-app>

 

配置说明:

使用Spring MVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet(这个ServletHttpServlet继承而来),所以可以配置多个DispatcherServletDispatcherServlet是前置控制器,配置在web.xml文件中的。负责拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。某某规则:是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。

<servlet-name> mvc-dispatcher</servlet-name>这个Servlet的名字是mvc-dispatcher,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中。 

 

上边的web.xml为例

1.<servlet>定义了一个名字为mvc-dispatcherservlet,其中<load-on-startup>1</load-on-startup>是启动顺序,让这个ServletServlet容器一起启动。

2.<servlet-mapping>定义了哪个servlet应该处理什么样的url匹配,上例中定义mvc-dispatcher这个servlet来处理所有匹配“/”url

 <url-pattern>/</url-pattern>,会匹配到类似“/welcome”这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url”

3.<context-param>元素含有一对参数名和参数值,用作应用的ServletContext上下文初始化参数。参数名在整个Web应用中必须是惟一的。

这里contextConfigLocation这个参数名,是被spring定义好的,会去加载spring的配置文件

 

DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean,此处就会寻找mvc-dispatcher-servlet.xml文件来加载spring的配置。

八、      演示

 先看下目录结构:

https://images0.cnblogs.com/blog/201693/201311/12165412-224014122c884c3dac8b649e375b2bc1.png

效果:

https://images0.cnblogs.com/blog/201693/201311/13110525-7b7ad10682f342d69fe212804c12f424.png

 

猜你喜欢

转载自blog.csdn.net/yy_csdn1314/article/details/84556408