zoukankan      html  css  js  c++  java
  • 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 上面搜索,解决了我好多问题,整个过程也参考了一些博客内容,写的比较好的是这个

     

  • 相关阅读:
    HTTP Digest authentication
    HDU 1520 Anniversary party 树形DP
    Servlet过滤器
    Js apply 方法 具体解释
    java 读取固定目录下的文件(和上篇差点儿相同)
    使用nodeitk进行角点检測
    ~/.local/share/Trash/files
    mv,Directory not empty不能目录覆盖
    cp 提示 overwrite 问题
    cv:显示Linux命令运行进度
  • 原文地址:https://www.cnblogs.com/dogeLife/p/11407341.html
Copyright © 2011-2022 走看看