话说

前面几篇博客陆续总结了Hibernate、Struts2、Spring,无疑Spring是其中最耀眼的明星。SSH框架虽然已不再是主流,但是他们曾经辉煌过。我们不能忘记历史,对否?

目标:整合SSH-Spring+Struts2+Hibernate

为什么要整合呢?因为每个框架各有优势呢,Hibernate在数据持久化层做得好;Struts2在处理请求、调用方法和页面跳转方面不错;Sping呢就是个大管家,在笔者看来,Sping就是个leader,它会统筹兼顾,整体调度与资源调度……怎么说着说着有点像ResourceManager了..

整合可不是简单的拼凑配置文件!而是要真正的融合。收购公司也不是简单的收购,文化只有融合了,才算是较好的收购。不然就是:“整合了我的心,也整合不了我的灵魂”。尤其是Sping和Struts2整合后再加入Hibernate就有点繁琐。所以先整合Spring+Struts2;然后再是Hibernate。

Let’s Go!

目录


一、整体架构
二、Spring+Struts2
三、整合Hibernate
四、测试运行
五、总结


开发环境

IntelliJ IDEA(2017.2.5)

一、整体架构

二、Spring+Struts2

他俩整合起来比较简单,可以看做是配置文件的简单拼凑,就是导包的时候需要一个中间插件。

1、导包

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--spring jar--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.1.RELEASE</version></dependency><!--spring web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.0.1.RELEASE</version></dependency><!-- Struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.13</version></dependency><!--spring和struts2整合需要一个插件包--><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.5.13</version></dependency>

注意同一个框架内部的包包版本要保持一致。

2、配置spring 和struts2的配置文件

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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd " ><!--开启spring注解  --><context:component-scan base-package="com.hmc.ssh"></context:component-scan>
</beans>

struts2.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><constant name="struts.objectFactory" value="spring"/><package name="ssh" extends="struts-default"><action name="book_list" class="bookAction" method="list"><result name="success">/list.jsp</result></action></package><include file="example.xml"/><!-- Add packages here --></struts>

注意:

<constant name="struts.objectFactory" value="spring"/>

这个作用就是让struts2识别bookAction,因为bookAction只是Spring里面的bean名字,struts2并不认识,之前strts2直接引用具体的包,这里要变化引用bean.二者之间的桥梁就是靠这个strts.objectFactory建立起来的。

以上都是最最基本的配置奥,struts2也暂没有实现DMI,先保证整合不出问题,后续需要在依次加入各种配置,不要急,慢慢来。

3、配置Web.xml

为什么要配置这个?因为struts2和spring都有各自的配置文件,但是最终能我们要的是Web项目,要和Web建立关系?怎么建立呢?Struts2通过过滤器,Spring通过监听器,然后要保证整体程序可以找到各自的配置文件。搞定这几个问题,就搞定了web.xml配置。

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--配置struts2过滤器--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置Spring监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--配置可以找到spring.xml--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring.xml</param-value></context-param></web-app>

好,这个配置好后,基本就不动了。

4、编写相关业务类(为初步测试伏笔)
BookAction

package com.hmc.ssh.action;
import org.springframework.stereotype.Controller;/*** User:Meice* 2017/11/6*/
@Controller
public class BookAction {public String list() {System.out.println("list....");return  "success";}}

5、在struts.xml中配置action

上面已有,不在赘述。

6、测试
启动猫,在页面访问book_list,查看是否调用方法,并跳转到页面即可。

至此,最为简单的Struts2和Spring整合完毕!

三、整合Hibernate

整合Hibernate就是整合那几个配置:连接数据库、实体类映射、其他一些琐碎配置(show_sql 开发者模式 dmi)等等。把这些无缝整合到Spring就好了,但是麻烦就麻烦再这里。因为Hibernate失去了管理权,全部移交Spring.xml来管理了。

1、导包

<!--配置Hibernate-->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.12.Final</version>
</dependency><!--Mysql驱动包-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>6.0.6</version>
</dependency><!--配置数据连接池-->
<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version>
</dependency><!--导入 ORM-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>5.0.1.RELEASE</version>
</dependency>

2、配置spring.xml

把整个Hibernate.cfg.xml配置到spring.xml中;笔者称之为管理权滴交接,在笔者看来,就是一场收购,也是一场“杯酒释兵权”!

<!--配置数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><!--配置url username password--><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost/sysmgr"/><property name="username" value="root"/><property name="password" value="119913"/><!--初始化连接池大小--><property name="initialSize" value="10"/></bean><!--配置sessionFactory-->
<bean name="sessionFactort" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!--属性注入dataSource--><property name="dataSource"  ref="dataSource"/><!--扫描加入注解的实体类(基于包)--><property name="packagesToScan"><array><value>com.hmc.ssh.model</value></array></property><!--配置Hiberante其他属性--><property name="hibernateProperties"><!--2种方式多可以--><!--  <value>hibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=true</value>--><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop></props></property></bean>

需要注意的是,引入了数据源。然后各种bean统统由sessionFactory来管理。为什么呢?因为Hibernate要通过sessionFactory来开启session,开启后的session就可以直接使用其自身非常好用的API啦。

配到这里,也就差不多了,但是好戏还在后头。笔者观察在下的测试类后面的bug,就知道这个过程啦。

四、测试运行

1、BaseDao

HibernateDaoSupport
只要BaseDao继承HibernateDaoSupport之后,就可以直接引用了。注意,这之前已经配置好sessionFactory

package com.hmc.ssh.dao;
import com.hmc.ssh.model.Book;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.lang.Nullable;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;/*** User:Meice* 2017/11/6*/
@Repository
public class BookDao extends HibernateDaoSupport {@Resource(name = "sessionFactory")public void setSuperSessionFactory(SessionFactory sessionFactory) {setSessionFactory(sessionFactory);}public List<Book> getList() {return     getSessionFactory().getCurrentSession().createQuery("from Book").list();}public void add(Book book) {getSessionFactory().getCurrentSession().save(book);}}

注意:HibernateDaoSupport中的属性sessionFactory是final类型的,所以我们设置名称的时候要修改为另外一个名字;而且给sessionfactory设置值后要用里面得到的sessionFactory;否则就找不到HibernateDaoSupport中的session

这个时候,测试会报各种错误的。详情在测试类-MyTest的注释里。

2、声明式事务
如果未开启声明式事务,就会报错:

Could not obtain transaction-synchronized Session for current thread

如何开启?
1)头部声明:

 xmlns:tx="http://www.springframework.org/schema/tx"http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd

官网都有的奥!
https://docs.spring.io/spring/docs/5.0.1.RELEASE/spring-framework-reference/data-access.html#spring-data-tier

2)声明

 <!--配置声明式事务--><bean id="txManager"        class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><!--还要配置基于AOP的事务管理--><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="allMethod" expression="execution(* com.hmc.ssh.dao.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod"/></aop:config>

3、测试类MyTest

package com.hmc.ssh.test;
import com.hmc.ssh.dao.BookDao;
import com.hmc.ssh.model.Book;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;
import java.util.List;/*** User:Meice* 2017/11/6*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public  class MyTest {@Autowired@Qualifier(value = "bookDao")private BookDao bookDao;@Testpublic void testList() {ApplicationContext ac  = new ClassPathXmlApplicationContext("spring.xml");BookDao bd=  ac.getBean("bookDao", BookDao.class);List<Book> list = bd.getList();for(Book bk:list) {System.out.println(bk);}}/**** 运行结果:* Caused by: java.lang.IllegalArgumentException:* 'sessionFactory' or 'hibernateTemplate' is required*//*** Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:* No bean named 'sessionFactory' available*//*** java.lang.NullPointerException*//*** org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread* 表明需要声明式事务支持* 需要解决问题:* 1、如何声明事务?    HibernateTransactionManager* 2、给谁声明事务?    sessionFactory*//*** Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException* 表明没有AOP的包*//*** 运行结果;* "D:\Program Files\Java\jdk1.8.0_144\bin\java" -ea -ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...Hibernate: select book0_.bookid as bookid1_0_, book0_.bookauthor as bookauth2_0_, book0_.bookdate as bookdate3_0_, book0_.bookname as bookname4_0_, book0_.bookpress as bookpres5_0_, book0_.bookprice as bookpric6_0_ from Book book0_Book{bookid=1, bookname='宝贝,宝贝', bookauthor='周国平', bookpress='人民文学出版社', bookprice=28.33, bookdate=2017-11-02 00:00:00.0}Book{bookid=2, bookname='上帝掷骰子吗', bookauthor='曹天元', bookpress='中国科学出版社', bookprice=33.66, bookdate=2017-11-02 00:00:00.0}*/@Testpublic void testAdd() {Book book = new Book();book.setBookname("SSH框架");bookDao.add(book);}/*** 为避免每次都要加载spring.xml文件,* 每次都要getBean* 所以使用JUnit4进行测试* @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring.xml")* @Autowiredprivate BookDao bookDao;* 这样就可以直接用了!*/@Testpublic void testAdd2() {ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");BookDao bookDao=  ac.getBean("bookDao",BookDao.class);Book book = new Book();book.setBookname("SSH框架2");bookDao.add(book);/*** 运行结果:* 十一月 07, 2017 8:09:27 上午 org.junit.vintage.engine.discovery.TestClassRequestResolver determineRunnerTestDescriptor警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on com.hmc.ssh.test.MyTest) does not support filtering and will therefore be run completely.Hibernate: insert into Book (bookauthor, bookdate, bookname, bookpress, bookprice) values (?, ?, ?, ?, ?)*/}}

需要注意的是,上面引用了Junit4测试。可以大大简化测试步骤。之前测试需要先加载spring.xml,然后获取bean,现在加载spring.xml通过

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")

搞定,获取bean通过自动装配搞定,所以就可以直接用了。

至此,流程已经打通。任督二脉畅行无阻!

五、总结

前面配置都是零碎分开的,这里总结下整体配置。

1)pom.xml

<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.hmc.ssh</groupId><artifactId>ssh</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>../ssh2</module></modules><name>ssh Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--spring jar--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.1.RELEASE</version></dependency><!--spring web--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.0.1.RELEASE</version></dependency><!-- Struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.13</version></dependency><!--spring和struts2整合需要一个插件包--><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.5.13</version></dependency><!--配置Hibernate--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.12.Final</version></dependency><!--Mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!--配置数据连接池--><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!--导入 ORM--><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>5.0.1.RELEASE</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>RELEASE</version></dependency><!--配置AOP--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.12</version></dependency><!--Spring Test--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.1.RELEASE</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>RELEASE</version></dependency></dependencies><build><finalName>ssh</finalName></build>
</project>

2、web.xml

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--配置struts2过滤器--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置Spring监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--配置可以找到spring.xml--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring.xml</param-value></context-param></web-app>

3、2个配置文件

1) struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><constant name="struts.objectFactory" value="spring"/><package name="ssh" extends="struts-default"><action name="book_list" class="bookAction" method="list"><result name="success">/list.jsp</result></action></package><include file="example.xml"/><!-- Add packages here --></struts>

2) 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:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启spring 注解--><context:component-scan base-package="com.hmc.ssh"/><!--配置数据源--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><!--配置url username password--><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost/sysmgr"/><property name="username" value="root"/><property name="password" value="119913"/><!--初始化连接池大小--><property name="initialSize" value="10"/></bean><!--配置sessionFactory--><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!--属性注入dataSource--><property name="dataSource"  ref="dataSource"/><!--扫描加入注解的实体类(基于包)--><property name="packagesToScan"><array><value>com.hmc.ssh.model</value></array></property><!--配置Hiberante其他属性--><property name="hibernateProperties"><!--2种方式多可以--><!--  <value>hibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=true</value>--><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><!--配置声明式事务--><bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><!--还要配置基于AOP的事务管理--><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="allMethod" expression="execution(* com.hmc.ssh.dao.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod"/></aop:config></beans>

因为配置比较固话,比较利于“传承”,可一致性很强。所以,关键是明白每个配置的作用,没有这个配置会发生什么?具体怎么配置,不用刻意记忆,只用参考官网即可。

我们要习惯这些配置。这些配置比较繁琐,但是相比大数据生态圈的配置,就知道那些配置真是配 配 配!

好了!下期再会!下期就该SpringMVC和MyBatis陆续闪亮登场啦!他们都是为最后的SSM做铺垫。

JavaWeb框架-SSH-整合流程!相关推荐

  1. 基于Myeclipse的三大框架(SSH)整合

    文中主要基于Myeclipse进行配置,配置流程为:Hibernate --> Spring --> 整合 --> struts2 -->整合.注意:在此文中,主要讲述基于注解 ...

  2. 三大框架ssh整合(一)

    1,jar整合 struts版本:2.3.15.3 hibernate版本:3.6.10 spring版本:3.2.0 1.1 struts中需要的.jar文件 全部都在该struts-2.3.15. ...

  3. JavaEE框架整合之基于注解的SSH整合

    基于注解的SSH整合 开发环节步骤: 实体类 -----> DAO开发 -----> Service开发 -----> Action动作类开发 -----> 配置文件(appl ...

  4. 框架学习之Spring 第五节 SSH整合开发[Spring2.5+Hibernate3.3+Struts2]

    1.首先整合Spring和Hibernate ①引入jar包: hibernate核心安装包下的: hibernate3.jar lib\required\*.jar lib\optional\ehc ...

  5. ssm框架搭建和整合流程

    Spring + SpringMVC + Mybatis整合流程 1      需求 1.1     客户列表查询 1.2     根据客户姓名模糊查询 2      整合思路 第一步:整合dao层 ...

  6. ssm框架连接mysql数据库的具体步骤_ssm框架搭建和整合流程

    Spring + SpringMVC + Mybatis整合流程 1      需求 1.1     客户列表查询 1.2     根据客户姓名模糊查询 2      整合思路 第一步:整合dao层 ...

  7. Java系列技术之SSH整合+用户权限控制模型项目-钟洪发-专题视频课程

    Java系列技术之SSH整合+用户权限控制模型项目-62人已学习 课程介绍         将前面讲过的Spring5.SpringMVC.Hibernate5和前端框架Easyui整合起来最终完成一 ...

  8. [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    使用SSM(spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  9. Spring自学教程-ssh整合(六)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...

最新文章

  1. 解密 Redis 助力双 11 背后电商秒杀系统
  2. linux qt creator git,Building Qt Creator from Git/zh
  3. HDOJ---1273 漫步森林[图论]
  4. Silverlight Com组件支持全解析
  5. Foxmail新建自动标签功能在哪 如何给Foxmail收件人邮件设置自动标签
  6. bash error 环境变量错误
  7. cad新手必练300图_零基础学习CAD软件难吗?超全CAD入门学习教程送给你
  8. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...
  9. C++ STL之vector详解
  10. CentOS 6.6 nginx PHP 配置
  11. javascript快速入门(二):JS浏览器操作
  12. Linux安装yum过程(超详细)
  13. 全志 Allwinner V3S 开发环境搭建 (一)虚拟机搭建 Oracle VM VirtualBox6.1 Ubuntu14.4
  14. 360无线网卡驱动 linux驱动,小度Wifi、360Wifi Windows、linux驱动
  15. css固定图片大小 vue_img设置图片大小 vue_如何改变图片大小
  16. SQL Server 无法启动WMI服务
  17. JAVA_SE_Day13
  18. 常用开发工具及常用DOS命令
  19. 计算机待机英语,计算机休眠
  20. msrcr图像增强算法 matlab,图像处理之Retinex增强算法(SSR、MSR、MSRCR)

热门文章

  1. 【Docker/GitLab/Jenkins】
  2. pgpool-II 4.3 中文手册 - 入门教程
  3. 120年过去,历史不该忘记
  4. python英语词汇读音_美式英语和英式英语音标单词发音差异区别大全
  5. UNIX基本操作命令
  6. 安能上市,德邦“隐身”
  7. 高等几何【0464】
  8. qq登录界面php修改法,怎么修改qq登录界面
  9. 【开源访谈】腾讯贺嘉:从小程序谈起,开发者该如何跟进新技术?
  10. 通过Python发送excel中的表格和文字给微信群或好友(微信助手)