SSH框架整合

ssh框架整合步骤如下

提示:myeclipse环境、工程环境、tomcat环境的jdk保持一致
1、新建一个工程,把工程的编码为utf-8
2、把jsp的编码形式改成utf-8
3、把jar包放入到lib下
4、建立三个src folder
src 存放源代码
config 存放配置文件
hibernate 存放hibernate的配置文件
spring 存放spring的配置文件
struts 存放struts的配置文件
struts.xml
test 存放单元测试
5、在src下建立包
cn.itcast.s2sh.domain
持久化类和映射文件
6、编写dao层和service层
7、写spring的配置文件
1、写sessionFactory
2、测试
3、写dao和service
4、测试
8、写action
9、写spring的配置文件
把action注入到spring容器中

      <bean id="personAction"              class="cn.itcast.s2sh.struts2.action.sh.PersonAction" scope="prototype">

scope为”prototype”保证了action的多实例
10、在web.xml
加入spring的监听器
加入struts2的过滤器
11、请求

详细代码

持久化类与映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping><!-- 用来描述一个持久化类name  类的全名table 可以不写  默认值和类名一样 catalog  数据库的名称  一般不写--><class name="cn.itcast.s2sh.domain.sh.Person"><!-- 标示属性  和数据库中的主键对应name  属性的名称column 列的名称--><id name="pid" column="pid" length="200" type="java.lang.Long"><!-- 主键的产生器就该告诉hibernate容器用什么样的方式产生主键--><generator class="increment"></generator></id><!-- 描述一般属性--><property name="pname" column="pname" length="20" type="string"></property><property name="psex" column="psex" length="10" type="java.lang.String"></property></class>
</hibernate-mapping>

dao

package cn.itcast.s2sh.sh.dao.impl;import java.io.Serializable;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import cn.itcast.s2sh.domain.sh.Person;
import cn.itcast.s2sh.sh.dao.PersonDao;public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao{@Overridepublic void savePerson(Person person) {// TODO Auto-generated method stubthis.getHibernateTemplate().save(person);}@Overridepublic Person getPesonById(Serializable id) {// TODO Auto-generated method stubreturn (Person) this.getHibernateTemplate().load(Person.class, id);}}

service

package cn.itcast.s2sh.sh.service.impl;import java.io.Serializable;import cn.itcast.s2sh.domain.sh.Person;
import cn.itcast.s2sh.sh.dao.PersonDao;
import cn.itcast.s2sh.sh.service.PersonService;public class PersonServiceImpl implements PersonService{private PersonDao personDao;public PersonDao getPersonDao() {return personDao;}public void setPersonDao(PersonDao personDao) {this.personDao = personDao;}@Overridepublic void savePerson(Person person) {// TODO Auto-generated method stubthis.personDao.savePerson(person);}@Overridepublic Person getPersonByID(Serializable id) {// TODO Auto-generated method stubreturn this.personDao.getPesonById(id);}
}

spring配置文件

applicationcontext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><import resource="applicationContext-db.xml"/><import resource="applicationContext-person.xml"/>
</beans>

applicationContext-db.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!--  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:hibernate/hibernate.cfg.xml</value></property></bean>--><bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="mappingResources"><!-- list all the annotated PO classes --><list><value>cn/itcast/s2sh/domain/sh/Person.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop></props></property></bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><tx:advice id="tx" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" read-only="false"/><tx:method name="update*" read-only="false"/><tx:method name="delete*" read-only="false"/><!-- * 代表了除了上述的三种情况的以外的情况--><tx:method name="*" read-only="true"/></tx:attributes></tx:advice><aop:config><aop:pointcut expression="execution(* cn.itcast.s2sh.sh.service.impl.*.*(..))" id="perform"/><aop:advisor advice-ref="tx" pointcut-ref="perform"/></aop:config>
</beans>

applicationContext-person.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean id="personDao" class="cn.itcast.s2sh.sh.dao.impl.PersonDaoImpl"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="personService" class="cn.itcast.s2sh.sh.service.impl.PersonServiceImpl"><property name="personDao"><ref bean="personDao"/></property></bean><bean id="personAction" class="cn.itcast.s2sh.struts2.action.sh.PersonAction" scope="prototype"><property name="personService"><ref bean="personService"/></property></bean>
</beans>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts><constant name="struts.devMode" value="true"/><include file="struts2/struts-person.xml"></include><!--  <constant name="struts.objectFactory" value="spring" />-->
</struts>   

struts-person.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts><package name="person" namespace="/" extends="struts-default"><action name="personAction_*" method="{1}" class="personAction"><result name="index">index.jsp</result></action></package>
</struts>   

web.xml文件的编写

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- 整合Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext.xml</param-value></context-param><filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping><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><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

三大框架整合原理

1、三大框架的作用

  • struts2是一个mvc框架
  • spring容器
    1、利用ioc和di做到了完全的面向接口编程
    2、由于spring的声明式事务处理,使程序员不再关注事务
    3、dao层和service层的类是单例的,但是action层是多例
  • hibernate
    就是一个数据库的ormapping的框架

    2、整合原理
    1、当tomcat启动时,做的事情
    1、因为在web.xml中,

                 <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext.xml</param-value></context-param><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>

所以在启动的时候,执行的是

ContextLoaderListenercontextInitializedthis.contextLoader = createContextLoader();加载spring的配置文件这里有一个固定的参数con的textConfigLocation可以指定classpath路径下的spring的配置文也可以任意位置指定配置文件  spring*.xml    WEB-INF/任意多个任意文件夹/spring-*.xml如果没有指定固定参数,则查找默认的加载路径:WEB-INF/applicationContext.xmlthis.contextLoader.initWebApplicationContext(event.getServletContext());启动spring容器总结:当tomcat启动的时候,spring容器就启动了,这个时候service层和dao层所有的单例类就创建对象了struts2容器:加载了default.properties,struts-default.xml,struts-plugin.xml,struts.xml

2、请求一个url时,发生的事情:
1、在引入jar包时,导入了struts2-spring-plugin-2.1.8.1.jar包,该jar中有一个文件struts-plugin.xml

                <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" /><constant name="struts.objectFactory" value="spring" />

2、由于上面的配置改变了action的生成方式,action由StrutsSpringObjectFactory生成,经过查找是由SpringObjectFactory中的buidBean方法
生成的

               try {o = appContext.getBean(beanName);} catch (NoSuchBeanDefinitionException e) {lass beanClazz = getClassInstance(beanName);o = buildBean(beanClazz, extraContext);}

3、由上面的代码可以看出,先从spring容器中查找相应的action,如果没有找到,再根据反射机制创建action,
beanName就是struts配置文件class属性的值,所以class属性的值和spring中ID的值保持一致

openSessionView模式

在web.xml中<filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping><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>

OpenSessionInView在第一个位置,struts2的过滤器在第二个位置

1、加入了OpenSessionInView模式解决了懒加载的问题
2、因为延迟了session的关闭时间,所以在session一级缓存中的数据会长时间停留在内存中,
增加了内存的开销

错误

在整合SSH框架的时候出现了很多错误

java.lang.OutOfMemoryError: PermGen space

内存不够,可能是tomcat,或者是myeclipse内存不够的原因

参考链接

Tomcat中JVM内存溢出及合理配置 - ye1992的专栏 - 博客频道 - CSDN.NET

[转]MyEclipse内存不足问题 - - ITeye技术网站

myeclipse修改内存大小不足_百度经验

错误

这里写图片描述

这个错误很奇怪,困扰很久,原来的那种写法不知道为什么就是不能成功,而且在tomcat8中刷新一下就可以了,但在tomcat7中不行,而且如果tomcat中有了一个新的写法的程序时,原来写法的程序也可以用了,tomcat程序之间可以互相影响吗???找到一个最接近的解释,不知道对不对。

参考链接

上网站时输入密码后提示could not open Hibernate Session for transaction;nested exception is_百度知道

注解方式实现整合SSH框架

spring配置文件修改为

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!--  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:hibernate/hibernate.cfg.xml</value></property></bean>--><bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="mappingResources"><!-- list all the annotated PO classes --><list><value>cn/itcast/s2sh/domain/sh/Person.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop></props></property></bean><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><context:component-scan base-package="cn.itcast.s2sh"></context:component-scan><tx:annotation-driven transaction-manager="transactionManager"/></beans>

dao

package cn.itcast.s2sh.sh.dao.impl;import java.io.Serializable;import javax.annotation.Resource;import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;import cn.itcast.s2sh.domain.sh.Person;
import cn.itcast.s2sh.sh.dao.PersonDao;@Repository("personDao")
public class PersonDaoImpl implements PersonDao{@Resource(name="hibernateTemplate")private HibernateTemplate hibernateTemplate;@Overridepublic void savePerson(Person person) {// TODO Auto-generated method stubthis.hibernateTemplate.save(person);}@Overridepublic Person getPesonById(Serializable id) {// TODO Auto-generated method stubreturn  (Person) this.hibernateTemplate.load(Person.class, id);}}

service

package cn.itcast.s2sh.sh.service.impl;import java.io.Serializable;import javax.annotation.Resource;import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import cn.itcast.s2sh.domain.sh.Person;
import cn.itcast.s2sh.sh.dao.PersonDao;
import cn.itcast.s2sh.sh.service.PersonService;@Service("personService")
public class PersonServiceImpl implements PersonService{@Resource(name="personDao")private PersonDao personDao;@Override@Transactional(readOnly=false)public void savePerson(Person person) {// TODO Auto-generated method stubthis.personDao.savePerson(person);}@Overridepublic Person getPersonByID(Serializable id) {// TODO Auto-generated method stubPerson person = this.personDao.getPesonById(id);return person;}
}

action

package cn.itcast.s2sh.struts2.action.sh;import javax.annotation.Resource;import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;import cn.itcast.s2sh.domain.sh.Person;
import cn.itcast.s2sh.sh.service.PersonService;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.impl.ActionConfigMatcher;@Controller("personAction")
@Scope("prototype")
public class PersonAction extends ActionSupport{@Resource(name="personService")private PersonService personService;public String savePerson(){Person person = new Person();person.setPname("afds");this.personService.savePerson(person);return null;}public String showPerson(){System.out.println("annoation aaaaaaaaaaaaaaaaa");Person person = this.personService.getPersonByID(2L);ServletActionContext.getRequest().setAttribute("person", person);return "index";}
}

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于未来的10点核心思考

作者&#xff1a;尤瓦尔赫拉利 牛津大学历史学博士&#xff0c;全球瞩目的新锐历史学家来源&#xff1a;《今日简史》世界正在变得越来越复杂&#xff0c;我们正在陷入知识的错觉和群体的无知。同时&#xff0c;我们的生活被社交媒体所塑造&#xff0c;真相早已不存在&#xff…

❤️爆肝3万字,最硬核丨Mysql 知识体系、命令全集 【建议收藏 】❤️

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、信息技术智库公号作者✌ 简历模板、PPT模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &am…

今天专攻POWERSHELL获取本机CPU,内存消耗

PS脚本如下&#xff1a; 1 $Server $env:computername2 #servers CPU Mem Hardinfor 3 $cpu gwmi –computername $Server win32_Processor 4 $men gwmi -ComputerName $Server win32_OperatingSystem 5 $Disks gwmi –Computer: $Server win32_logicaldisk -filter …

证明黎曼猜想的5页论文已发布!最简洁的解读在这里

来源&#xff1a;潇轩社著名数学家阿蒂亚&#xff08;Michael Atiyah&#xff09;公开了他为黎曼猜想做的“简洁证明”&#xff0c;论文长度总共5页。借助量子力学中的无量纲常数α&#xff08;fine structure constant&#xff09;&#xff0c;阿提亚声称解决了复数域上的黎曼…

《Python顶级入门教程》一步一步,是魔鬼的步伐

目录 &#x1f345; 1、欲练此功&#xff0c;先知此人 ⚾ 2、Python 语言特性 ❤ 3、Python 特点 &#x1f345; 4、Python 行情如何&#xff1f; ✍ 5、Python 怎么学&#xff1f; 5.1 学理论——懂原理 5.2 做练习——会应用 5.3 团队学习——不懂就问 &#x1f34…

C#/C++/Fortran 在32位/64位下数学计算性能对比

测试平台 在我的上一篇博客中对比了VS2010中C#和C在运算密集型程序中的性能。上一篇博客的链接&#xff1a; http://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html 当时是在AMD 速龙9650 CPU(4核心)下的测试结果。 随着VS2012、Intel Parallel Studio XE 2013…

“光纤之父”高锟离世,感谢他的贡献

来源&#xff1a;云头条据明报报道&#xff0c;香港中文大学前校长、“光纤之父”、2009年诺贝尔物理学奖得主&#xff0c;今天&#xff08;9月23日&#xff09;下午在医院离世&#xff0c;享年84岁。高錕1933年11月在中国上海出生&#xff0c;祖贯江苏金山市&#xff0c;出身书…

struts2服务端与android交互

本文主要包括以下内容 android与struts2服务器实现登陆 android从struts2服务器获取list数据 android上传数据到struts2服务器 服务器端代码 package com.easyway.json.android;import java.util.HashMap; import java.util.Map;import javax.servlet.http.HttpServletReque…

爆款专栏《Python 黑科技》目录导航丨进度:12/50

《Python 快速入门专栏丨掌握基础》和《Python 黑科技丨练习应用》由 CSDN 博客专家丨全站排名 Top 8 的硬核博主 不吃西红柿 倾力打造&#xff0c;旨在帮助大家快速入门掌握 Python。 更有学习资料&#xff0c;简历和 PPT 模板&#xff0c;微信公众号 【信息技术智库】关注我&…

干货|2018年中国智能硬件行业现状与发展趋势报告

来源&#xff1a;前瞻产业研究院未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网…

一文看懂芯片测试产业

来源&#xff1a;基业常青经济研究院从IDM到垂直分工&#xff0c;IC产业专业化分工催生独立测试厂商出现。集成电路产业从上世纪60年代开始逐渐兴起&#xff0c;早期企业都是IDM运营模式&#xff08;垂直整合&#xff09;&#xff0c;这种模式涵盖设计、制造、封测等整个芯片生…

Android之圆角矩形

安卓圆角矩形的定义 在drawable文件夹下&#xff0c;定义corner.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android" android:shape"rectangle"> <!-…

”大脑“爆发背后是50年互联网架构重大变革

前言&#xff1a;面对即将到来的2019年&#xff0c;互联网诞生50年&#xff0c;将是诸多纪念活动中重要的一个&#xff0c;经过50年的发展&#xff0c;互联网究竟发生什么重要的变化&#xff0c;通过这篇文章试图进行一次总结&#xff0c;也作为提前向互联网50年的致敬。作者&a…

动图|帮你一次性搞清楚 40种传感器工作原理

来源&#xff1a;一览众车/东方仿真物联网智库 转载摘要&#xff1a;帮你一次性搞清楚 40种传感器工作原理扩散硅式压力传感器应变加速度感应器压阻式传感器测量液位的工作原理MQN型气敏电阻结构及测量电路气泡式水平仪的工作原理布料张力测量及控制原理直滑式电位器控制气缸活…

Android实现高仿QQ附近的人搜索展示

本文主要实现了高仿QQ附近的人搜索展示&#xff0c;用到了自定义控件的方法 最终效果如下 1.下面展示列表我们可以使用ViewPager来实现&#xff08;当然如果你不觉得麻烦&#xff0c;你也可以用HorizontalScrollView来试试&#xff09; 2.上面的扫描图&#xff0c;肯定是个Vi…

Netty-4-网络编程模式

我们经常听到各种各样的概念——阻塞、非阻塞、同步、异步&#xff0c;这些概念都与我们采用的网络编程模式有关。 例如&#xff0c;如果采用BIO网络编程模式&#xff0c;那么程序就具有阻塞、同步等特质。 诸如此类&#xff0c;不同的网络编程模式具有不同的特点&#xff0c…

黎曼猜想被证明了?“他的证明甚至不能算是个错误”!阿蒂亚爵士的证明受到同行质疑...

作者&#xff1a;许琦敏 金婉霞编辑&#xff1a;金婉霞责任编辑&#xff1a;李雪林来源&#xff1a;解剖者摘要&#xff1a;德国柏林时间9月24日上午9点45分&#xff0c;菲尔兹奖与阿贝尔奖双料得主、英国皇家学会院士迈克尔阿蒂亚爵士在德国海德堡举行的海德堡奖诺贝尔奖获得者…

Android自定义View

1.View是什么&#xff1f; View是屏幕上的一块矩形区域&#xff0c;它负责用来显示一个区域&#xff0c;并且响应这个区域内的事件。可以说&#xff0c;手机屏幕上的任意一部分看的见得地方都是View&#xff0c;它很常见&#xff0c;比如 TextView 、ImageView 、Button以及Li…

【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点

【试题描述】定义一个函数&#xff0c;输入一个链表&#xff0c;判断链表是否存在环路&#xff0c;并找出回路起点 Circular linked list: A (corrupt) linked list in which a node’s next pointer points to an earlier node, so as to make a loop in the linked listEXAMP…

腾讯机器人实验室首曝光 攻坚“通用人工智能”

来源&#xff1a;新浪科技摘要&#xff1a;与当初的“互联网”一样&#xff0c;“AI”正成为各行各业的标配。在近日召开的2018 世界人工智能大会上&#xff0c;腾讯董事会主席兼首席执行官马化腾提出&#xff0c;人工智能技术是一场跨国、跨学科的科学探索工程&#xff0c;对于…