精华内容
下载资源
问答
  • Tomcat Java语言开发一个Servlet容器,Servlet和Servlet容器之间关系就像子弹和枪,互相独立发展又相互依赖。Tomcat目录结构:/bin - Tomcat 脚本存放目录(如启动、关闭脚本)。/conf - Tomcat 配置文件目录。/...

    Tomcat 是Java语言开发的一个Servlet容器,Servlet和Servlet容器之间的关系就像子弹和枪,互相独立发展又相互依赖。

    0a8b79500dcf6db969e5ae6de563ba82.png

    Tomcat目录结构:

    • /bin - Tomcat 脚本存放目录(如启动、关闭脚本)。
    • /conf - Tomcat 配置文件目录。
    • /logs - Tomcat 默认日志目录。
    • /webapps - webapp 运行的目录。
    • /lib - Tomcat运行需要的库文件。
    • /temp - Tomcat临时文件存放目录
    • /work - Tomcat的工作目录

    Tomcat 的总体结构:

    df31df5d25eca136d303d2ea71b6cb0f.png
    • Server:整个Tomcat服务器,一个Tomcat只有一个Server;
    • Service:Server中的一个逻辑功能层, 一个Server可以包含多个Service;
    • Connector:称作连接器,是Service的核心组件之一,一个Service可以有多个Connector,主要是连接客户端请求;
    • Container:Service的另一个核心组件,按照层级有Engine,Host,Context,Wrapper四种,一个Service只有一个Engine,其主要作用是执行业务逻辑;
    • Jasper:JSP引擎;
    • Session:会话管理;

    上面简单介绍了Tomcat的模块结构,接下来结合源码深入了解Tomcat设计:

    Server 服务器

    Server代表整个Tomcat的Servlet容器,可能包含一个或多个Service服务。

    类关系图:

    460abd4f0948fb34a5c86d9d56078240.png

    StandardServer类是Server接口的标准实现。

    Service 服务

    一个Server可以包含多个Service(他们是彼此完全独立,只共享基本的JVM和系统路径上的类),一个Service负责维护一个或多个Connector和一个Container。

    8cf17a6e3152d68b498b90a9b101e188.png

    StandardService类是Service接口的标准实现。

    Connector 连接器

    用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。

    09bc48898dc0d6708fcd02d81ed3c10f.png

    Container 容器

    Container 容器的设计用的是典型的责任链的设计模式,它有四个子容器组件构成,分别是:Engine、Host、Context、Wrapper,这四个组件不是平行的,而是父子关系,Engine 包含 Host,Host 包含 Context,Context 包含 Wrapper。

    da273ba030fdee30903b16ed06dddb23.png

    Engine 容器

    一个Service中有多个Connector和一个Engine,Engine表示整个Servlet引擎,一个Engine下面可以包含一个或者多个Host。

    af07ab9b47e996951334161a7bdde5ea.png

    StandardEngine类是Engine接口的标准实现。

    Host容器

    Host,代表一个站点,也可以叫虚拟主机,一个Host可以配置多个Context。

    3ba1379342200697730dcd503b55141d.png

    StandardHost类是Host接口的标准实现。

    Context容器

    Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。

    df36ddbc5f4af0ff242b90a668454731.png

    StandardContext类是Context接口的标准实现。

    Wrapper容器

    Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。

    0df43ad6428f36517ba978493d014a88.png

    StandardWrapper类是Wrapper接口的标准实现。

    Tomcat重要组件的关系:

    a0347edc87da925d7e3f22632249e8d8.png

    Tomcat 中其它组件

    Tomcat 还有其它重要的组件,如安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。

    Tomncat启动流程

    Tomcat 的 start 方法启动 Tomcat,如果你清楚 Tomcat 的系统架构,你会容易理解 Tomcat 的启动逻辑。Tomcat的启动流程很标准化,入口是BootStrap,统一按照生命周期管理接口Lifecycle的定义进行启动。首先,调用init()方法逐级初始化,接着调用start()方法进行启动,同时,每次调用伴随着生命周期状态变更事件的触发。

    90274044b59305777ba3534555a3d593.png
    展开全文
  • 但,在学习Java多久后,知道它用java写呢? 知道后,有冲动想看看它源码吗?想不想自己用java也写个web服务器玩呢?2010年,网上发现《how tomcat works》。 本书以Tomcat4和5为基础,从最基本HTTP请求和...

    对java程序员来说,tomcat肯定都不会陌生。但,在学习Java多久后,知道它是用java写的呢? 知道后,有冲动想看看它的源码吗?想不想自己用java也写个web服务器玩呢?2010年,网上发现《how tomcat works》。

    本书以Tomcat4和5为基础,从最基本HTTP请求和最简单web服务器例子开始,循序渐进,分解介 绍Tomcat中容器和组件如Engine、Host、Context。另,还详细介绍如何管理Session;Tomcat如何处理配制文件server.xml,如何通过Digester库将XML元素转换为Java对象;如何通过"关闭钩子"优雅地停止服务器。层层深入直至使用JMX技术管理Tomcat中的应用程序。

    每章配有相关内容的例子,既是对理论内容的具体展现,也是帮助读者可以逐步实现自己的Java Web服务器。

    大家在阅读时,应着重把握Tomcat作者的设计思想,在此基础上,再针对具体问题进行深入学习和研究。建议边读书,边看源码(对比Tomcat8代码),更应画UML图和流程图。


    **代码和UML图:**https://github.com/Aresyi/HowTomcatWorks 排版更好的百度电子书https://yuedu.baidu.com/ebook/ac92f0d35122aaea998fcc22bcd126fff7055d60

    转载于:https://my.oschina.net/AresYi/blog/917649

    展开全文
  • 正文开始~~0 1前言Tomcat 服务器一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,开发和调试Servlet、JSP 程序的首选。相信大家对于 Tomcat 已经非常熟悉了,本...

    Hello,这里是经典鸡翅。今天鸡翅老哥带来的是 Tomcat 优化篇。Tomcat 优化所谓是可以用于装逼的利器。也是跳槽面试必问的考点。看完本篇,面试官定会对你刮目相看。正文开始~~

    0 1

    前言

    Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。相信大家对于 Tomcat 已经是非常熟悉了,本篇将介绍tomcat的常见优化。那么为什么要对tomcat进行优化呢。因为Tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。

    0 2

    Tomcat 连接协议优化

    Tomcat 连接器的三种方式:bio、nio 和 apr,三种方式性能差别很大,apr 的性能最优, bio 的性能最差。而 Tomcat 7 使用的 Connector 默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。

    nio如何配置

    进入到tomcat的server.xml找到connector。更改其中的protocol属性即可。修改为如下:

    protocol="org.apache.coyote.http11.Http11NioProtocol"

    apr如何配置

    apr的配置需要安装依赖。

    yum -y install openssl-develyum -y install apr-devel

    安装之后,去tomcat官网下载native组件,native可以看成是tomcat和apr交互的中间环节,下载地址是:http://tomcat.apache.org/download-native.cgi 这里下载最新的版本1.2.10。解压并安装。

    tar -xvzf tomcat-native-1.2.10-src.tar.gzcd tomcat-native-1.2.10-src/native/./configure

    至此apr安装成功,进入server.xml。更改协议将默认的protocol="HTTP/1.1"修改为

    protocol="org.apache.coyote.http11.Http11AprProtocol"。

    0 3

    Tomcat配置文件方面的优化

    配置文件方面是我们主要的tomcat优化的地方。我们将常见的优化直接在配置文件中放置。

    1、connectionTimeout="30000":网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。


    2、enableLookups="false":是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。

    3、disableUploadTimeout="false":上传时是否使用超时机制。

    4、connectionUploadTimeout="150000":上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

    5、acceptCount="300":指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。

    6、keepAliveTimeout="120000":长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时。

    7、maxKeepAliveRequests="1":表示在服务器关闭之前,该连接最大支持的请求数。超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间。

    8、compression="on":是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。

    9、compressionMinSize="2048":表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。

    示例如下:

    "tomcatThreadPool"port="8080" protocol="HTTP/1.1"URIEncoding="UTF-8"connectionTimeout="30000"enableLookups="false"disableUploadTimeout="false"connectionUploadTimeout="150000"acceptCount="300"keepAliveTimeout="120000"maxKeepAliveRequests="1"compression="on"compressionMinSize="2048"redirectPort="8443" />

    0 4

    Tomcat的jvm方面的优化

    找到 catalina.sh 在文件开头增加如下设置:JAVA_OPTS=’-Xms256m-Xmx512m’

    -Xms:表示 Java 初始化堆的大小,-Xms 与-Xmx 设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64,默认(MinHeapFreeRatio参数可以调整)空余堆内存小于 40% 时,JVM 就会增大堆直到 -Xmx 的最大限制。

    -Xmx:表示最大 Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。如何知道我的 JVM 能够使用最大值,使用 java -Xmx512M -version 命令来进行测试,然后逐渐的增大 512 的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,默认值为物理内存的 1/4,默认(MinHeapFreeRatio参数可以调整)空余堆内存大于 70% 时,JVM 会减少堆直到-Xms 的最小限制。

    -Xss:表示每个 Java 线程堆栈大小,JDK 5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。根据应用的线程所需内存大小进行调整,在相同物理内存下,减小这个值能生成更多的线程,但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。一般小的应用, 如果栈不是很深, 应该是128k 够用的,大的应用建议使用 256k 或 512K,一般不易设置超过 1M,要不然容易出现out ofmemory。这个选项对性能影响比较大,需要严格的测试。

    -XX:NewSize:设置新生代内存大小。

    -XX:MaxNewSize:设置最大新生代新生代内存大小。

    -XX:PermSize:设置持久代内存大小。

    -XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代。

    -XX:+AggressiveOpts:作用如其名(aggressive),启用这个参数,则每当 JDK 版本升级时,你的 JVM 都会使用最新加入的优化技术(如果有的话)。

    -XX:+UseBiasedLocking:启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

    -XX:+UseConcMarkSweepGC:设置年老代为并发收集,即 CMS gc,这一特性只有 jdk1.5
    后续版本才具有的功能,它使用的是 gc 估算触发和 heap 占用触发。我们知道频频繁的 GC 会造成 JVM
    的大起大落从而影响到系统的效率,因此使用了 CMS GC 后可以在 GC 次数增多的情况下,每次 GC 的响应时间却很短,比如说使用了 CMS
    GC 后经过 jprofiler 的观察,GC 被触发次数非常多,而每次 GC 耗时仅为几毫秒。

    -XX:+UseParNewGC:对新生代采用多线程并行回收,这样收得快,注意最新的 JVM 版本,当使用 -XX:+UseConcMarkSweepGC 时,-XX:UseParNewGC 会自动开启。因此,如果年轻代的并行 GC 不想开启,可以通过设置 -XX:-UseParNewGC 来关掉。

    -XX:MaxTenuringThreshold:设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过 Survivor 区,直接进入老年代。对于老年代比较多的应用(需要大量常驻内存的应用),可以提高效率。如果将此值设置为一 个较大值,则新生代对象会在 Survivor 区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概率,减少Full GC的频率,这样做可以在某种程度上提高服务稳定性。该参数只有在串行 GC 时才有效,这个值的设置是根据本地的 jprofiler 监控后得到的一个理想的值,不能一概而论原搬照抄。

    -XX:+UseCMSCompactAtFullCollection:在使用 concurrent gc 的情况下,防止 memoryfragmention,对 live object 进行整理,使 memory 碎片减少。

    -XX:+UseFastAccessorMethods:使用 get,set 方法转成本地代码,原始类型的快速优化。

    -Djava.awt.headless=true:这个参数一般我们都是放在最后使用的,这个参数的作用是这样的,有时我们会在我们的 J2EE 工程中使用一些图表工具如:jfreechart,用于在 web 网页输出 GIF/JPG 等流,在 winodws 环境下,一般我们的 app server 在输出图形时不会碰到什么问题,但是在linux/unix 环境下经常会碰到一个 exception 导致你在 winodws 开发环境下图片显示的好好可是在 linux/unix 下却显示不出来,因此加上这个参数以免避这样的情况出现。

    -Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与 jmap -heap 中显示的 New gen 是不同的。整个堆大小 = 新生代大小 + 老生代大小 + 永久代大小。在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的 3/8。

    -XX:NewRatio:年轻代(包括 Eden 和两个 Survivor 区)与年老代的比值(除去持久代),-XX:NewRatio=4 表示年轻代与年老代所占比值为 1:4,年轻代占整个堆栈的 1/5,Xms=Xmx 并且设置了 Xmn 的情况下,该参数不需要进行设置。

    -XX:SurvivorRatio:Eden 区与 Survivor 区的大小比值,设置为 8,表示 2 个 Survivor 区(JVM 堆内存年轻代中默认有 2 个大小相等的 Survivor 区)与 1 个 Eden 区的比值为 2:8,即 1 个 Survivor 区占整个年轻代大小的 1/10。

    -XX:+UseSerialGC:设置串行收集器。

    -XX:+UseParallelGC:设置为并行收集器。此配置仅对年轻代有效。即年轻代使用并行收集,而年老代仍使用串行收集。

    -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集,JDK6.0 开始支持对年老代并行收集。

    -XX:OldSize:设置 JVM 启动分配的老年代内存大小,类似于新生代内存的初始大小 -XX:NewSize。

    0 5

    总结

    看到这的朋友,鸡翅老哥都忍不住夸你一句优秀,快去和同事、面试官吹牛吧。欢迎加群,共同探讨技术。

    2eaa3ff9fd72a005545a72820ba9468b.png

    0fabbfe5f910aea567f11ed661a8c228.png

    在看~

    b62fbf9635b67cc6dcbc5a6d266ffc48.gif

    捧个人场行~

    展开全文
  • 你真会高效在GitHub搜索开源项目吗? chainho 公众号「Tomcat那些事儿」 ​关注他 55 人赞同了该文章 本文首发于微信公众号「Tomcat那些事儿」,关注阅读更多精彩内容。 GitHub流行, GitHub在开源世界...

    你真的会高效的在GitHub搜索开源项目吗?

    chainho

    chainho

    公众号「Tomcat那些事儿」

    ​关注他

    55 人赞同了该文章

    本文首发于微信公众号「Tomcat那些事儿」,关注阅读更多精彩内容。

    GitHub的流行, GitHub在开源世界的受欢迎程度自不必多言。再加上今天,GitHub官方又搞了个大新闻:私有仓库也改为免费使用,这在原来可是需要真金白银的买的。可见微软收购后,依然没有改变 GitHub 的定位,甚至还更进一步。

    花开两朵,各表一枝。我们今天想要聊的并不是 GitHub 多么重要,而是要说一下 GitHub 的搜索功能。

    你在 GitHub上搜索代码时,是怎么样操作的呢?是不是也是像我这样,直接在搜索框里输入要检索的内容,然后不断在列表里翻页找自己需要的内容?

     

     

     

     

    或者是简单筛选下,在左侧加个语言的过滤项。

     

    再或者改变一下列表的排序方式

     

     

    这就是「全部」了吗?

     

    一般的系统检索功能,都会有一个「高级搜索」的功能。需要在另外的界面里展开,进行二次搜索之类的。 GitHub 有没有类似的呢?

     

    答案是「肯定的」。做为一个为万千工程师提供服务的网站,不仅要有,而且还要技术范儿。

    如果我们自己开发一个类似的应用,会怎样实现呢?

    带着思路,咱们一起来看看,GitHub 是怎样做的。

    这里我们假设正要学习 Spring Cloud,要找一个 Spring Cloud 的 Demo 参考练手。

     

     

    1. 明确搜索仓库标题、仓库描述、README

     

    GitHub 提供了便捷的搜索方式,可以限定只搜索仓库的标题、或者描述、README等。

     

    以Spring Cloud 为例,一般一个仓库,大概是这样的

     

     

     

    其中,红色箭头指的两个地方,分别是仓库的名称描述。咱们可以直接限定关键字只查特定的地方。比如咱们只想查找仓库名称包含 spring cloud 的仓库,可以使用语法

     

    in:name 关键词

     

     

     

     

     

    如果想查找描述的内容,可以使用这样的方式:

     

    in:descripton 关键词

     

     

    这里就是搜索上面项目描述的内容。

     

    一般项目,都会有个README文件,如果要查该文件包含特定关键词的话,我想你猜到了

     

    in:readme 关键词

     

     

    2. 明确搜索 star、fork 数大于多少的

     

    一个项目 star 数的多少,一般代表该项目有受欢迎程度。虽然现在也有垃圾项目刷 star ,但毕竟是少数, star 依然是个不错的衡量标准。

     

    stars: > 数字 关键字。

     

    比如咱们要找 star 数大于 3000 的Spring Cloud 仓库,就可以这样

    stars:>3000 spring cloud

     

     

     

     

    如果不加 >= 的话,是要精确找 star 数等于具体数字的,这个一般有点困难。

    如果要找在指定数字区间的话,使用

    stars: 10..20 关键词

     

    fork 数同理,将上面的 stars 换成 fork,其它语法相同

     

     

     

    3. 明确搜索仓库大小的

     

    比如你只想看个简单的 Demo,不想找特别复杂的且占用磁盘空间较多的,可以在搜索的时候直接限定仓库的 size 。

     

    使用方式:

    size:>=5000 关键词

     

    这里注意下,这个数字代表K, 5000代表着5M。

     

    4. 明确仓库是否还在更新维护

     

    我们在确认是否要使用一些开源产品,框架的时候,是否继续维护是很重要的一点。如果已经过时没人维护的东西,踩了坑就不好办了。而在 GitHub 上找项目的时候,不再需要每个都点到项目里看看最近 push 的时间,直接在搜索框即可完成。

     

    元旦刚过,比如咱们要找临近年底依然在勤快更新的项目,就可以直接指定更新时间在哪个时间前或后的

     

    通过这样一条搜索 pushed:>2019-01-03 spring cloud

    咱们就找到了1月3号之后,还在更新的项目。

     

     

     

    你是想找指定时间之前或之后创建的仓库也是可以的,把 pushed 改成 created 就行。

     

    5. 明确搜索仓库的 LICENSE

     

    咱们经常使用开源软件,一定都知道,开源软件也是分不同的「门派」不同的LICENSE。开源不等于一切免费,不同的许可证要求也大不相同。 2018年就出现了 Facebook 修改 React 的许可协议导致各个公司纷纷修改自己的代码,寻找替换的框架。

     

    例如咱们要找协议是最为宽松的 Apache License 2 的代码,可以这样

     

    license:apache-2.0 spring cloud

     

     

     

     

    其它协议就把apache-2.0替换一下即可,比如换成 mit 之类的。

     

    6. 明确搜索仓库的语言

     

    比如咱们就找 Java 的库, 除了像上面在左侧点击选择之外,还可以在搜索中过滤。像这样:

     

    language:java 关键词

     

    7.明确搜索某个人或组织的仓库

     

    比如咱们想在 GitHub 上找一下某个大神是不是提交了新的功能,就可以指定其名称后搜索,例如咱们看下 Josh Long 有没有提交新的 Spring Cloud 的代码,可以这样使用

     

    user:joshlong

     

    组合使用一下,把 Java 项目过滤出来,多个查询之间「空格」分隔即可。

    user:joshlong language:java

     

    找某个组织的代码话,可以这样:

    org:spring-cloud 就可以列出具体org 的仓库。

     

     

     

    这个搜索使用起来是不是相当的便捷? 比起直接搜一个关键词不停的翻页点开找效率高多了吧。 有帮助的话别忘了点个「」支持我。

     

    相关阅读

    怎样参与到全世界优秀的开源项目中?

    怎样努力才能成为一名 JavaChampion

    发布于 2019-01-20

    「真诚赞赏,手留余香

     

    查询最近更新的音乐app

    android music forks:>100 stars:>100  pushed:>2017-01-03

    展开全文
  • Tomcat是什么:JavaWEB服务器,也被称之为JSP/Servlet容器 开源+免费 Tomcat版本:7或8 Tomcat下载与安装 http://tocmat.apache.org 安装:路径中不能存在中文和空格 2.部署TOMCAT,.
  • 因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署首选,几乎每个Java Web开发者都有使用过,但是,你对 Tomcat 整体设计有进行过了解和思考吗...
  • 初探Tomcat的架构设计

    2019-11-25 20:23:35
    Tomcat 作为 servlet 容器实现,它基于 Java 语言开发轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署首选,几乎每个...
  • Tomcat 作为 servlet 容器实现,它基于 Java 语言开发轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署首选,几乎每个...
  • 因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署首选,几乎每个Java Web开发者都有使用过,但是,你对 Tomcat 整体设计有进行过了解和思考吗...
  • Tomcat 作为 servlet 容器实现,它基于 Java 语言开发轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Java 开发应用部署首选,几乎每个...
  • 在eclipse中配置tomcat简直一场灾难! 开源软件确实给开发者极大自由,但,同时也带来额外麻烦. eclipse+tomcat只是其中之一.我有幸碰到了N次,在N+1次时,不得不提笔撰文以为后鉴. 和朋友共同做一个web项目,我们...
  • 你知道如何在Linux平台下安装和使用Tomcat吗?今天,千锋广州云计算老师就给大家详细的介绍一下。...Tomcat服务器部署Tomcat是一个免费的开源的Serlvet容器,与传统的桌面应用程序不同,Tomcat中的应用程序是一个WA...
  • 随着SHOP++正式版推出,JAVA开源技术又向前迈进了一大步... 这款软件采用了典型JSP技术和 Tomcat 服务器软件,JSP 技术 Java 系列技术一部分。JSP 页面被编译成 servlets,并可能调用 JavaBeans 组件(beans...
  •  【IT168 资讯】Google 应用系统引擎最初以 Apache Tomcat 作为其 webserver/servlet 容器,但最终将切换到 Jetty 上。 这个决定让许多开发人员都诧异想问:为什么要做这样改变?Tomcat 有什么问题吗? 我们...
  • 开源的软件+商业的服务=?

    千次阅读 2006-04-10 09:47:00
    其实这道题的答案很简单。很多人认为开源的软件因为其开源所以其免费,拿来用岂不是很节约成本?...可事实这个样子的吗?往往,浮华的背后总会有暗流涌动,开源软件也不例外。这里我们介绍一位BEA的全
  • 今天我们来聊一聊Tomcat,相信大家并不陌生,tomcat是一个免费开源的web应用服务器,属于轻量级的应用程序,在小型生产环境和并发不是很高的场景下被普遍使用,同时也是开发测试JSP程序的首选。也是处理jsp动态请求...
  • 今年来看了 RocketMQ、Kafka、Dubbo 、Tomcat 源码,之前也有读者询问过如何读源码,索性就来分享一下。其实还看了一点点 Linux、Redis、jdk8,这几个阅读目的和上面几个不同,下面会提到。相信通过今天...
  • 此次开源的NS4系列模块围绕当前支付系统笨重、代码耦合度高、维护成本高而产生的分布式业务系统解决方案。NS4系列框架允许创建复杂的流程/业务流,对于业务服务节点的实现可串联,可分布式。其精简、轻量,实现了...
  •  最近郑州这边也兴起了,像北上广面试的时候需要问有技术博客,参与过开源的github项目吗,都30的人了,现在开始写我想也不晚,现在开始吧自己的学习都记录下来,之前很多东西都了解,但是缺少纪录,现在开始纪录吧...
  • <div><p>input URL to index怎么用?如果我要索引硬盘上一个目录里所有文件可以吗?</p><p>该提问来源于开源项目:iboxdb/ftserver</p></div>
  •  apache下一个开源项目,纯java开发,并且只是用来管理java项目 1.2 Maven好处 普通传统项目 Maven项目   分析:maven项目为什么这么小?没有jar。 需要jar吗?肯定需要。没有存在于maven项目...
  • Tomcat 服务器一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,开发和调试Servlet、JSP 程序的首选。相信大家对于 Tomcat 已经非常熟悉了,本篇将介绍tomcat的常
  • <div><p>实现国密https,一定需要两张证书吗?都sm2证书还是怎么样,我在tomcat中遇到错误实在不知道怎么解决了</p><p>该提问来源于开源项目:guanzhi/GmSSL</p></div>
  • Liferay一个出色Java开源Portal产品,其中整合了很多当今流行的开源框架,被不少人使用在实际项目中。最近刚结束了一个基于Liferay Portal项目,总结下使用中一些心得,希望对正在使用Liferay朋友有些帮助...
  • Jsp Tag里有Ext,extjs2.0,而且tomcat5.5下兼容,6.0以上就tld有问题。 Xul只做过Swing,还没试过Web。 Dwr Gwt等,一个太多js,一个太多java,难道web ui最有力不是标记语言吗?? 为...
  • Tomcat是全世界最著名基于Java语言轻量级应用服务器,是一款完全开源免费Servlet容器实现。同时,它支持HTML、JS等静态资源处理,因此又可以作为轻量级Web服务器使用。 套话就不多说了,有好东西就是要...
  • 后面仔细一看,HttpServletRequest不就是tomcat的吗?就决定从tomcat着手,换成了Tomcat9.16,然后跑通了。 虽说开源好,但开源一个大坑。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

tomcat是开源的吗