Git Product home page Git Product logo

xxg-blog-message-board's People

Watchers

 avatar  avatar

xxg-blog-message-board's Issues

Java使用Jetty实现嵌入式Web服务器及Servlet容器 | 叉叉哥的BLOG

https://xxgblog.com/2014/03/07/jetty-embed/

Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty。 下面介绍如何在Java应用程序中嵌入Jetty。 Jetty下载地址,本文写作时的最新版本是9.1.2,下载jetty-distribution-9.1.2.v20140210.zip: http:/

Java使用Protocol Buffers入门四步骤 | 叉叉哥的BLOG

https://xxgblog.com/2014/07/03/java-protobuf/

Protocol Buffers(简称protobuf)是谷歌的一项技术,用于将结构化的数据序列化、反序列化,经常用于网络传输。 这货实际上类似于XML生成和解析,但protobuf的效率高于XML,不过protobuf生成的是字节码,可读性比XML差。类似的还有json、Java的Serializable等。 protobuf支持各种语言。本文以Java为例,简单介绍protobuf如何使用。其

Java位运算在程序设计中的使用:位掩码(BitMask) | 叉叉哥的BLOG

https://xxgblog.com/2013/09/15/java-bitmask/

在Java中,位运算符有很多,例如与(&)、非(~)、或(|)、异或(^)、移位(<<和>>)等。这些运算符在日常编码中很少会用到。 在下面的一个例子中,会用到位掩码(BitMask),其中包含大量的位运算。不只是在Java中,其他编写语言中也是可以使用的。 例如,在一个系统中,用户一般有查询(Select)、新增(Insert)、修改(Update)、删除(Del

Struts 2三种方式实现Ajax | 叉叉哥的BLOG

https://xxgblog.com/2014/03/24/struts2-ajax/

Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。 所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml、json等结构化的数据,还可能是一个简单的字符串。 所以,在Struts 2中使用Ajax,Action一般就不会调用一个jsp视图来显示了(如果Ajax请求内容是页面的一部分也

MINA、Netty、Twisted一起学(十一):SSL/TLS | 叉叉哥的BLOG

https://xxgblog.com/2017/02/27/mina-netty-twisted-11/

什么是SSL/TLS不使用SSL/TLS的网络通信,一般都是明文传输,网络传输内容在传输过程中很容易被窃听甚至篡改,非常不安全。SSL/TLS协议就是为了解决这些安全问题而设计的。SSL/TLS协议位于TCP/IP协议之上,各个应用层协议之下,使网络传输的内容通过加密算法加密,并且只有服务器和客户端可以加密解密,中间人即使抓到数据包也无法解密获取传输的内容,从而避免安全问题。例如广泛使用的HTTP

Java使用Apache FtpServer实现嵌入式FTP服务器 | 叉叉哥的BLOG

https://xxgblog.com/2014/02/24/apache-ftpserver-embed/

Apache FtpServer是一个纯Java实现的FTP服务器,基于大名鼎鼎的网络框架apache MINA实现。它既可以作为一个完整的FTP服务器单独使用,也可以在Java程序中调用,类似于Jetty可以作为嵌入式的HTTP服务器。 下面介绍如何在Java中启动FTP服务器。 Apache FtpServer下载地址,目前最新版是1.0.6: http://mina.apache.org/f

使用Tomcat实现基于iframe streaming的Comet Web聊天室 | 叉叉哥的BLOG

https://xxgblog.com/2014/08/11/tomcat-comet-web-chat/

首先,无图无真相,先上图:这是一个基于Comet实现的聊天室Demo,功能类似于QQ群聊。聊天过程中如果有新想消息,那么就需要服务器推送消息到浏览器,所以这里可以使用Comet技术。 Comet一般有两种实现方式:长轮询(long-polling)、流(streaming)。而本文中的这个Demo的实现方式是基于流(streaming),前端使用了一个隐藏的iframe,这也是比较常用的一种方式。

Maven仓库搭建(二):GitHub、又拍云、七牛云存储 | 叉叉哥的BLOG

https://xxgblog.com/2016/09/23/maven-repo-github-qiniu-upyun/

在上一篇博文中,主要介绍了Maven仓库搭建原理,除了Nexus外,随意使用一个HTTP服务器,例如Tomcat或Nginx,都可搭建一个自己的Maven仓库。 无论是用Nexus还是HTTP服务器搭建Maven仓库,总归需要一台服务器,一台服务器需要花钱买和花时间维护,成本比较大。Nexus一般是公司用的比较多,个人不推荐使用。本文就是介绍一些适合个人搭建Maven仓库的方式,相对来说比Nexu

Async.js解决Node.js操作MySQL的回调大坑 | 叉叉哥的BLOG

https://xxgblog.com/2015/12/22/nodejs-async-mysql/

由于JavaScript语言异步特性,在使用Node.js执行很多操作时都会使用到回调函数,其中就包括访问数据库。如果代码中的业务逻辑稍微复杂一点,回调一层层嵌套,那么代码很容易进入Callback Hell,无论对写代码的人还是阅读代码的人,都是精神上的折磨。 例如对MySQL的一个事务操作,插入一条posts并插入一条log:1234567891011121314151617181920212

Maven插件wagon-maven-plugin自动化部署Java项目到Linux远程服务器 | 叉叉哥的BLOG

https://xxgblog.com/2015/10/23/wagon-maven-plugin/

通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包、将包文件传到服务器、SSH连上服务器、敲命令启动程序等一系列繁琐的步骤。实际上这些步骤都可以通过Maven的一个插件wagon-maven-plugin来自动完成。 文件上传到服务器Maven项目可使用mvn package指令打包,打包完成后包位于target目录下,要想在远程服务器上部署,首先要将包上传到服务器。 在项目的

Spring Session + Redis实现分布式Session共享 | 叉叉哥的BLOG

https://xxgblog.com/2016/09/29/spring-session-redis/

通常情况下,Tomcat、Jetty等Servlet容器,会默认将Session保存在内存中。如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案。但是这种方案有一个缺点,就是不利于扩展。 目前越来越多的应用采用分布式部署,用于实现高可用性和负载均衡等。那么问题来了,如果将同一个应用部署在多个服务器上通过负载均衡对外提供访问,如何实现Session共享? 实际上实现Se

Jetty/Tomcat + Nginx反向代理获取客户端真实IP、域名、协议、端口 | 叉叉哥的BLOG

https://xxgblog.com/2017/06/23/jetty-tomcat-nginx-proxy-config/

问题Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。 例如在某一台IP为10.4.64.22的服务器上,Jetty或者Tomcat端口

Struts 2实现类似ThinkPHP的MVC开发方式 | 叉叉哥的BLOG

https://xxgblog.com/2014/03/12/struts2-thinkphp/

ThinkPHP是PHP的一个MVC开源框架,Struts 2是Java的MVC开源框架。虽然编程语言不同,但是他们都是解决同样的问题。 用过ThinkPHP的同学应该都知道,ThinkPHP是一个非常简单的框架,使用起来很舒服。相对来说Struts 2则没有这么简单。 本文介绍如何配置Struts 2,让它使用起来像ThinkPHP一样简单。 在介绍Struts 2之前,首先了解一下ThinkP

Apache Commons DbUtils整合Spring框架实现简单的CRUD | 叉叉哥的BLOG

https://xxgblog.com/2018/08/30/dbutils-spring/

Commons DbUtils是Apache提供的一个对JDBC进行简单封装的开源工具类库,能够简化JDBC相关的开发。Commons DbUtils可以非常方便的整合Spring Framework,比较轻量级,执行SQL语句非常方便(特别是查询语句),可以代替Spring JdbcTemplate、MyBatis等数据库访问层技术。 配置DbUtils通过QueryRunner类来执行SQL,

利用X-Forwarded-For伪造客户端IP漏洞成因及防范 | 叉叉哥的BLOG

https://xxgblog.com/2018/10/12/x-forwarded-for-header-trick/

问题背景在Web应用开发中,经常会需要获取客户端IP地址。一个典型的例子就是投票系统,为了防止刷票,需要限制每个IP地址只能投票一次。 如何获取客户端IP在Java中,获取客户端IP最直接的方式就是使用request.getRemoteAddr()。这种方式能获取到连接服务器的客户端IP,在中间没有代理的情况下,的确是最简单有效的方式。但是目前互联网Web应用很少会将应用服务器直接对外提供服务,一

Maven profile结合Maven AntRun Plugin实现不同环境配置文件分离打包 | 叉叉哥的BLOG

https://xxgblog.com/2016/05/05/maven-profile-antrun/

在Java项目中通常会有各种配置文件,例如有xml、properties。在不同的环境下配置文件的内容可能会不一样,例如正式环境、测试环境、开发环境连的不是同一个数据库,访问的接口不一样,或者日志的级别不同。如果每次部署不同环境时都要改配置文件的各种配置是非常麻烦的。在这种情况下,可以将这些配置文为每个环境复制一个,分别配置不同的内容,打包部署时不同环境的包中打入对应的配置文件。下面是一个通过Ma

MINA、Netty、Twisted一起学(三):TCP消息固定大小的前缀(Header) | 叉叉哥的BLOG

https://xxgblog.com/2014/08/22/mina-netty-twisted-3/

在上一篇博文中,有介绍到用换行符分割消息的方法。但是这种方法有个小问题,如果消息中本身就包含换行符,那将会将这条消息分割成两条,结果就不对了。 本文介绍另外一种消息分割方式,即上一篇博文中讲的第2条:use a fixed length header that indicates the length of the body,用一个固定字节数的Header前缀来指定Body的字节数,以此来分割消息

Jetty集群配置Session存储到MySQL、MongoDB | 叉叉哥的BLOG

https://xxgblog.com/2015/01/30/jetty-session-storage/

在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的“会话”,每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登录、购物车等。 Session一般情况下是保存在服务器内存中。如果服务器重启,Session就会丢失。另外,如果是集群环境,Web应用部署在多台服务器上,Session如果保存在各自的服务器上,就无法共享了。 针对这个问

Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC) | 叉叉哥的BLOG

https://xxgblog.com/2015/01/13/strophe-xmpp/

XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件、网络游戏聊天、Web聊天及Web消息推送、移动设备的消息推送等场景,例如Google的GTalk、《英雄联盟LOL》游戏聊天模块。 由于在Web浏览器上的JavaScript不能直接处理TCP协议,所以XMPP服务器通常会

MINA、Netty、Twisted一起学(十二):HTTPS | 叉叉哥的BLOG

https://xxgblog.com/2017/02/28/mina-netty-twisted-12/

由于HTTPS协议是由HTTP协议加上SSL/TLS协议组合而成,在阅读本文前可以先阅读一下HTTP服务器和SSL/TLS两篇博文,本文中的代码也是由这两篇博文中的代码组合而成。 HTTPS介绍上一篇博文中介绍了SSL/TLS协议,我们平时接触最多的SSL/TLS协议的应用就是HTTPS协议了,现在可以看到越来越多的网站已经是https开头了,百度搜索也由曾经的http改为https。有关百度为什

MINA、Netty、Twisted一起学(二):TCP消息边界问题及按行分割消息 | 叉叉哥的BLOG

https://xxgblog.com/2014/08/21/mina-netty-twisted-2/

在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息。理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次read。但是,现实不总是按照剧本来走。 MINA官方文档节选: TCP guarantess delivery of all packets in the correct order. But ther

Maven profile结合Maven AntRun Plugin实现不同环境配置文件分离打包 | 叉叉哥的BLOG

https://xxgblog.com/2016/05/05/maven-profile-antrun/

在Java项目中通常会有各种配置文件,例如有xml、properties。在不同的环境下配置文件的内容可能会不一样,例如正式环境、测试环境、开发环境连的不是同一个数据库,访问的接口不一样,或者日志的级别不同。如果每次部署不同环境时都要改配置文件的各种配置是非常麻烦的。在这种情况下,可以将这些配置文为每个环境复制一个,分别配置不同的内容,打包部署时不同环境的包中打入对应的配置文件。下面是一个通过Ma

MINA、Netty、Twisted一起学(五):整合protobuf | 叉叉哥的BLOG

https://xxgblog.com/2014/08/27/mina-netty-twisted-5/

protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化、反序列化),一般应用于网络传输,可支持多种编程语言。 protobuf如何使用这里不再介绍,本文主要介绍在MINA、Netty、Twisted中如何使用protobuf,不了解protobuf的同学可以去参考我的另一篇博文。 在前一篇博文中,有介绍到一种用一个固定为4字节的前缀Header来

Java WebSocket + tail命令实现Web实时日志 | 叉叉哥的BLOG

https://xxgblog.com/2015/11/25/java-websocket-tail/

在Linux操作系统中,经常需要查看日志文件的实时输出内容,通常会使用tail -f或者tailf命令。查看实时日志可能会需要首先SSH连上Linux主机,步骤很麻烦不说,如果是生产环境的服务器,可能还会控制各种权限。此时可以考虑基于Web显示实时日志。 由于传统的HTTP协议是请求/响应模式,而实时日志需要不定时的持续的输出,有新的日志内容时需要由服务器主动推送给客户端浏览器。所以这里使用的是H

Maven仓库搭建(一):一台HTTP服务器即可(Tomcat、Apache或Nginx) | 叉叉哥的BLOG

https://xxgblog.com/2016/09/22/http-server-maven-repository/

作为一个Java老程序员,多多少少都会有一些自己写的各种常用代码,如果每写一个项目都把这些代码拷贝一份到新项目比较麻烦的,打成jar包引入到项目会方便很多。如果想让这些jar包能通过Maven引入进项目,那就需要搭建Maven仓库。 说到Maven仓库搭建,很多人第一想到的一般都是Nexus。Nexus的确是非常好的方案,但是总归需要一台服务器,一台服务器需要花钱买和花时间维护,成本比较大。Nex

MyBatis Generator实现MySQL分页插件 | 叉叉哥的BLOG

https://xxgblog.com/2016/05/06/mybatis-generator-mysql-pagination/

MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求。但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能。本文介绍如何让MyBatis Generator生成的代码具有分页功能。 MyBatis Generator结合Maven的配置和使用在实现分页之前,首先简单介绍MyBatis Generator如何使用。 MyBatis

MINA、Netty、Twisted一起学(七):发布/订阅(Publish/Subscribe) | 叉叉哥的BLOG

https://xxgblog.com/2014/09/19/mina-netty-twisted-7/

消息传递有很多种方式,请求/响应(Request/Reply)是最常用的。在前面的博文的例子中,很多都是采用请求/响应的方式,当服务器接收到消息后,会立即write回写一条消息到客户端。HTTP协议也是基于请求/响应的方式。 但是请求/响应并不能满足所有的消息传递的需求,有些需求可能需要服务端主动推送消息到客户端,而不是被动的等待请求后再给出响应。 发布/订阅(Publish/Subscribe)

Android开发:显式和隐式Intent | 叉叉哥的BLOG

https://xxgblog.com/2013/09/08/android-intent/

Intent是Android初学者比较难理解的一个东西。我这里以通俗易懂的语言和通俗易懂的代码,让初学者简单感受一下Intent。 intent就是意图的意思。Intent分两种:显式(Explicit intent)和隐式(Implicit intent)。 显式(设置Component)显式,即直接指定需要打开的Activity对应的类。 以下多种方式都是一样的,实际上都是设置Componen

Java IPv6相关属性preferIPv4Stack、preferIPv6Addresses介绍 | 叉叉哥的BLOG

https://xxgblog.com/2019/02/17/java-ipv6-system-properties/index.html

IPv6背景介绍目前被广泛使用的IPv4,它的最大问题是网络地址资源有限。IPv4仅有32二进制位,满打满算也仅有不到43亿个IP地址,已经完全不能满足目前需求。IPv6有128二进制位,地址数量非常庞大。目前主流操作系统早已支持IPv6,Google、Facebook和Yahoo等网站也早已支持IPv6。2017年底****办公厅、国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计

ActiveMQ整合Spring JMS | 叉叉哥的BLOG

https://xxgblog.com/2018/05/12/spring-jms-activemq/

JMS即Java消息服务(Java Message Service),是Java平台上的一套关于消息中间件的规范,或者说是一套统一的API。支持JMS的消息中间件有很多,ActiveMQ算是其中最常用的一个。 JMS两种模型JMS支持以下两种模型,本文将会对这两种模型分别介绍如何整合Spring: 点对点(Point-to-Point),对应的destination是Queue 发布订阅(Pub

Java通过URLClassLoader让程序支持插件扩展 | 叉叉哥的BLOG

https://xxgblog.com/2013/07/04/java-urlclassloader-plugin/

插件(Plugin)是什么不用多说。常用的软件,例如Eclipse、Photoshop、VisualStudio,都支持插件扩展。插件可以动态给软件添加一些功能,也可以随时删除,这样的好处是任何人都可以给这个软件进行功能上的扩展,而不用去改软件本身的代码。 适用场景比如需要开发一个系统,用来将一些有数据推送给客户,至于是什么数据不是重点。有三个客户:A客户需要把数据组织成一个xml格式的文件,通过

Nginx基本功能极速入门 | 叉叉哥的BLOG

https://xxgblog.com/2015/05/17/nginx-start/

本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理。废话不多,直接开始。 1、静态HTTP服务器首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。 配置:123456server { listen 80; # 端口号 location / { root /usr/share

MINA、Netty、Twisted一起学(六):session | 叉叉哥的BLOG

https://xxgblog.com/2014/09/10/mina-netty-twisted-6/

开发过Web应用的同学应该都会使用session。由于HTTP协议本身是无状态的,所以一个客户端多次访问这个web应用的多个页面,服务器无法判断多次访问的客户端是否是同一个客户端。有了session就可以设置一些和客户端相关的属性,用于保持这种连接状态。例如用户登录系统后,设置session标记这个客户端已登录,那么访问别的页面时就不用再次登录了。 不过本文的内容不是Web应用的session,而

MINA、Netty、Twisted一起学(八):HTTP服务器 | 叉叉哥的BLOG

https://xxgblog.com/2014/09/23/mina-netty-twisted-8/

HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输。 HTTP协议也是基于TCP协议,所以也有服务器和客户端。HTTP客户端一般是浏览器,当然还有可能是其他东西。HTTP服务器,也就是Web服务器,目前已经有很多成熟的产品,例如Apache HTTP Server、Tomcat、Nginx、IIS等。 本文的内容不是讲解如何使用以上的HTTP服务器,

MINA、Netty、Twisted一起学(十):线程模型 | 叉叉哥的BLOG

https://xxgblog.com/2014/10/16/mina-netty-twisted-10/

要想开发一个高性能的TCP服务器,熟悉所使用框架的线程模型非常重要。MINA、Netty、Twisted本身都是高性能的网络框架,如果再搭配上高效率的代码,才能实现一个高大上的服务器。但是如果不了解它们的线程模型,就很难写出高性能的代码。框架本身效率再高,程序写的太差,那么服务器整体的性能也不会太高。就像一个电脑,CPU再好,内存小硬盘慢散热差,整体的性能也不会太高。 玩过Android开发的同学

Maven profile整合Spring profile | 叉叉哥的BLOG

https://xxgblog.com/2016/06/01/maven-spring-profile/

在Maven和Spring中,都有profile这个概念。profile是用于区分各种环境的,例如开发环境、测试环境、正式环境等。Maven的profile用于在打包时根据指定环境替换不同环境的配置文件配置,如数据库配置。Spring的Profile可以用于在不同的环境下加载不同的bean,例如@Profile注解。两者一个是Maven编译和打包时生效,另一个是运行时生效,默认是没有关联的,本文会

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.