Maven 构建SpringMVC项目自学笔记

来源:互联网 发布:莽荒纪灵兽进阶数据 编辑:程序博客网 时间:2024/05/20 02:25

 

参考:http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html

 

                                                             Maven构建SpringMVC项目学习笔记

 

一、背景介绍

SpringMVC虽然并不是MVC中的主流,但是本人觉得SpringMVCStruts要好用,真正做到了零配置。一次使用,就放不下了。

 

二、构建工程

 

2.1、用maven插件构建项目框架

maven具有强大构建功能,使用maven可以构建多种不同类型的工程。这里我们构建maven-archetype-webapp类型的项目。在Eclipse->New中选择other,找到maven Project型。如下图:

 

 

 

然后会出现选择构建maven项目的简单选项,选择默认,点Next

 

 

 

在选完路径之后,我们选择构建类型maven-archetype-webapp,如下图:

 

 

 

 

接下来,填写工程的Group IdArtifact Id,点Finish如下图:

 

 

 

 

 

完成后,项目结构以及pom.xml文件如下:

 

 

 

 

接下来,我们要完善项目的目录,配置。

 

2.2、完善项目

 

首先,完善目录,增加重要的source Folder,这个不是简单的Floder,这些文件夹是会参与编译的。增加src/main/javasrc/test/resourcessrc/test/java目录。让目录变成标准的maven结构。如下图:

 

 

 

 

 

 

其他类似,全部建完后,接下来,改变一些配置:

让工程的JDK用本地的jdk;

让工程的字符集为UTF-8;

改变工程的目录顺序;

 

  这些都完成之后,工程目录应该是如下的样子:

项目结构图如下:

 

 

 

 

2.3、将工程变成web工程

 

此时,我们的工程还不是标准的web工程,可以在eclipse中增加web工程的特性,选择工程的Properties,Project Facets,如下图

 

 

 

 

 

 

这里,我们选择Dynamic Web Module,版本选择2.4,这个版本比较通用。如下图:

 

 

 

 

此时,我们看到目录中多了一个WebContent目录,由于使用maven构建,web目录是src/main/webapp,所以我们删除WebContent目录。接下来,要配置web项目的发布目录,就是Deployment Assembly,如图:

 

 

 

test目录不要发布,WebContent目录没有了,所以这三项都删掉。并且增加src/main/webapp目录,和Maven Dependenices,完成之后如下图:

 

 

 

为了防止项目下的webappWebContent混淆,况且我们的web目录是以webapp文件夹为主,所以建议删掉项目下的WebContent文件夹,但也可以不删.

 

 

 

 

于是,我们的工程就完全是一个web工程了。

 

 

 

 

 

三、工程SpringMVC配置

 

3.1 赋予工程的springmvc特性

 

配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,一个是DispatcherServlet。代码如下:

 

web.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="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">

 

    <!--配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找applicationContext.xml作为spring容器的配置文件,这里可以初始化一些bean,如DataSource。我们这里什么也不做。 -->

    <listener>

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

    </listener>

 

    <!--配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:

       HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。 -->

    <servlet>

       <servlet-name>mvctest</servlet-name>

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

    </servlet>

 

    <servlet-mapping>

       <servlet-name>mvctest</servlet-name>

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

    </servlet-mapping>

 

    <welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

 

配置ContextLoaderListener表示,该工程要以spring的方式启动。启动时会默认在/WEB-INF目录下查找applicationContext.xml作为spring容器的配置文件,这里可以初始化一些bean,如DataSource。我们这里什么也不做。代码如下:

 

applicationContext.xml

 

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEbeansPUBLIC"-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

</beans>

 

 

配置DispatcherServlet表示,该工程将采用springmvc的方式。启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:

 

HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller

 

ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。

 

代码如下

 

mvctest-servlet.xml

 

<?xmlversion="1.0"encoding="UTF-8"?>

<!-- Bean头部 -->

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

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

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

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

    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 

             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd             

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

 

    <!--激活@Controller模式 -->

    <mvc:annotation-driven/>

    <!--对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能需要更改 -->

    <context:component-scanbase-package="com.liangbinny.web.controller"/>

 

    <bean

       class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

 

    <beanid="viewResolver"

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

       <propertyname="prefix">

           <value>/WEB-INF/jsp/</value>

       </property>

       <propertyname="suffix">

           <value>.jsp</value>

       </property>

    </bean>

</beans>

 

 

写完后,项目结构图如下:

 

 

3.2、添加Maven依赖

 

在用maven生成框架时,就生成了pom.xml,这就是maven的配置文件。我们要引入spring-web,servlet等特性的包。代码如下:

 

<projectxmlns="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.liangbinny.springmvc</groupId>

    <artifactId>SpringMVCTest</artifactId>

    <packaging>war</packaging>

    <version>0.0.1-SNAPSHOT</version>

    <name>SpringMVCTestMaven Webapp</name>

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

    <dependencies>

       <dependency>

           <groupId>junit</groupId>

           <artifactId>junit</artifactId>

           <version>3.8.1</version>

           <scope>test</scope>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-web</artifactId>

           <version>3.0.5.RELEASE</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-webmvc</artifactId>

           <version>3.0.5.RELEASE</version>

       </dependency>

       <!--Tomcat依赖包,web容器提供 -->

       <dependency>

           <groupId>org.apache.tomcat</groupId>

           <artifactId>servlet-api</artifactId>

           <version>6.0.30</version>

           <scope>provided</scope>

       </dependency>

       <dependency>

           <groupId>org.apache.tomcat</groupId>

           <artifactId>jsp-api</artifactId>

           <version>6.0.30</version>

           <scope>provided</scope>

       </dependency>

    </dependencies>

    <build>

       <finalName>SpringMVCTest</finalName>

    </build>

</project>

 

 

maven就是这么简单,一旦保存,maven就会自动下载pop.xmljar包。此时可以看到目录中Maven Dependencies下生成了jar包。

 

 

 

 

更多的jar包可以在maven中心库下载:http://mvnrepository.com.(如果没有自己的仓库的话)

 

3.3、修改classpath文件

         我们一般习惯把class那些文件buildwebapp下面去,所以修改项目下的.classpath文件,使得项目buildwebapp下面。

 

Navigator视图下才能看得到classpath文件。

 

 

 

 

 

 

output修改为以下:

<classpathentrykind="output"path="src/main/webapp/WEB-INF/classes"/>

 

 

四、测试实例

 

下面写个简单的测试。先写Controller。编写两个类,LoginControler.javaLoginForm.java。代码如下:

LoginForm.java

 

package com.liangbinny.domain;

 

publicclass LoginForm {

    private Stringusername;

    private Stringpassword;

 

    public String getUsername() {

       returnusername;

    }

 

    publicvoid setUsername(String username) {

       this.username = username;

    }

 

    public String getPassword() {

       returnpassword;

    }

 

    publicvoid setPassword(String password) {

       this.password = password;

    }

}

 

 

LoginController.java

 

package com.liangbinny.web.controller;

 

importjavax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.stereotype.Controller;

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

import org.springframework.web.servlet.ModelAndView;

 

import com.liangbinny.domain.LoginForm;

 

@Controller

publicclass LoginController {

    @RequestMapping(value="login")

    public ModelAndView login(HttpServletRequest request,HttpServletResponse response,LoginForm command ){

        String username = command.getUsername();

        ModelAndView mv = new ModelAndView("/index/index","command","LOGIN SUCCESS, " + username);

        return mv;

    }

}

 

还有两个jsp,做些简单的功能,一个表单login.jsp,一个表单提交的返回index.jsp,代码如下:

 

 

 

index.jsp

 

<%@ page language="java"contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8">

<title>Insert title here</title>

</head>

<body>

    <div>

       <formaction="login"methed="get">

           <inputtype="text"name="username"><inputtype="submit"

              value="SUBMIT">

       </form>

    </div>

</body>

</html>

 

 

整个项目图如下:

 

 

 

 

这个项目,用Maven打包以后,就可以发布到tomcat下运行了。

 

但是如果想要在eclipseruntime server上跑起来,还需要给项目添加tomcatruntime lib才可以运行,如下:

 

 

 

 

 

 

然后选择Add Library

 

 

 

 

选择Server Runtime

 

 

 

Finish.

 

此外,防止jar冲突,还需要注释调pom.xml里的文件

 

<!-- Tomcat依赖包,web容器提供 -->

<!--

       <dependency>

           <groupId>org.apache.tomcat</groupId>

           <artifactId>servlet-api</artifactId>

           <version>6.0.30</version>

           <scope>provided</scope>

       </dependency>

       <dependency>

           <groupId>org.apache.tomcat</groupId>

           <artifactId>jsp-api</artifactId>

           <version>6.0.30</version>

           <scope>provided</scope>

       </dependency>

        -->

重新依赖jar包,重新更新依赖,重新build项目。

 

然后启动tomcat,打开网页,输入

http://localhost:8080/SpringMVCTest/

就可以看到正常的页面了。

 

 

 

 

 

 

输入并点submit按钮就可以跳转了。

 

原创粉丝点击