(转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合
http://blog.csdn.net/yerenyuan_pku/article/details/70040220
SSH框架整合思想
三大框架应用在JavaEE三层结构,每一层都用到了不同的框架。SSH框架整合的思想可用下图来表示:
SSH框架的整合方式一:零障碍整合(带有Hibernate配置文件)
我们先整合Struts2和Spring这两个框架,再整合Spring和Hibernate这两个框架。
整合Struts2和Spring框架
整合Struts2和Spring这两个框架要解决的事情就是把Struts2的Action的创建交给Spring来配置。
第一步,创建Web项目,导入Struts2框架相关的jar包。
要进行Struts2的基本的开发,可以参考struts-2.3.24中的apps下的一些示例代码,其中struts2-blank.war是一个Struts2的空的工程。我们只需要将struts2-blank.war解压后进入到WEB-INF下的lib中查看。
除此之外,对于Struts2还需要了解以下jar包:
struts2-convention-plugin-2.3.24.jar
:Struts2注解的开发包struts2-json-plugin-2.3.24.jar
:Struts2整合AJAX返回JSON数据struts2-spring-plugin-2.3.24.jar
:Struts2整合Spring的插件包。在本文中,我只导入了这个jar包。
第二步,编写一个Action。
在src目录下创建一个cn.itcast.action包,并在该包下创建一个UserAction。
public class UserAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("action..........");
return NONE;
}
}
- 1
第三步,创建Struts2的核心配置文件,该核心配置文件的位置是在src目录下面,名称是struts.xml。并且在该核心配置文件配置UserAction。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo" extends="struts-default" namespace="/">
<action name="user" class="cn.itcast.action.UserAction"></action>
</package>
</struts>
- 1
此时UserAction类由Struts2自己创建。
注意:Struts2和Spring框架整合的时候,Struts2核心配置文件的名称和位置是有固定要求的,即名称只能是struts.xml,且必须位于src目录下面。
第四步,配置Struts2的过滤器。即在web.xml配置文件中添加如下配置:
<!-- 配置Struts2的过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 1
第五步,导入Spring框架相关的jar包。
- Spring框架基本开发的jar包:
- AOP开发相关的jar包:
- 与JDBC开发相关的jar包:
- 与事务管理的开发相关jar包:
- 整合Hibernate的jar包:
- 整和Web项目的jar包:
第六步,创建Spring的核心配置文件——bean1.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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> </beans>- 1
配置Spring的监听器,即在web.xml配置文件中添加如下配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>指定Spring配置文件的位置,即在web.xml配置文件中添加如下配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean1.xml</param-value> <!-- 因为bean1.xml配置文件在src目录下,故可直接这样写 -->
</context-param>
第七步,把UserAction交给Spring进行配置,即在Spring配置文件中添加如下配置:
<!-- 配置action对象 -->
<bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype"></bean>
这时,在Spring配置文件——bean1.xml中配置了UserAction对象,在Struts2配置文件——struts.xml中也配置了UserAction对象。很显然,这种做法是不可取的。解决思路是只需要在Spring配置文件里面配置UserAction对象,而不要在Struts2配置文件中配置。所以,Struts2配置文件应该改为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo" extends="struts-default" namespace="/">
<!-- 在action标签里面不要写action全路径,class属性值写在Spring配置action对象的bean标签的id值 -->
<action name="user" class="userAction"></action>
</package>
</struts>
到这里,Struts2和Spring框架已经整合好了,现在就需要测试是否真如我们所愿了。
在src目录下创建一个cn.itcast.dao包,并在该包下编写Dao层的一个类——UserDao.java。
public class UserDao {
public void add() {
System.out.println("dao..............");
}
}
然后在src目录下创建一个cn.itcast.service包,并在该包下编写Service层的一个类——UserService.java,并在该类中调用UserDao类里面的方法。
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("service..............");
userDao.add();
}
}
接着在UserAction类里面调用UserService类里面的方法。
public class UserAction extends ActionSupport {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public String execute() throws Exception {
System.out.println("action..........");
userService.add();
return NONE;
}
}
相应地,Spring的核心配置文件就要修改为:
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置action对象 -->
<bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="userService" class="cn.itcast.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="cn.itcast.dao.UserDao"></bean>
</beans>
最后,在浏览器地址栏中输入地址http://localhost:8080/Spring_day04_demo1/user.action
,即可在Eclipse控制台看到如下输出结果:
action……….
service…………..
dao…………..
整合Spring和Hibernate框架
我之前也说过,要整合Spring和Hibernate框架,须解决下面两件事情:
- 把Hibernate核心配置文件里面的数据库信息的配置交给Spring来管理。
- 把Hibernate里面的SessionFactory的创建交给Spring来管理。
下面我就来详细介绍Spring框架整合Hibernate框架的具体实现。
第一步,导入Hibernate开发相关的jar包。
首先导入lib/required目录下所有的jar包,因为在该目录下,包含运行Hibernate项目必须的jar包。
再导入MySQL数据库的驱动jar包:
接着再导入日志相关的jar包:
其中log4j的包由Spring导入。
在进行这一步时,可能会遇到以下两个问题:
- 导入Struts2和Hibernate的jar包时有jar包冲突问题(两个jar包功能相同,但版本不一样),即在Struts2里面有一个这样的jar包:
在Hibernate里面也有这样的一个jar包:
解决方式很简单了,就是删除那个低版本的jar包。 - Spring整合持久化层框架时,还须导入如下jar包:
第二步,搭建Hibernate开发环境。
创建实体类。在src目录下创建一个cn.itcast.entity包,并在该包下编写一个User实体类。
public class User { private Integer uid;
private String username;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }- 1
配置实体类映射关系,即在cn.itcast.entity包中创建User.hbm.xml映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-4-5 14:44:57 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="cn.itcast.entity.User" table="t_user">
<id name="uid" type="java.lang.Integer">
<column name="uid" />
<generator class="native" />
</id>
<property name="username" type="java.lang.String">
<column name="username" />
</property>
<property name="address" type="java.lang.String">
<column name="address" />
</property>
</class>
</hibernate-mapping>- 1
创建Hibernate核心配置文件,即在src目录下引入hibernate.cfg.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置关于数据库连接的四个项:driverClass url username password -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernateTest</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">yezi</property> <!-- 可以将向数据库发送的SQL语句显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property> <!-- hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 自动创建表 -->
<property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="cn/itcast/entity/User.hbm.xml" />
</session-factory>
</hibernate-configuration>- 1
注意:如果只是单纯使用Hibernate框架,那么核心配置文件名称必须是hibernate.cfg.xml且位置必须在src目录下。但Hibernate和Spring框架整合的时候,Hibernate核心配置文件的名称和位置是没有固定要求的。
第三步,把Hibernate核心配置文件中的数据库配置的信息交给Spring进行配置。即把Hibernate核心配置文件中的数据库信息的配置去掉,改在Spring的核心配置文件中配置:
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring_lee"></property>
<property name="user" value="root"></property>
<property name="password" value="yezi"></property>
</bean>
- 1
第四步,把Hibernate里面的SessionFactory的创建交给Spring来配置。具体思路为:服务器启动的时候,加载Spring配置文件,继而把配置文件中的对象都创建完毕。故可把SessionFactory对象的创建也在Spring配置文件进行配置。又因为创建SessionFactory对象的代码不是简简单单new出来的,而是多行代码实现的,核心代码如下:
// 加载核心配置文件
config = new Configuration().configure();
// 创建SessionFactory对象
sessionFactory = config.buildSessionFactory();
所以我们不可能在Spring配置文件中通过一个<bean>
标签就简简单单地进行配置。Spring框架针对上面这种情况,帮我们封装了一个类,配置这个类的对象就可以创建SessionFactory对象了。所以我们应在Spring配置文件中添加如下内容:
<!-- 配置sessionFactory的创建 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 1.指定数据库位置 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 2.指定使用的Hibernate核心配置文件位置 -->
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>
- 1
第五步,之前我就讲过Spring针对JavaEE三层结构中的每一层都提供了不同的技术,在dao层,Spring提供了JDBC模板的技术,可对数据库进行CRUD操作。Spring提供了很多持久层技术的模板类简化了编程,如下图:
现在我们就要在dao层里面使用HibernateTemplate模板类,至于它是什么,我待会将做简单介绍。具体操作为:向UserDao里面注入HibernateTemplate模板类对象,并调用HibernateTemplate模板类里面的save方法向数据库表中添加一条记录。这样UserDao类的代码就应修改为:
public class UserDao {
// 在Dao里面注入HibernateTemplate模板对象
private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void add() {
// 向表中添加记录
// 使用hibernateTemplate实现添加
// HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory);
// hibernateTemplate.save(entity);
System.out.println("dao..............");
User user = new User();
user.setUsername("李阿昀");
user.setAddress("湖北天门");
hibernateTemplate.save(user);
}
}
- 1
- 2
当然了,Spring配置文件的修改是必不可少的啦!所以应向Spring配置文件添加如下配置:
<bean id="userDao" class="cn.itcast.dao.UserDao">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<!-- 创建HibernateTemplate模板对象 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
- 1
第六步,配置Spring的事务管理。
配置事务管理器
<!-- 1.配置事务的管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>- 1
- 2
注解事务管理的开启
<!-- 2.开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>在业务层添加一个
@Transactional
注解@Transactional
public class UserService { private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void add() {
System.out.println("service..............");
userDao.add();
}
}- 1
这时启动tomcat服务器,就会发现数据库中多了一个t_user表,这是理所应当的啦!接着在浏览器地址栏中输入地址http://localhost:8080/Spring_day04_demo1/user.action
进行访问,即可看到t_user表多了一条记录,如下:
至此,hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架就已整合完毕!
HibernateTemplate介绍
HibernateTemplate对Hibernate框架进行了封装,直接调用HibernateTemplate里面的方法即可实现对数据库进行CRUD的操作。
HibernateTemplate常用的方法如下:
Serializable save(Object entity)
:添加操作void update(Object entity)
:修改操作void delete(Object entity)
:删除操作<T> T get(Class<T> entityClass, Serializable id)
:根据id查询<T> T load(Class<T> entityClass, Serializable id)
:根据id查询List find(String queryString, Object... values)
:查询操作的方法
SSH框架整合过程总结
- 导入相关的jar包。
一共有42个jar包。 - 搭建Struts2的开发环境
- 创建Action,引入struts.xml配置文件,并配置Action
- 配置Struts2框架的过滤器
- 搭建Hibernate的开发环境
- 创建实体类
- 配置实体类和数据库表之间的映射关系
- 创建Hibernate核心配置文件,主要是引入映射配置文件
- 搭建Spring的开发环境
- 创建Spring核心配置文件
- 让Spring配置文件在服务器启动时候进行加载
- 配置监听器
- 指定Spring配置文件的位置
- Struts2和Spring框架的整合
- 把Struts2的Action的创建交给Spring来配置(记住Action是多实例的对象)。
- 在struts.xml配置文件中的action标签的class属性里面写上bean的id值。
- Spring和Hibernate框架的整合
- 把Hibernate核心配置文件里面的数据库信息的配置交给Spring来管理。
- 把Hibernate里面的SessionFactory的创建交给Spring来管理。
- 在dao里面使用HibernateTemplate模板类
- 在dao里面注入HibernateTemplate模板类对象
- 在HibernateTemplate模板对象中注入SessionFactory
- 配置Spring的事务管理
SSH框架的整合方式二:不带Hibernate配置文件
Spring整合Hibernate框架的时候,可以不用写Hibernate的核心配置文件。下面我就举个例子来演示。
首先复制以上SSH项目,再在其基础上进行修改。
然后查看之前写的Hibernate核心配置文件,可知Hibernate核心配置文件包含如下内容:
- 连接数据库必要的参数
- Hibernate的属性
- 连接池的配置
- 映射文件的引入
Spring整合Hibernate框架的时候,虽然可以不用写Hibernate的核心配置文件,但还是要把Hibernate核心配置文件中的基本信息配置和映射文件的引入放到Spring配置文件中进行配置。所以Spring配置文件的内容应修改为:
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring_lee"></property>
<property name="user" value="root"></property>
<property name="password" value="yezi"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> -->
<!-- 如果不写Hibernate的核心配置文件,你就不需要写上面这行配置了 -->
<!-- 1.把Hibernate的基本信息的配置(写在这儿) -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 2.把映射文件引入 -->
<property name="mappingResources">
<list>
<value>cn/itcast/entity/User.hbm.xml</value>
<!-- <value>...</value> -->
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="userService" class="cn.itcast.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="cn.itcast.dao.UserDao">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
至此,hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架就又整合完毕!两种方式任君选择!
(转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合的更多相关文章
- Struts2+Hibernate+Spring(SSH)三大框架整合jar包
Struts2 + Spring3 + Hibernate3 框架整合 1. 每个框架使用 (开发环境搭建 )* 表现层框架 struts2 1) jar包导入: apps/struts2_blank ...
- JavaWeb_(SSH)三大框架整合struts+hibernate+spring_Demo
三大框架整合 一.SSH导包 二.书写Spring 三.书写Struts 四.整合Spring与Struts 五.书写(与整合)Hibernate.引入c3p0连接池并使用hibernate模板 六. ...
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
首先我们要知道Hibernate五大对象:,本实例通过深入的使用这五大对象和spring+springMVC相互结合,体会到框架的好处,提高我们的开发效率 Hibernate有五大核心接口,分别是:S ...
- SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...
- [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...
- JAVAEE——SSH三大框架整合(spring+struts2+hibernate)
一.整合原理 二.导包(41个) 1.hibernate (1)hibernate/lib/required (2)hibernate/lib/jpa | java persist api java的 ...
- Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合
前言 转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...
- SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法
转自:https://blog.csdn.net/bieleyang/article/details/77862042 SSM框架是spring MVC ,spring和mybatis框架的整合,是标 ...
随机推荐
- accp
ACCP(Aptech Certified Computer Professional)是印度最早从事IT职业教育的Aptech计算机教育公司推出的培养软件程序设计人员的课程体系,由北大青鸟集团于20 ...
- 表单提交数据量大于2m,java 后台接受不到表单传递过来的数据
一般来说 post请求提交的数据无大小限制,但是tomcat 设置默认的表单传输数据大小不能2m,这时候当数据大于2m后台接收达不到表单的数据,需要修改tomcat的server.xml的的maxPo ...
- 织梦DEDE系统跨站跨数据库调用数据显示
调用方法 本标签的调用格式为: {dede:sql sql="一条完整的SQL语句" appname="数据库配置参数"}您的底层模板{/dede:sql} 稍 ...
- 在Main Thread中使用异步
Whenever you first start an Android application, a thread called "main" is automatically c ...
- 从0开始学习Hadoop(1) 环境准备 Win7环境+VirtureBox+Ubuntu
虚拟机:VirtureBox 3.18 下载地址: https://www.virtualbox.org/ 操作系统:Ubuntu 版本:ubuntu-15.04-desktop-amd64.iso ...
- Image2Caption
定义 图像标注或语言生成图像问题把计算机视觉与自然语言处理联系在了一起,是广义的人工智能领域的一大难题.通常涉及到特征提取(用cnn提取出图像内部不为人类感知的向量特征)和语言模型建立.为图像提取文字 ...
- 在Visual studio 中解除 TFS 的账号绑定
在Visual Studio中, 只要使用了TFS, 就会要求输入用户名密码验证 . 但是一旦点击验证对话框下部的:记住用户名密码 以后都不能再修改用户名了. 而且重装Visual Studio 听说 ...
- bzoj 1009: [HNOI2008]GT考试【kmp+dp+矩阵快速幂】
看n和k的范围长得就很像矩阵乘法了 设f[i][j]表示到第i个位置的后缀最长匹配目标串的j位.转移的话显然是枚举0~9,然后选择f[i+1]中能被他转移的加起来,需要用到next数组.然后构造矩阵的 ...
- bzoj2720: [Violet 5]列队春游(概率期望+组合数学)
Description Input Output Sample Input Sample Output HINT 数学题都这么骚的么……怎么推出来的啊……我是真的想不出来…… 首先,要算总的视 ...
- js 调试方法两种
JS的错误捕获一般有下面两种方式: 1. 异常捕获常用方法是 try/catch/ throw /finally 2. 全局捕获window.onerror 1. try/catch/throw/fi ...