eclipse上搭建maven多模块Java Web项目

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: <div class="markdown_views"><h1 id="1模块化需求及项目模块说明">1、模块化需求及项目模块说明</h1><p>手头上有个已上线的系统,但因老板的特殊要求,系统需要不断的修改。还有就是公司市场部不定期地在举行一些微信活动,每一个活动都是周期性的,活动完了这个功能就要在系统中移除。</p><p>系统中就有三种模块:已经在系统中正常运行不

1、模块化需求及项目模块说明

手头上有个已上线的系统,但因老板的特殊要求,系统需要不断的修改。还有就是公司市场部不定期地在举行一些微信活动,每一个活动都是周期性的,活动完了这个功能就要在系统中移除。

系统中就有三种模块:已经在系统中正常运行不需要再变更的模块、经常性变更的模块、用完就要移除的活动模块。

所以,我们需要把项目分成了下面几个模块。
这里写图片描述

简单说明一下:

  • timetable-common是常用工具包存放的模块。
  • wechat-api是微信接口模块,此模块用到了timetable-common包下的内容。
  • timetable-system是系统管理相关的内容,主要是用户相关的逻辑和接口,此模块用到了timetable-common及wechat-api。
  • timetable-common、wechat-api、timetable-system都是不需要再变更的模块。
  • timetable-main是一个web模块,也是整个项目的入口。主模块用到了timetable-system、timetable-common、wechat-api模块。
  • 每一次微信活动都可以作为一个web模块,如timetable-activity,活动中可能会用到其它模块(除timetable-main以外)的内容。在系统发布的时候,可以将活动模块引入到主模块中一起发布。当活动结束后,我们可以快速地将活动模块移除。

这里写图片描述

2、准备工作

eclipse版本:

Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 2 (4.4.2)
Build id: 20150219-0600

由于涉及到maven项目在eclipse上进行tomcat的集成调试,如果调试异常的朋友可以考虑更换版本比较高的eclipse版本。

maven版本: 2.2
maven相关的内容:http://blog.csdn.net/p_3er/article/category/2505419

3、模块化过程

3.1 主项目设置

maven多模块项目需要一个主项目来聚合各个子模块,不过其实就是需要一个父pom.xml。

这个pom.xml主要有两个内容:

  • packaging方式为pom。所有带有子模块的项目的packaging都为pom。packaging如果不进行配置,它的默认值是jar,代表Maven会将项目打成一个jar包。
<packaging>pom</packaging>
  • 使用module标签引入各个子模块。如果通过Maven build app-parent的时候,它会根据子模块的相互依赖关系整理一个build顺序,然后依次build。其实此配置不需要手动输写,通过eclipse创建maven module时,eclipse会自动加入到此配置文件中。
 <modules>
    <module>timetable-common</module>
    <module>wechat-api</module>
    <module>timetable-system</module>
    <module>timetable-activity</module>
    <module>timetable-main</module>
  </modules>

完整的timetable/pom.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<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.benben</groupId>
  <artifactId>timetable</artifactId>
  <packaging>pom</packaging>
  <version>2.0.0</version>
  <name>timetable</name>
  <url>http://maven.apache.org</url>

  <properties>
        <project.version>2.0.0</project.version>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <modules>
    <module>timetable-common</module>
    <module>wechat-api</module>
    <module>timetable-activity</module>
    <module>timetable-main</module>
    <module>timetable-system</module>
  </modules>
</project>

3.2 独立的maven简单模块

通过eclipse,新建Maven Module.

这里写图片描述

新建一个模块名为timetable-common的simple project。

这里写图片描述

创建完成后的模块类似一个简单的java项目:
这里写图片描述

timetable-common/pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
        <groupId>com.benben</groupId>
        <artifactId>timetable</artifactId>
        <version>2.0.0</version>
  </parent>
  <artifactId>timetable-common</artifactId>
  <name>timetable-common</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

     <!-- 设置变量:用于统一管理Library的版本 -->
     <javax.version>7.0</javax.version>
     <javax.servlet.version>3.1.0</javax.servlet.version>
     <javax.servlet.jstl.version>1.2</javax.servlet.jstl.version>
     <junit.version>4.12</junit.version>
     <log4j.version>1.2.16</log4j.version>
     <org.aspectj.version>1.7.3</org.aspectj.version>
     <net.sf.ehcache.version>2.3.2</net.sf.ehcache.version>
     <org.slf4j.version>1.6.1</org.slf4j.version>
     <mysql.jdbc.version>5.1.29</mysql.jdbc.version>
     <org.hibernate.entitymanager.version>3.6.3.Final</org.hibernate.entitymanager.version>
     <org.springframework.version>4.1.1.RELEASE</org.springframework.version>
     <org.codehaus.jackson.version>1.7.4</org.codehaus.jackson.version>
     <net.sf.json-lib.version>2.4</net.sf.json-lib.version>
     <proxool.version>0.8.3</proxool.version>
     <javamail.version>1.4.1</javamail.version>
     <commons-codec.version>1.9</commons-codec.version>
     <commons-io.version>1.3.2</commons-io.version>
     <commons-fileupload.version>1.3.1</commons-fileupload.version>
     <xstream.version>1.4.3</xstream.version>   
     <org.apache.jcs.version>1.3</org.apache.jcs.version>
     <joda-time.version>2.3</joda-time.version>
     <org.apache.poi.version>3.8</org.apache.poi.version>
     <com.fasterxml.jackson.core.version>2.3.3</com.fasterxml.jackson.core.version>
     <commons-httpclient.version>3.1</commons-httpclient.version>
     <jaxen.version>1.1.6</jaxen.version>
     <com.drewnoakes.version>2.8.1</com.drewnoakes.version>
     <com.google.zxing.version>3.0.0</com.google.zxing.version>
     <io.netty.version>5.0.0.Alpha2</io.netty.version>
  </properties>

  <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>${javax.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${org.hibernate.entitymanager.version}</version>
        </dependency>

        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>${net.sf.ehcache.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${javax.servlet.jstl.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.version}</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>${org.aspectj.version}</version>
        </dependency>

        <!-- JDBC -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.jdbc.version}</version>
        </dependency>
        <!-- proxool -->
        <dependency>
            <groupId>proxool</groupId>
            <artifactId>proxool</artifactId>
            <version>${proxool.version}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>${org.codehaus.jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-lgpl</artifactId>
            <version>${org.codehaus.jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${org.codehaus.jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-lgpl</artifactId>
            <version>${org.codehaus.jackson.version}</version>
        </dependency>

        <!-- spring framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${com.fasterxml.jackson.core.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${com.fasterxml.jackson.core.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${com.fasterxml.jackson.core.version}</version>
        </dependency>

        <!-- joda-time -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${joda-time.version}</version>
        </dependency>
        <!-- json -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>${net.sf.json-lib.version}</version>
            <classifier>jdk15</classifier>
        </dependency>

        <!-- mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javamail.version}</version>
        </dependency>

        <!-- Jcscache -->
        <dependency>
            <groupId>org.apache.jcs</groupId>
            <artifactId>jcs</artifactId>
            <version>${org.apache.jcs.version}</version>
        </dependency>

        <!-- commons-codec -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons-codec.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>

        <!-- 微信接口使用到 -->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>${xstream.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5</version>
        </dependency>

        <!-- POI -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>${org.apache.poi.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${org.apache.poi.version}</version>
        </dependency>



        <!-- commons-httpclient 支付宝接口使用 -->
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>${commons-httpclient.version}</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>${jaxen.version}</version>
        </dependency>

        <!-- 获取图片信息 -->
        <dependency>
            <groupId>com.drewnoakes</groupId>
            <artifactId>metadata-extractor</artifactId>
            <version>${com.drewnoakes.version}</version>
        </dependency>

        <!-- google二维码工具 -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>${com.google.zxing.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>${com.google.zxing.version}</version>
        </dependency>

        <!-- netty -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>${io.netty.version}</version>
        </dependency>
    </dependencies>

</project>

配置比较简单:

  • timetable-common模块继承了timetable父模块,因此这个pom的一开始就声明了对timetable的引用,该引用是通过Maven坐标GAV实现的。而关于项目timetable-common本身,它却没有声明完整GAV,这里我们只看到了artifactId。这个pom并没有错,groupId和version默认从父模块继承了。实际上子模块从父模块继承一切东西,包括依赖,插件配置等等。
 <parent>
        <groupId>com.benben</groupId>
        <artifactId>timetable</artifactId>
        <version>2.0.0</version>
  </parent>
  <artifactId>timetable-common</artifactId>
  <name>timetable-common</name>
  <url>http://maven.apache.org</url>
  • 如果packaging不写,那么缺省值是jar。我们也可以写上此标签。
<packaging>jar</packaging>
  • 比较特殊的是timetable-common模块是项目中最底层的模块,其它的模块都会依赖到此模块的内容。所以我在这里把项目中用到的所以依赖都放在这里配置。你也可以在使用到某些依赖的时候再在当前模块里配置。但统一配置的好处是能够方便的查看到项目中用到的依赖。当然,如果是只用于用完就要移除的活动模块中的依赖还是在本身的pom中配置。因为这些依赖随着模块的移除也用不上了。

3.3 依赖其它模块的maven简单模块

使用a中相同的方法新建wechat-api模块。

wechat-api/pom.xml:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.benben</groupId>
        <artifactId>timetable</artifactId>
        <version>2.0.0</version>
    </parent>
    <artifactId>wechat-api</artifactId>
    <name>wechat-api</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-common</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
  • wechat-api模块依赖timetable-common模块的内容
    <dependencies>
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-common</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

timetable-system模块的新建与模块与wechat-api模块的方式与配置雷同。只是timetable-system模块依赖的是wechat-api模块。当然,通过依赖wechat-api,同时也依赖了timetable-common。

3.4 依赖其它模块的maven web模块

与使用eclipse创建一个独立的maven web project一样,创建一个maven web module。

注意:我们不是创建简单的模块

这里写图片描述

通过Filter过滤后,选择maven-archetype-webapp。

这里写图片描述

创建完成后的模块类似一个的java web项目:

这里写图片描述

在此模块下,我们和正常的java web开发一下,在src/main/java下写java代码,src/main/resources下放配置文件,src/main/webapp下写web相关的代码及资源。

timetable-activity/pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.benben</groupId>
    <artifactId>timetable</artifactId>
    <version>2.0.0</version>
  </parent>

  <artifactId>timetable-activity</artifactId>
  <packaging>war</packaging>
  <name>timetable-activity Maven Webapp</name>
  <url>http://maven.apache.org</url>

   <dependencies>
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-system</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>timetable-activity</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 此模块依赖于timetable-system模块
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-system</artifactId>
            <version>${project.version}</version>
        </dependency>
  • web 模块的packing为war。
<packaging>war</packaging>
  • packaging类型是war的maven工程或模块,默认是必须要有web.xml的。如果此maven模块作为其它工程的一个模块,不独立配置web.xml。
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

3.5 主web模块

像3.4那样创建一个timetable-main的maven web module。

timetable-main/pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.benben</groupId>
    <artifactId>timetable</artifactId>
    <version>2.0.0</version>
  </parent>
  <artifactId>timetable-main</artifactId>
  <packaging>war</packaging>
  <name>timetable-main</name>
  <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-system</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-activity</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 合并多个war -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xml</packagingExcludes>  
                    <overlays>
                        <overlay>
                            <groupId>com.benben</groupId>
                            <artifactId>timetable-activity</artifactId>
                        </overlay>
                    </overlays>

                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • 事实上,system-main只依赖timetable-system模块,但我们需要把一个活动模块也同时发布时,需要把活动模块作为war依赖引入主模块。
        <dependency>
            <groupId>com.benben</groupId>
            <artifactId>timetable-activity</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
  • 通过maven-war-plugin合并其它的war模块。
  • packagingExcludes标签,合并的时候,不包括其它模块的WEB-INF/web.xml文件。
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xml</packagingExcludes>  
                    <overlays>
                        <overlay>
                            <groupId>com.benben</groupId>
                            <artifactId>timetable-activity</artifactId>
                        </overlay>
                    </overlays>

                </configuration>
            </plugin>

4、调试

多web项目在eclipse+tomcat环境下部署调试和单个maven web项目的方式是一样的:

  1. 创建server,打开window-prefrences-server-runTime Environment-new ….选择tomcat路径,jdk信息,这一步和原来完全一样。
  2. 打开server视图,new server,这里选中刚才创建的tomcat,点击next,这步只需要主web项目添加进来即可。
  3. 双击创建的server,选择将项目发布到tomcat的webapps目录下,点击pushlish,完成。

再去tomcat目录,发现已经将合并后的web发布到对应目录下了。 依赖的打包方式为jar的maven module已经被打包成jar发布到lib下了,而依赖的打包方式为war则和之前一样,编译文件会发布到classes下。不过你可以打个断点试试,依然可以调试,修改一段代码,发现热部署也是可以的,这样就和原来的开发习惯完全一样了。

这里写图片描述

这里写图片描述

注意:

  1. 如果项目发布不成功,查看主模块(system-main)的编译配置是否正确。

    这里写图片描述

  2. 依赖的jar包没有发布到lib目录。
    http://blog.csdn.net/jrainbow/article/details/38762041

  3. 依赖的打包方式为jar的maven module没有被打包成jar发布到lib下,查看Java Build Path的各项配置是否正确。

    这里写图片描述

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
18 4
|
8天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
8天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
20 3
|
11天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
35 4
|
11天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
29 1
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
10天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
27 0
WK
|
16天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
19 0
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
100 3
|
15天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
101 44

推荐镜像

更多