资讯专栏INFORMATION COLUMN

使用maven创建简单的多模块 Spring Web项目

DevYK / 566人阅读

摘要:第一次写技术文章,主要内容是使用创建一个简单的项目,如有操作或理解错误请务必指出,当谦虚学习。基本思想其实就是一个项目引用别的模块包,最终项目被打成包发布。

第一次写技术文章,主要内容是使用maven创建一个简单的SpringMVC WEB 项目,如有操作或理解错误请务必指出,当谦虚学习。
做这一次的工作主要是因为想加强一下自己对Spring Web 项目的理解,因为平时都是直接写业务代码,我觉得还是有必要自己了解一下创建项目的过程。后续会基于这个项目写更多的SpringWeb开发过程,希望能帮助到有需要的人。

总的来说是一个相当精简的多模块springWeb项目搭建过程,让我们进入正题吧

我们知道单体应用,就写在一个project里面的话,业务一旦庞大起来非常难以管理。
把各个模块多带带抽出来可以方便的对jar包进行版本管理(尽管我还没经历过这个),维护项目,团队开发也会方便许多。
基本思想其实就是一个java web项目引用别的模块Jar包,最终web项目被打成war包发布。
**而所有的war包项目,jar包项目都是在同一个父模块下管理的(它们都是Maven项目)**
(如果你有IDE,装好插件就用IDE创建吧,我个人不喜欢手动命令行创建)

1. 创建父项目

下图中:框起来打勾这个会让你跳过项目模式选择,勾选对于创建项目没有什么影响,以后也许会转一下Maven这方面的文章

POM包才能做父项目,谨记!!!!!

2. 子项目结构和创建
以下是我的结构分层,你也可以按你的想法来,最终目的是要方便自己开发。
test_parent    (父项目)
    |----test_web    (web项目)
    |----test_service    (业务内容)
    |----test_framework    (工具,框架封装、配置)
    |----test_dao    (数据持久层,DO也放这)
    |----test_controller    (处理映射)
    

创建子项目直接右键父项目然后新建maven module ,也就是子模块

我们先创建web模块,这里你可以勾选第一条然后创建简单项目,
如果没有勾选,那么你要在下一步里选择 maven-achetype-webapp,这里以简单项目为例子

Group Id 和 version 都是继承父项目的
一定要选择war包打包,不然要重新把他构建成web项目
如果你没选war包:https://www.cnblogs.com/leonk...
最后点finish完成

点击生成Web描述文件 (web.xml)

这样就完成了Web模块的创建,剩下的其他项目都是同样的步骤创建,都是选择jar包,参考下图:

3. 配置各模块的pom.xml
pom.xml记录所需的jar包,模块联系,包信息,打包参数等等信息,在多模块里我们要理清关系,不要重复引用
首先毫无疑问的是让parent加载spring的jar包是最方便开发的,因为默认所有模块都继承parent,所以子模块引用spring内容也方便。
其次配置文件我们统一放在framework中进行管理。
那么先来写入web.xml配置吧


    test_web
    
    
        
        contextConfigLocation
        classpath*:spring-*.xml
    

    
        org.springframework.web.context.ContextLoaderListener
    

    
        spring
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            
            classpath*:spring-mvc.xml
        
        1
    
    
        spring
        /
    

    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        CharacterEncodingFilter
        /*
    

这里可以看到我们写了classpath*,原因是它能搜索到项目目录以外的Jar包下文件
相关:http://www.cnblogs.com/wlgqo/...
web.xml详解:https://blog.csdn.net/qq_3557...

web.xml是对WEB项目来说是必须的配置文件,写好了spring配置文件的位置以后,就来新建2个spring配置文件,新建的配置放在test_framework模块里,路径如下图
spring-context.xml spring-mvc.xml

一个是spring-context.xml 也叫applicationContext.xml,是webApp的上下文配置,也可以理解为配置dao、service 通用bean的地方,但我们这里使用的是注解扫描方式配置bean,所以就简单许多,即便有工具存在,写改xml真的很讨厌啊!




    
    
    
    
    
        
        
    
    

这里要去掉对controller的扫描,applicationContext初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;
DispatcherServlet (下一个要配置的东西) 初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。

context:component-scan 的 base-package 值用来决定我们需要扫描的包的基础名,
具体配置相关可以看:https://www.cnblogs.com/exe19...

而context:annotation-config/ 呢?其实也是spring为了方便我们开发者给我们提供的一个自动识别注解的配置,相关细节如下:
解释说明:https://www.cnblogs.com/_popc...
两条配置的区别和诠释:https://www.cnblogs.com/leiOO...

下面是第二个配置文件 spring-mvc.xml




    
    
        
    

    
    
        
            
                
            
            
        
    

包扫描没什么好说的,这里还强调include了注解controller。
mvc:annotation-driven 是spring默认的注解驱动,这个配置项一口气把一堆东西都给我们加进来了,但主要还是针对controller和处理请求的,具体的在下面文章中,因为加的内容有点多,所以这个留到后面研究,稍微理解作用就好:
相关文章 : https://blog.csdn.net/vicroad...

mvc:message-converters 顾名思义,就是用于处理请求消息的,request content-header 会记录请求的内容类型,根据这些类型,spring会把内容转化成服务器操作的对象,这里的字符串转化是为了避免乱码,我们指定了编码格式。
相关文章:https://www.jianshu.com/p/2f6...

以上,我们就已经把最简约的配置写好了。接下来我们随便写一个controller试试

4.写个Controller吧
根据之前写好的controller的扫描包名,去我们test_controller模块里创建一个controller

package com.test.hello.controller;

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

@RestController
@RequestMapping("/test")
public class HelloController
{
    @RequestMapping("/get")
    public String helloGet(@RequestParam String str) throws Exception
    {
        return str;
    }
}

很简单的一段返回请求字符串的代码,现在一切就绪可以启动服务器了,配置好Tomcat就可以启动了,右键test_web --> run as --> run on server 选择创建好的tomcat容器,就可以启动了。
接下来,访问: localhost:8080/test/test/get?str=helloWorld

如果你使用eclipse启动且没有正常启动,特别是出现严重错误时,请先检查web.xml配置命名有没有问题,然后再检查test_web项目的assembly,这个会影响项目的发布文件,下图所示,右键项目点properties,没有test_framework的话就加入framework项目。
网站无响应,检查一下tomcat的端口,默认是8080。404检查代码的映射路径。

5.结束语
第一次写技术文章,记录一下自己的学习过程,日后会以当前项目作为基础,继续记录下自己遇到的问题和分享的知识,希望能帮助到一部分新手,此外,本篇文章中若有错误,欢迎指出,我会不断更新文章误点,不吝赐教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74078.html

相关文章

  • SpringBoot多模块项目实践(Multi-Module)

    摘要:接下来,本文将重点阐述在环境的多模块构建过程。本项目传送门一创建聚合父工程首先使用来快速创建好一个工程。然后在里面声明该父工程包含的子模块。 序言:比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。接下来,本文将重点阐述SpringBoot在M...

    renweihub 评论0 收藏0
  • IDEA多module项目maven依赖的一些说明

    摘要:如果子模块不声明依赖的使用,即使该依赖在父中的中声明了,也不会产生任何效果。 不管eclipse有没有被被时代抛弃,反正是被我抛弃了,因为IDEA是真的好用 现在公司的项目基本都是基于maven的多module项目,controller,service,model,dao等都被分成了不同的module,这样做当然也是为了解耦。 这些module可根据需要在pom.xml配置来打成war...

    pkwenda 评论0 收藏0
  • Spring Boot 2.x基础教程:快速入门

    摘要:编写一个接口创建命名为根据实际情况修改创建类,内容如下启动主程序,使用等工具发起请求,可以看到页面返回编写单元测试用例打开的下的测试入口类。 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应...

    tigerZH 评论0 收藏0
  • Maven模块项目搭建+整合SSM框架

    摘要:继承作用就是避免配置重复,对于子项目来说应该关心父项目是怎么样配置的。聚合字面理解就是聚在一起合作完成工作,就是将子模块聚集起来完成相应的项目需求父工程的搭建项目结构在父工程中,主要负责完成依赖的版本管理,并不是实际的依赖。 从大二开始就一直关注segmentFault,在问题专区帮忙回答一些自己知晓的问题;在写这篇文章之前我一直会在朋友圈发一些自己遇到的问题以及解决办法,这是第一次写...

    liaosilzu2007 评论0 收藏0
  • 撸一个Java脚手架,一统团队项目结构风格

    摘要:这个文件会出现在创建的模板工程中,如果是单模块工程,则是对整个项目的依赖管理如果是多模块工程,该是总文件,该文件中会定义项目的子模块以及对子模块的依赖进行管理等,子模块定义在子模块下,子模块文件只管理子模块的依赖。 虽然maven已经提供了maven-archetype-webapp、maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的...

    邱勇 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<