相同点:
UDP协议和TCP协议都是传输层协议。
不同点:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接.
2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保证可靠交付
3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
Servlet是运行在服务器端,以多线程的方式处理客户端请求的小程序。是sun公司提供的一套规范(规范的实现是接口)。
(1) servlet对象默认是在用户第一次访问的时候创建的,并且只创建一次,创建的时候调用init()方法。(也可以在servlet配置里面第三行加上
1 这样会在服务器启动的时候servlet对象就创建)
(2) 请求交给service()方法,由service()方法调用doGet或doPost方法或其他的方法。
(3) 服务器关闭的时候servlet对象被销毁,把工程从tomcat服务器中移除,对象也会销毁,销毁时会调用destroy方法。但是销毁是调用的finalized()方法进行销毁的。
servlet创建的方法
(1)最早是implements实现servlet接口,实现接口的重写方法太多,有的不一样需要
(2)后来extends GenericServlet(抽象类)类,实现service方法,不能区分请求的方式,是get请求还是post请求
(3)现在extends HttpServlet(抽象类)(javax 下的包,是上一个的子类)。
说一下servlet的体系结构?
所有的servlet都必须实现核心的接口是就javax.servlet.Servlet。每一个Servlet都必须直接或间接的实现这个接口,或者是继承javax.servlet,GenericServlet或者javax.servlet.http.HttpServlet。最后,Servlet使用多线程可以并行的为多个请求服务。
Session和cookie都是会话(Seesion)跟踪技术。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。但是Session的实现依赖于Cookie,sessionId(session的唯一标识需要存放在客户端)
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中,比如购物车
购物车最好使用cookie,但是cookie是可以在客户端禁用的,这时候我们要使用cookie+数据库的方式实现,当从cookie中不能取出数据时,就从数据库获取。
混合了Java代码和HTML代码运行在服务器端的脚本
JSP的运行模型(工作流程)
用户第一次访问JSP页面的时候,服务器会将JSP文件转换成.java文件,之后编译成字节码文件,加载到JVM,如果JSP文件不做修改,那么上述的步骤不会再来一遍,如果JSP文件发生改变,会重新生成java文件,和新编译成字节码文件,加载到JVM。
1)页面提交页码(第几页)到Servlet中
2)Servlet接收到页码后,将页码传递给分页工具类(PageBean)
3)Servlet中调用Service层传入PageBean对象
4)Service层调用DAO层传入PageBean对象
5)Servlet中得到查询出来的数据,并setAttribute保存
6)在页面中得到(getAttribute)数据,遍历输出
都是AOP编程思想,都能实现权限检查,日志记录等
IOC(inverse of control):控制反转 ,将对象创建的控制权交给IOC容器,应用对象时,再从容器中获得。还有一个更确切的名字叫做DI(dependency injection)依赖注入,创建对象时根据对象之间的依赖关系根据配置自动注入依赖对象。
(1) 作用
创建对象并且维护对象间依赖的关系
(2) 实现原理
反射
(3) 依赖注入的三种方式:
Aspect Oriented Programing面向切面编程。
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
(性能监视,事务管理,安全检查、缓存,日志)
使用了纯java实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类织入增强代码。
(1) 原理
通过代理的方式
JDK动态代理:针对接口生成子类
CGLIB代理:针对目标类生成子类
MySQL的读写分离,利用mycat中间件 + AOP技术实现读写分离,采用AO拦截业务层逻辑的方法,判断方法的前缀是写操作还是读操作,在读数据源和写数据源之间进行切换。
在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上。
(1)用户向服务器发送请求,请求被Spring前端控制Servlet(DispatcherServlet)捕获。(捕获)
(2)DispatcherServlet对请求URL进行解析,得到请求资源标志符(uri),然后根据该URI,调用handlerMapping,获得该handler配置的所有相关对象(包括handler对象以及handler对象对应的拦截器),最后以handlerExcutionChain对象的形式返回。(查找Handler)
(3)DispatcherServlet 根据获得的Handler,选择合适的HandlerAdapter,提取request中的数据模型,填充入Handler入参,开始执行Handler,Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象。(执行handler)
(4)DipatcherServlet根据返回的ModelAndView,选择一个合适的ViewResolver(必须已经注入到Spring容器中的ViewResolver)(选择ViewResolver)
(5)通过ViewResolver结合Model和View,来渲染视图,DispatcherServlet将渲染的结果返回客户端。(渲染返回)