Mac OS + IDEA 利用 Maven 创建 Spring MVC 项目

  在利用maven搭建 Spring MVC 项目之前,需要在本机上安装配置好 Maven

本机配置Maven

  首先去Apache官网下载所需要的maven,注意需要下载 bin.tar.gz 格式,不要下成 bin.zip 或者 src.tar.zip。

解压在自己的文件夹,我放在了 ⁩ Users⁩/⁨Yourname/⁨Applications⁩/⁨maven/apache-maven-3.6.1 下面⁩。

配置环境变量

1 vim ~/.bash_profile 

在里面添加

1 export M2_HOME=/Users/lzz/Applications/maven/apache-maven-3.6.1
2 export M2=$M2_HOME/bin
3 export PATH=$M2:$PATH

把路径改为 maven 所在的目录即可

然后使命令生效

1 source ~/.bash_profile

更改Maven默认仓库

  如果不更改仓库位置,系统会自动生成一个.m2 文件夹用以存放本地仓库,我们更改了默认仓库位置可以更方便管理

在maven下面创建仓库文件夹:Users⁩/⁨Yourname/⁨Applications⁩/⁨maven/repository

创建 setting.xml:Users⁩/⁨Yourname/⁨Applications⁩/⁨maven/setting.xml。在 apache-maven-3.6.1/bin 下面就有一个 setting.xml,我们自己配的setting.xml 就是用来替代它的。

配置setting.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 5     
 6     <pluginGroups />
 7     <proxies />
 8     <servers />
 9     
10     <localRepository>/User/lzz/Application/maven/repository</localRepository>
11     
12     <mirrors>
13         <mirror>
14             <id>alimaven</id>
15             <mirrorOf>central</mirrorOf>
16             <name>aliyun maven</name>
17             <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
18         </mirror>
19         <mirror>
20             <id>alimaven</id>
21             <name>aliyun maven</name>
22             <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
23             <mirrorOf>central</mirrorOf>
24         </mirror>
25         <mirror>
26             <id>central</id>
27             <name>Maven Repository Switchboard</name>
28             <url>http://repo1.maven.org/maven2/</url>
29             <mirrorOf>central</mirrorOf>
30         </mirror>
31         <mirror>
32             <id>repo2</id>
33             <mirrorOf>central</mirrorOf>
34             <name>Human Readable Name for this Mirror.</name>
35             <url>http://repo2.maven.org/maven2/</url>
36         </mirror>
37         <mirror>
38             <id>ibiblio</id>
39             <mirrorOf>central</mirrorOf>
40             <name>Human Readable Name for this Mirror.</name>
41             <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
42         </mirror>
43         <mirror>
44             <id>jboss-public-repository-group</id>
45             <mirrorOf>central</mirrorOf>
46             <name>JBoss Public Repository Group</name>
47             <url>http://repository.jboss.org/nexus/content/groups/public</url>
48         </mirror>
49         <mirror>
50             <id>google-maven-central</id>
51             <name>Google Maven Central</name>
52             <url>https://maven-central.storage.googleapis.com
53             </url>
54             <mirrorOf>central</mirrorOf>
55         </mirror>
56         <!-- 中央仓库在中国的镜像 -->
57         <mirror>
58             <id>maven.net.cn</id>
59             <name>oneof the central mirrors in china</name>
60             <url>http://maven.net.cn/content/groups/public/</url>
61             <mirrorOf>central</mirrorOf>
62         </mirror>
63     </mirrors>
64 </settings>
View Code

配置好 Maven 后,查看所配置的 maven 是否和本机使用的 JDK 版本一致:mvn -v

1 ➜  ~ mvn -v
2 Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
3 Maven home: /Users/lzz/Applications/maven/apache-maven-3.6.1
4 Java version: 11.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
5 Default locale: zh_CN_#Hans, platform encoding: UTF-8
6 OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"

我用的 JDK 版本是 11.0.2。和 maven 匹配,说明已经配置好 Maven 了。

在 IDEA 中选择配置好的Maven

在设置中选择 Build tools-> Maven。选择好我们之前配置好的Maven目录,仓库和 setting.xml。

  在 Build tools->Maven->Runner中,JRE 环境选择与 Maven 匹配的版本,我这里是 11.0.2。

创建 Maven 项目

  点击next,GroupId 是GroupID 是项目组织唯一的标识符,实际对应 Java 的包的结构,是 main 目录里 Java 的目录结构,ArtifactId 是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

继续点击next,在这里选择好 Maven 的家目录,setting file 和 仓库位置选择我们自己定义的位置。要先勾选覆盖按钮。

点击 next,填写项目名

  继续点击 next,创建完成后,IDEA 会帮我们拉取所需的 jar 包,所以创建过程中需要保持网络畅通,如果我们在之前设置过 jar 拉取的源,比如使用阿里的源,这个过程很快就可以完成。

等IDEA帮我们拉去完jar包后,看看创建出来的初始项目结构

  webapp 文件夹下放一些页面,以及项目的启动配置,WEB-INF,其下面的 web.xml 会对项目的整体进行配置,后面会进行单独对他配置。

我拉取出来的项目 main下面没有 resource 文件夹,这个文件夹我们需要自己创建,并且右键选择将其设置为 resource root。

配置环境

首先我们在 pom.xml 来配置项目依赖。

  在 Maven 仓库 中搜索想要使用的 jar 包依赖。将其依赖放在 pom.xml 中。

 1   <dependencies>
 2     <dependency>
 3       <groupId>junit</groupId>
 4       <artifactId>junit</artifactId>
 5       <version>4.11</version>
 6       <scope>test</scope>
 7     </dependency>
 8     <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
 9     <dependency>
10       <groupId>org.springframework</groupId>
11       <artifactId>spring-beans</artifactId>
12       <version>${springframework.version}</version>
13     </dependency>
14     <!-- spring-context -->
15     <dependency>
16       <groupId>org.springframework</groupId>
17       <artifactId>spring-context</artifactId>
18       <version>${springframework.version}</version>
19     </dependency>
20 
21     <!-- Spring MVC + Spring web -->
22     <dependency>
23       <groupId>org.springframework</groupId>
24       <artifactId>spring-web</artifactId>
25       <version>${springframework.version}</version>
26     </dependency>
27 
28     <dependency>
29       <groupId>org.springframework</groupId>
30       <artifactId>spring-webmvc</artifactId>
31       <version>${springframework.version}</version>
32     </dependency>
33 
34     <!--jdbc -->
35     <dependency>
36       <groupId>org.springframework</groupId>
37       <artifactId>spring-jdbc</artifactId>
38       <version>${springframework.version}</version>
39     </dependency>
40 
41     <!-- mybatis -->
42     <dependency>
43       <groupId>org.mybatis</groupId>
44       <artifactId>mybatis</artifactId>
45       <version>3.4.0</version>
46     </dependency>
47     <dependency>
48       <groupId>org.mybatis</groupId>
49       <artifactId>mybatis-spring</artifactId>
50       <version>1.3.0</version>
51     </dependency>
52 
53     <!-- druid 数据源的管理 -->
54     <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
55     <dependency>
56       <groupId>com.alibaba</groupId>
57       <artifactId>druid</artifactId>
58       <version>1.1.12</version>
59     </dependency>
60 
61     <!-- mysql -->
62     <dependency>
63       <groupId>mysql</groupId>
64       <artifactId>mysql-connector-java</artifactId>
65       <version>5.1.30</version>
66     </dependency>
67 
68     <!-- lombok,可以得到一堆注解,get、set、toString就可以省略这些方法了 -->
69     <dependency>
70       <groupId>org.projectlombok</groupId>
71       <artifactId>lombok</artifactId>
72       <optional>true</optional>
73       <version>1.18.8</version>
74     </dependency>
75 
76     <!-- Jackson 处理json数据 -->
77     <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
78     <dependency>
79       <groupId>com.fasterxml.jackson.datatype</groupId>
80       <artifactId>jackson-datatype-jsr310</artifactId>
81       <!--jackson-datatype-guava ???? -->
82       <version>2.9.8</version>
83     </dependency>
84 
85   </dependencies>
View Code

配置完 pom.xml 之后我们可以在左侧的外部依赖看到所有 Spring 为我们拉取进来的 jar 包。

配置 web.xml

  如果之前我们没有将 resource 设置为  resource root,那么我们在配置 web.xml 的时候 context-param标签会找不到 applicationContext.xml 的路径。

 1   <!-- Spring beans 配置文件所在目录-->
 2   <context-param>
 3     <param-name>contextConfigLocation</param-name>
 4     <param-value>classpath:applicationContext.xml</param-value>
 5   </context-param>
 6 
 7   <!-- Spring MVC 的配置 -->
 8   <servlet>
 9     <servlet-name>spring</servlet-name>
10     <!-- 就是对应spring-servlet这个配置文件-->
11     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
12   </servlet>
13 
14   <servlet-mapping>
15     <servlet-name>spring</servlet-name>
16     <url-pattern>/</url-pattern>
17   </servlet-mapping>
18 
19   <filter>
20     <filter-name>encodingFilter</filter-name>
21     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
22     <init-param>
23       <param-name>encoding</param-name>
24       <param-value>UTF-8</param-value>
25     </init-param>
26     <init-param>
27       <param-name>forceEncoding</param-name>
28       <param-value>true</param-value>
29     </init-param>
30   </filter>
31 
32   <filter-mapping>
33     <filter-name>encodingFilter</filter-name>
34     <url-pattern>/*</url-pattern>
35   </filter-mapping>
36 
37   <!-- druid 的基本使用-->
38   <servlet>
39     <!-- 指定哪个servlet去处理相关的请求-->
40     <servlet-name>DruidStatServlet</servlet-name>
41     <servlet-class>com.alibaba.druid.support.http.StatViewFilter</servlet-class>
42     <!-- 在做了这个基本配置之后,我们这个druid是需要进行登录才可以访问的,用户名和密码都是druid-->
43     <init-param>
44       <param-name>loginUsername</param-name>
45       <param-value>druid</param-value>
46     </init-param>
47     <init-param>
48       <param-name>loginPassword</param-name>
49       <param-value>druid</param-value>
50     </init-param>
51   </servlet>
52   <servlet-mapping>
53     <servlet-name>DruidStatServlet</servlet-name>
54     <url-pattern>/sys/druid/*</url-pattern>
55   </servlet-mapping>
56 
57   <!-- 告诉druid要拦截那些请求-->
58   <filter>
59     <filter-name>DruidWebStatFilter</filter-name>
60     <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
61     <!-- 还可以初始化参数-->
62     <init-param>
63       <param-name>exclusions</param-name>
64       <param-value>*.js,*.css,*.jpg,*.png,*.ico,*.gif,/sys/druid/*</param-value>
65     </init-param>
66   </filter>
67   <filter-mapping>
68     <filter-name>DruidWebStatFilter</filter-name>
69     <url-pattern>/*</url-pattern>
70   </filter-mapping>
71 
72 
73   <!-- 项目启动的时候,默认访问的目录,项目生成的时候已经有了-->
74   <welcome-file-list>
75     <welcome-file>index.jsp</welcome-file>
76   </welcome-file-list>
View Code

配置 sping-servle

  在配置 servlet 的时候,又创建了一个配置文件,在WEB-INF下面 spring-servlet.xml 

  启动注解驱动的包扫描功能,这里需要建一些包,在main下面建立项目包:java.com.mmall,下面建一些实际的逻辑代码包。

  将 java 包标示为 source root,源代码路径。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <beans xmlns="http://www.springframework.org/schema/beans"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xmlns:context="http://www.springframework.org/schema/context"
 6        xmlns:mvc="http://www.springframework.org/schema/mvc"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8        http://www.springframework.org/schema/beans/spring-beans.xsd
 9        http://www.springframework.org/schema/context
10        http://www.springframework.org/schema/context/spring-context.xsd
11        http://www.springframework.org/schema/mvc
12        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
13 
14 
15     <context:annotation-config />
16 
17     <!-- 启动注解驱动的 spring MVC 功能 -->
18     <mvc:annotation-driven />
19 
20     <!-- 启动包扫描功能, 一般会扫描 controller 和 service, dao 相关的会通过 mybatis 来处理-->
21     <context:component-scan base-package="com.mmall.controller"/>
22     <context:component-scan base-package="com.mmall.service"/>
23 
24     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
25     <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
26 
27     <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
28 
29     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
30         <property name="prefix" value="/views/" />
31         <property name="suffix" value=".jsp" />
32     </bean>
33 
34 </beans>
View Code

配置 applicationContext

  在做数据库配置的时候,可以将 driverClassName、url、username、passwd 等放在配置文件 setting.propertities 中。在 propertyConfigurer 这个bean 中,配置了要去哪里取配置文件的地址:locations。于是又在resource 下面创建了一个 setting.properties 。这样配好了之后,就可以从这个配置文件中获取key-value值,将 value 填充到 dataSource 中的变量里。用  ${varaible}占位符表示变量。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
 5 
 6     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 7         <property name="locations">
 8             <list>
 9                 <!-- 这里又用到了 classpath,表示去resource 里面找配置文件 -->
10                 <value>classpath:settings.properties</value>
11             </list>
12         </property>
13     </bean>
14 
15     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
16         <property name="driverClassName" value="${db.driverClassName}" />
17         <property name="url" value="${db.url}" />
18         <property name="username" value="${db.username}" />
19         <property name="password" value="${db.password}" />
20         <property name="minIdle" value="3" />
21         <property name="maxActive" value="20" />
22         <property name="maxWait" value="60000" />
23         <property name="filters" value="stat,wall" />
24     </bean>
25 
26     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
27         <!-- 添加配置文件-->
28         <property name="configLocation" value="classpath:mybatis-config.xml" />
29         <property name="dataSource" ref="dataSource" />
30         <!-- 定义sql写在哪里 ,mybatis会去mapper下面读取所有xml文件进行映射-->
31         <property name="mapperLocations" value="classpath:mapper/*.xml" />
32     </bean>
33 
34     <!-- mybatis自己的一些库-->
35     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
36         <!-- 定义要扫描java里的那些包-->
37         <property name="basePackage" value="com.mmall.dao" />
38         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
39     </bean>
40 
41     <!-- 事物-->
42     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
43         <property name="dataSource" ref="dataSource" />
44         <tx:annotation-driven transaction-manager="transactionManager" />
45     </bean>
46 
47     <!-- druid  其中为stat的filter-->
48     <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter" >
49         <!-- 如果这个sql执行超过了3000ms,则被视为慢sql-->
50         <property name="slowSqlMillis" value="3000" />
51         <!-- 如果是慢sql,则以日志形式记录下来 -->
52         <property name="logSlowSql" value="true" />
53         <property name="mergeSql" value="true" />
54     </bean>
55 
56     <!-- druid 为wall-filter -->
57     <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
58         <property name="dbType" value="mysql" />
59     </bean>
60 </beans>
View Code

  其中setting.propertities内容如下:

1 db.driverClassName=com.mysql.jdbc.Driver
2 db.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
3 db.username=root
4 db.password=yourDBpasswd
View Code

  在配置完上述内容后,我们对一个Spring项目的基本配置就已经结束了,其中有些数据库相关的配置,如果暂时用不上可以不要。为了将我们的servlet发布到容器上,我们还需要配置Tomcat。

配置 Tomcat

  首先仍然在Apache官网下载Tomcat,解压缩放在自己想要放的文件夹下面。

在 IDEA 中配置 Tomcat

点击 + 号

选择 local

配置 server

如果你之前没有配置过,在 Application server 中没有版本,点击右边的 Configure,找到之前解压的 Tomcat 目录即可。

配置完 Server 之后,还有配置 Deployment,点击下面的 + 号,选择 Artifact,选择 war exploded。

等 tomcat 服务器也配置好,我们最后创建一个简单的控制类进行测试

 1 package com.mmall.controller;
 2 
 3 
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.ResponseBody;
 7 
 8 
 9 @Controller
10 @RequestMapping("/test")
11 public class TestController {
12     // private static final Logger logger = LoggerFactory.getLogger(TestController.class);
13     @RequestMapping("/hello")
14     @ResponseBody
15     public String hello() {
16         return "hello, myTestController";
17     }
18 }

打开浏览器,输入 http://localhost:8080/permission_war_exploded/ 出现欢迎界面,

输入 http://localhost:8080/permission_war_exploded/test/hello,

出现我们自己设定的字符串界面,即说明这个简单的 Spring MVC 项目已经运行在我们的本地服务器上了。

  目前为止,通过在本机配置 Maven,IDEA中 创建 Maven 项目,配置 Spring 需要的一些文件,配置服务器并测试服务一系列的操作,我们基本实现了一个简单 Spring MVC 项目的雏型。其中有些依赖包在最开始的时候可以不要,免得将项目结构搞的异常复杂。在这个过程中也遇到了一些问题,可以根据对应问题的错误提示去 stackOverFlow 上面搜索,解决了我好多问题,整个过程也参考了一些博客内容,写的比较好的是这个

 

原文地址:https://www.cnblogs.com/dogeLife/p/11407341.html