SSM 框架搭建 web 項(xiàng)目的思路整理

一、SSM框架

SSM 框架是三個(gè)框架的簡(jiǎn)稱:spring,springMVC,MyBatis

1、Spring

Spring 是一個(gè)開(kāi)源框架,一個(gè)輕量級(jí)的,非侵入的 JEE 框架,兩個(gè)核心概念:控制反轉(zhuǎn)(IoC)和面向切面編程(AOP)。控制反轉(zhuǎn)就是把主動(dòng)權(quán)交給容器,以前我們要使用一個(gè)類的對(duì)象時(shí)要new一下,比如:Person person = new Person(),而現(xiàn)在是把類注入到 Spring 中,由容器來(lái)控制,當(dāng)我們需要一個(gè)對(duì)象時(shí),直接由容器提供,通過(guò)注解使用時(shí),非常方便。AOP 則提供了從另一個(gè)角度來(lái)考慮程序結(jié)構(gòu)的思想。

2、SpringMVC

SpringMVC 是基于 Spring 的輕量級(jí) WEB 層框架,實(shí)現(xiàn)了 MVC 模式來(lái)很好的把數(shù)據(jù)、業(yè)務(wù)和表示層分離。SpringMVC 的設(shè)計(jì)是圍繞 DispatcherServlet 展開(kāi)的,通過(guò)這個(gè)核心的 servlet 映射到相應(yīng) 的處理器來(lái)處理請(qǐng)求,并轉(zhuǎn)到相對(duì)應(yīng)的視圖。

3、MyBatis

MyBatis 是一個(gè)基于Java的持久層框架。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的 entity(普通的 Java對(duì)象,實(shí)體類)映射成數(shù)據(jù)庫(kù)中的記錄。

三者的整合

三者的整合,其實(shí)質(zhì)上是 Spring 整合 SpringMVC,Spring 整合 MyBatis,以 Spring 為核心,整合天下。理清了三者的關(guān)系,就好辦了。

項(xiàng)目包結(jié)構(gòu)

如何通過(guò) SSM 框架搭建一個(gè) web 項(xiàng)目呢,現(xiàn)在結(jié)合一個(gè) Demo,用代碼幫助理清一下項(xiàng)目的構(gòu)建思路:
Demo的環(huán)境: JDK1.8,maven3.5,Spring4.1.5,MyBatis3.2.8,
IDE: MyEclipse
數(shù)據(jù)庫(kù): MySQL
使用maven構(gòu)建項(xiàng)目,其結(jié)構(gòu)目錄如下:

SSM.png
包名 作用
cn.demo.common 公用包,可放通用的類,如工具類
cn.demo.controllers 控制器包
cn.demo.dao dao接口,和mapper.xml
cn.demo.entity 實(shí)體類,對(duì)應(yīng)著數(shù)據(jù)表
cn.demo.service 業(yè)務(wù)接口
cn.demo.service.impl 業(yè)務(wù)實(shí)現(xiàn)類
src/main/resources maven默認(rèn)的資源包,放配置文件或資源

基本包結(jié)構(gòu):項(xiàng)目構(gòu)建時(shí),應(yīng)至少包含這些包

包名 作用
cn.demo.common 公用包,可放通用的類,如工具類
cn.demo.controllers 控制器包
cn.demo.dao dao接口,和mapper.xml
cn.demo.entity 實(shí)體類,對(duì)應(yīng)著數(shù)據(jù)表
cn.demo.service 業(yè)務(wù)接口
cn.demo.service.impl 業(yè)務(wù)實(shí)現(xiàn)類
src/main/resources maven默認(rèn)的資源包,放配置文件或資源

二、導(dǎo)入依賴的jar包

使用 maven 的一個(gè)好處就是管理 jar 包非常方便,添加一個(gè)依賴就可以了;另外還有一個(gè)好處,當(dāng)你在寫代碼的時(shí)候,想查看一下源碼,又沒(méi)有下載源碼包,此時(shí),maven 會(huì)自動(dòng)從倉(cāng)庫(kù)下載并關(guān)聯(lián)。

在 pom.xml 中加入以下依賴:

    <!-- 用來(lái)設(shè)置版本號(hào) -->
    <properties>
        <srping.version>4.1.5.RELEASE</srping.version>
        <mybatis.version>3.2.8</mybatis.version>
        <log4j.version>1.2.17</log4j.version>
    </properties>

    <dependencies>
        <dependency>
            <!-- servlet-api -->
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        
        <!-- spring框架包 start -->  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-test</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-oxm</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-tx</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jdbc</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-aop</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context-support</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-expression</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-orm</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-webmvc</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-aspects</artifactId>  
            <version>${srping.version}</version>  
        </dependency>  
        <!-- spring框架包 end --> 
        
        

        <!-- myBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- mybatis generator自動(dòng)生成代碼的插件 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>


        <!-- 導(dǎo)入dbcp的jar包,用來(lái)在spring.xml中配置數(shù)據(jù)庫(kù) -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!-- 文件上傳 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <!-- jstl包 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

        <!-- jackson包 -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.11</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.11</version>
        </dependency>


        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <!-- 表示開(kāi)發(fā)的時(shí)候引入,發(fā)布的時(shí)候不會(huì)加載此包 -->  
      <scope>test</scope> 
        </dependency>

    </dependencies>

三、配置 web.xml

web 項(xiàng)目的第一件事就是配置 web.xml,為便于理清思路,以及 SSM 三者之間的聯(lián)系是如何配置的,這里就用 spring.xml、springMVC.xml、mybatis.xml 命名三者的配置文件名,熟悉框架之后,這些配置可以合并或是拆分成多個(gè)配置文件,看項(xiàng)目的需要和個(gè)人的習(xí)慣。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
    <display-name>ssmdemo</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    
        <!-- 加載 spring 配置文件  -->
    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:spring.xml</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
        <!-- 配置 springMVC 前端控制器  -->
    <servlet>
       <servlet-name>dispatcherServlet</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springMVC.xml
          </param-value>
       </init-param>
    </servlet>
    <servlet-mapping>
       <servlet-name>dispatcherServlet</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>
    
        <!-- 編碼過(guò)濾器  -->
    <filter>
       <filter-name>charSetEncoding</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>utf-8</param-value>
       </init-param>
       <init-param>
           <param-name>forceEncoding</param-name>
           <param-value>true</param-value>
       </init-param>
    </filter>
    <filter-mapping>
       <filter-name>charSetEncoding</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    
</web-app>

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/tx
                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                         http://www.springframework.org/schema/aop 
                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <!-- 使用注解式注入 -->  
    <context:component-scan base-package="cn.demo"/>
    
      <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:database.properties" />  
    </bean>  
    
    <!-- 配置數(shù)據(jù)源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.connection.url}"/>
        <property name="username" value="${jdbc.connection.username}"/>
        <property name="password" value="${jdbc.connection.password}"/>
    </bean>
    
    <!-- sqlSessionFactory 對(duì)象 spring 和 MyBatis 完美整合 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:myBatisConfig.xml"/>
    </bean>
    
    <!-- 事務(wù)管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!-- 增強(qiáng) -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
        <!--    <tx:method name="login" read-only="true"/> -->
            <tx:method name="get*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
        </tx:attributes>
    </tx:advice>
    
    
    <!-- AOP支持 -->
    <aop:config>
        <aop:pointcut expression="execution(* cn.demo.service..*(..))" id="tx_pc"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="tx_pc"/>
    </aop:config>
    <!-- 代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!-- mapper 映射  DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.demo.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    
</beans>



springMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
     
       
       <!-- 設(shè)置注解支持,掃描帶有注解類的包 -->
       <context:component-scan base-package="cn.demo.controllers,cn.demo.service.impl" />
       <mvc:annotation-driven />

       
       <!-- 視圖解析器 -->
       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
            <!-- 屬性名name,屬性值value ,給class類的對(duì)象中的屬性賦值 -->
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
       </bean>
       
        <!-- 處理靜態(tài)資源文件 -->
        <mvc:resources location="/static/" mapping="/static/**" />
        
    
        <!-- 文件上傳解析器 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
        </bean>
    
</beans>

mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 類型別名 -->
    <typeAliases>
      <typeAlias type="cn.demo.entity.District" alias="District"/>
    </typeAliases> 
    
    <mappers>
        <mapper resource="cn/demo/dao/DistrictMapper.xml"/>
    </mappers>

</configuration>

database.properties

數(shù)據(jù)庫(kù)的基本配置

jdbc.driver=org.gjt.mm.mysql.Driver
jdbc.connection.url=jdbc:mysql://127.0.0.1:3306/china
jdbc.connection.username=root
jdbc.connection.password=root

log4j.properties

簡(jiǎn)單的日志輸出,只定義的控制臺(tái)輸出

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy\u5E74MM\u6708dd\u65E5 HH\:mm\:ss,SSS}---[%t]---%m%n

generatorConfig.xml

generatorConfig.xml 是 mybatis 自動(dòng)生成代碼的一個(gè)配置文件,
使用mybatis-generator自動(dòng)關(guān)聯(lián)生成代碼mapper接口,xml文件,entity類

<?xml version="1.0" encoding="UTF-8" ?>
<!-- generatorConfig.xml名字是默認(rèn)的,運(yùn)行run as 配置里寫上 mybatis-generator:generate,即可生成代碼 -->
    <!DOCTYPE generatorConfiguration 
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
<!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->  
    <classPathEntry
        location="/Users/jason/.m2/repository/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar" />
    <context id="mysqlTables" targetRuntime="MyBatis3">
    
        <commentGenerator>
         <!-- 是否去除自動(dòng)生成的注釋 true:是 : false:否 -->  
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        
         <!--數(shù)據(jù)庫(kù)鏈接URL,用戶名、密碼 -->    
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/china"
            userId="root" password="root">
        </jdbcConnection>
        
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

         <!-- 生成model模型,對(duì)應(yīng)的包,存放位置可以指定具體的路徑,如/ProjectName/src,也可以使用MAVEN來(lái)自動(dòng)生成 -->
        <javaModelGenerator targetPackage="cn.demo.entity"
            targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        
         <!--對(duì)應(yīng)的xml mapper文件  -->
        <sqlMapGenerator targetPackage="cn.demo.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        
        <!-- 對(duì)應(yīng)的dao接口 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="cn.demo.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

         <!-- 這里是數(shù)據(jù)庫(kù)的tableName表名j_position 以及 entity類的domainObjectName名字District -->
<!-- 默認(rèn)生成增加\刪除\修改\查詢的方法 -->
        <table tableName="j_position" domainObjectName="District"
         
            enableCountByExample="false" enableSelectByExample="false"
            enableUpdateByExample="false" enableDeleteByExample="false">
        </table>
    </context>
</generatorConfiguration>  

完善各個(gè)包文件目錄下的代碼

至此,web框架已經(jīng)搭建好了,包結(jié)構(gòu)也建好了,下面就把業(yè)務(wù)代碼完成就可以測(cè)試了。

flow.png

項(xiàng)目的訪問(wèn)流程是這樣的:

用戶從瀏覽器發(fā)出請(qǐng)求,SpringMVC 的核心 DispatcherServlet 接收到請(qǐng)求后,通過(guò)映射處理器找到相應(yīng)的處理器去處理請(qǐng)求。也就是在 Controller 類里,如果要訪問(wèn)數(shù)據(jù)庫(kù),就在 Controller 里調(diào)用 Service 層的方法,再在 Service 層里調(diào)用 DAO 層的方法,一層一層通過(guò)接口調(diào)用。

DispatcherServlet只做任務(wù)的分派,具體業(yè)務(wù)的處理是在 Service 層, DAO 層只對(duì)數(shù)據(jù)庫(kù)。用框架或是不用框架的流程都是這樣的,使用了框架可以使代碼結(jié)構(gòu)更加清晰,框架封裝了很多實(shí)現(xiàn)的方法,調(diào)用也很方便,省去了大量與業(yè)務(wù)關(guān)的代碼,可以讓我們更加關(guān)注于功能的實(shí)現(xiàn)。

發(fā)起請(qǐng)求

URL : http://localhost:8080/工程名/index

接收請(qǐng)求

創(chuàng)建SpringMVC核心配置文件創(chuàng)建SpringMVC.xml

  1. 將URL與控制器進(jìn)行映射,建議使用注解方式
  • 在controller類前使用注解@Controller標(biāo)注該類為控制器類
  • 在該類方法前是使用@RequestMapping將URL與該方法映射
  • 在配置文件dispatcher-servlet.xml中設(shè)置注解支持
  1. 在web.xml中配置核心控制器

處理請(qǐng)求

  1. 接收請(qǐng)求的參數(shù)值

    1. 需要將參數(shù)入?yún)?使用單個(gè)參數(shù)接收
    2. 需要將對(duì)象入?yún)?使用對(duì)象接收
  2. 調(diào)用業(yè)務(wù)層的方法處理數(shù)據(jù),在業(yè)務(wù)層中調(diào)用 DAO 層的方法來(lái)處理數(shù)據(jù)

  3. 存儲(chǔ)數(shù)據(jù)

    1. 將Model對(duì)象入?yún)?/li>
    2. 調(diào)用model對(duì)象的addAttribute("","");
  4. 頁(yè)面跳轉(zhuǎn)

    1. 重定向
      redirect:xxxx,如果不加redirect,則如果使用了視圖解析器,則認(rèn)為返回的是邏輯視圖名
    2. 轉(zhuǎn)發(fā)
      返回viewName邏輯視圖名,也就是jsp文件的文件名
      視圖解析器會(huì)根據(jù)返回的邏輯視圖名給加上前綴和后綴

四、部署運(yùn)行

部署到 tomcat, 運(yùn)行并訪問(wèn)。
這里寫了一個(gè)簡(jiǎn)單的例子,只做了一個(gè)分頁(yè),代碼比較簡(jiǎn)單,就不做分享了,有興趣可以自己寫一下。

run.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,593評(píng)論 19 139
  • [手把手教程][JavaWeb]SSM框架驗(yàn)證、修復(fù)和實(shí)例 手把手驗(yàn)證上期的SSM項(xiàng)目:優(yōu)雅的SpringMvc+...
    Clone丶記憶閱讀 17,124評(píng)論 49 76
  • 這一年的二月二,和往年沒(méi)什么不同。只是我的小妹已步入了24歲的本命之年??蔁o(wú)論何時(shí),在我眼里小妹始終是個(gè)長(zhǎng)不大的孩...
    李小鯉閱讀 372評(píng)論 0 0
  • 不知大家有沒(méi)有看過(guò)美國(guó)的一部電視劇叫丑女貝蒂??催^(guò)之后,自己內(nèi)心有點(diǎn)小感觸。 在這個(gè)燈紅酒綠,充滿...
    不再停留閱讀 338評(píng)論 0 1
  • 兒童在很小的時(shí)候,語(yǔ)言表述能力以及觀察能力還沒(méi)有完全發(fā)展完善,他們只能夠通過(guò)感知覺(jué)觸摸這個(gè)世界,而外在的一切...
    是你的六公子閱讀 438評(píng)論 0 2

友情鏈接更多精彩內(nèi)容