Tomcat 7 的七大新特性
tomcat概述
tomcat概述Tomcat概述Tomcat是一个开源的Java Servlet容器,由Apache软件基金会开发和维护。
它实现了Java Servlet和JavaServer Pages(JSP)规范,并提供了一个HTTP Web服务器环境,可以让开发人员在其上部署和运行Java Web应用程序。
Tomcat是使用Java语言编写的,因此它可以在任何支持Java虚拟机(JVM)的平台上运行。
Tomcat的特点1. 开源免费:Tomcat是一款完全免费且开源的软件,任何人都可以自由地下载、使用和修改它。
2. 轻量级:Tomcat非常轻量级,只需要很少的系统资源就可以运行,并且它非常容易安装和配置。
3. 易于扩展:Tomcat提供了很多可定制的选项,使得开发人员可以根据自己的需要扩展和定制Tomcat的功能。
4. 稳定可靠:由于Tomcat经过了长时间的测试和改进,因此它非常稳定可靠,并且能够处理大量并发请求。
5. 安全性高:Tomcat提供了很多安全性选项,包括SSL/TLS加密、访问控制、认证等等,使得Web应用程序更加安全可靠。
6. 跨平台性强:由于Tomcat是使用Java语言编写的,因此它可以在任何支持Java虚拟机(JVM)的平台上运行,包括Windows、Linux、Mac OS等等。
Tomcat的架构Tomcat的架构分为三个层次:1. Web层:Web层是Tomcat最外层的一层,它负责处理HTTP请求和响应,并将请求转发给下一层进行处理。
2. Servlet/JSP容器层:Servlet/JSP容器层是Tomcat中间的一层,它负责管理Servlet和JSP组件,并将它们编译成可执行代码。
此外,Servlet/JSP容器还负责管理会话、Cookie、请求转发等功能。
3. 连接器/底层服务层:连接器/底层服务层是Tomcat最底部的一层,它负责处理网络连接和数据传输。
连接器/底层服务可以使用不同的协议来处理网络连接,比如HTTP、HTTPS、AJP等等。
CA Clarity
Studio 内容管理 ........................................................................................................................................................11 Microsoft Project Interface ........................................................................................................................................11 与 VersionOne 集成 ...................................................................................................................................................12 智能部分 .................................................................................................................................................................... 12 Apache Tomcat 日志分析..........................................................................................................................................13
tomcat版本区别
Tomcat 6.x 在目录结构上就是针对lib包的存放位置做了调整,使应用部署更加方便。另外:
Tomcat 6.x中endorsed 从CATALINA_HOME/common移到根目录下了CATALINA_HOME\endorsed 至于其它没有太大的变化。
另外需要说明的是tomcat 5.x有目录CATALINA_HOME\conf\Catalina\localhost
在Tomcat 6.x中该目录是空的就没给你建,你可以自己建。有好几个朋友问我这个问题了,这里给你提*****************************************
Tomcat 5.x
Tomcat 5.x 基于Tomcat 3.x,Tomcat 4.x,遵循新的servlet2.4、jsp2.0规范。他最大的特点就是支持JDK5.0。Tomcat 5.x 是个总结、改进版本,因为有了3.x,4.x作基础,加上使用JDK5.0,使Tomcat在性能上有了突飞猛进的发展,备受大家欢迎。
Tomcat 6.x
Tomcat 6.x是目前的最新版本了。遵循新的servlet2.5、jsp2.1。该版本增加了很多新特性。主要有:
高级的IO功能:采用APR或NIO HTTP连接进行异步IO操作
组件功能:可以使用ant -f extras.xml的方式为tomcat添加新的组件。
另外一个我感觉变化很大的是Tomcat 6.x目录发生了很的变化,lib 目录都集中到一起放在跟目录下,jar包也简洁多了(从数量上^_^)
********************************************************************
Tomcat7.0启动报错java.lang.NoClassDefFoundError orgapachejuliloggingLogFactory
Tomcat无法启动,报错ng.NoClassDefFoundError:org/apache/juli/logging/LogFactory前面一段时间看到Tomcat7.0发布了几个测试版,由于没有稳定,也就没有测试了,今天看到新闻,看到Tomcat7.0正式版已经发布了,到官网上下载下来,看看效果如何。
下面列出Tomcat 7的一些新特性介绍:◆Tomcat 7完全支持Servlet 3.0规范◆Tomcat 7新增了对Java注释的支持◆Tomcat 7通过web.xml动态配置引用类库的功能◆Tomcat 7改进了安全回话的跟踪◆Tomcat 7改进了关系服务时候的功能,让关闭时的地址可以配置◆Tomcat 7改进了启动类,目前Tomcat 7启动过程无须任何配置文件◆Tomcat 7新增了配置参数,可以配置Tomcat 7的执行队列超时时间,和执行大大小限制… …新特性带来的是方便和更好地支持Java新特性。
感觉Tomcat7 对Servlet3.0的支持和Java Annotaion的支持是应现在流行0配置或尽量减少配置文件的需要,Servlet3.0 的到来,感觉最深地是带来直接在code level 直接Annotation即可配置一个Servlet,并不需要以前的在web.xml下配置了。
下载Tomcat7.0后,和MyEclipse进行整合,MyEclipse配置Tomcat7.0如下图发现在启动的时候报了一个错误ng.NoClassDefFoundError: org/apache/juli/logging/LogFactoryatorg.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:55) Caused by: ng.ClassNotFoundException:org.apache.juli.logging.LogFactoryat .URLClassLoader$1.run(URLClassLoader.java:202)at java.security.AccessController.doPrivileged(Native Method)at .URLClassLoader.findClass(URLClassLoader.java:190)at ng.ClassLoader.loadClass(ClassLoader.java:307)at uncher$AppClassLoader.loadClass(Launcher.java:301) at ng.ClassLoader.loadClass(ClassLoader.java:248)... 1 moreException in thread "main"到网上搜索了一下,比较好解决,有个网址/programming-world/java-lang-noclassdeffounderror-orga pachejulilogginglogfactory-at-org-apache-catalina-startup-bootstrap上说Solutions1. In Eclipse, Open the “Server” tab.2. Double click on the “Tomcat6″ entry to see the configuration.3. Then click on the “Open launch configuration” link in the “General information” block.4. In the dialog, select the “Classpath” tab.5. Click the “Add external jar” button.6. Select the file “/usr/share/tomcat6/bin/tomcat-juli.jar”7. Close the dialog.8. Start tomcat 6 from Eclipse.实际上,就是把bin/tomcat-juli.jar 下add tomcat classpath下,效果如下:重新启动Tomcat7.0,发现启动成功。
tomcat 作用
tomcat 作用Tomcat是一个流行的开源的Java Servlet容器,它主要用于将java代码运行在服务器上。
它是一个轻量级的应用服务器,拥有灵活的配置和管理方式,使得开发者可以很容易地部署、管理和扩展Java Web应用程序。
首先,Tomcat作为一个Servlet容器,它能够处理和执行Servlet和JSP(Java Server Pages)的代码。
Servlet是一个Java类,用于处理HTTP请求和响应,并且可以动态地生成HTML内容。
通过Tomcat,开发者可以在服务器上运行和管理Servlet,使得他们可以创建动态的Web应用程序,如社交媒体平台、电子商务网站等。
此外,Tomcat还具有良好的性能和可靠性。
它采用了线程池和连接池等技术,使得它可以处理大量并发的请求,并且能够有效地管理内存和资源。
此外,Tomcat还支持负载均衡和集群技术,使得多个Tomcat服务器可以协同工作,提供更高的性能和可用性。
Tomcat还提供了一种安全的访问控制机制,可以保护Web应用程序免受未经授权的访问和攻击。
它提供了基于用户角色(role-based)的访问控制,可以限制用户对资源的访问权限,并且可以通过SSL/TLS协议实现安全的通信。
另外,Tomcat还提供了一些其他的功能和工具,使得开发者可以更方便地进行开发和调试。
例如,它可以与Eclipse和IntelliJ等集成开发环境(IDE)一起使用,方便开发者编写和调试Java Web应用程序。
此外,Tomcat还支持JMX(Java Management Extensions)技术,使得管理员可以监控和管理Tomcat服务器的运行状态。
总结来说,Tomcat是一个功能强大且灵活的Java Servlet容器,它提供了一种方便的方式来部署、管理和扩展Java Web应用程序。
它具有良好的性能和可靠性,支持安全的访问控制,同时还提供了丰富的开发和调试工具。
记一次tomcat7.0版本启动项目失败问题
记⼀次tomcat7.0版本启动项⽬失败问题测试项⽬在tomcat7中启动失败,报错如下:@794314bc3Error during job execution (jobs.Bootstrap)Oops: VerifyError~ play.Logger.niceThrowable(Logger.java:570) ~ play ~ 35845play.exceptions.UnexpectedException: Unexpected Errorat play.Invoker$Invocation.onException(Invoker.java:244)at play.jobs.Job.onException(Job.java:124)at play.jobs.Job.call(Job.java:163)at Invocation.Job(Play!)Caused by: ng.VerifyError: Expecting a stack map frameException Details:Location:controllers/payment/PaymentBaseAction.check()V @23: nopReason:Expected stackmap frame at this location.Bytecode:0000000: b804 1c00 b801 8c9a 00121301 8e03 bd000000010: 6bb8 0190 a700 c700 b1b8 0192 b800 794b0000020: 1304 152a b804 1700 2ab6 009e 3c13 04180000030: 1bb8 041a 001b aa00 00000097000000000000040: 00000004000000220000 007f 000000850000050: 0000 008b 00000091 2a4d 014e 2c13 02a20000060: 1302 a413 02a6 b802 aac0 004f 4e2d b8000000070: 4999 003e 2a4d 033e 2c13 02ab 1302 ac130000080: 02ae b802 b0c0 0141 b602 b33e 1d99 00220000090: 2a4d 014e 2c13 02b4 1302 b513 02b7 b80200000a0: b9c0 004f 4e2d b800 22990006 b800 acb800000b0: 00af a700 1bb8 00b2 a700 15b8 00b5 a70000000c0: 0fb8 00b8 a700 09b8 00bb a700 03a7 000e00000d0: 3a06 013a 05b8 041e 1906 bf01 3a05 b80400000e0: 20b1Exception Handler Table:bci [0, 208] => handler: 208Stackmap Table:same_frame(@25)append_frame(@88,Object[#122])chop_frame(@175,1)same_frame(@181)same_frame(@187)same_frame(@193)same_frame(@199)same_frame(@205)same_locals_1_stack_item_frame(@208,Object[#978])same_frame(@219)at payment.PaymentProxy.init(PaymentProxy.java:60)at jobs.Bootstrap.initPayment(Bootstrap.java:64)at jobs.Bootstrap.doJob(Bootstrap.java:54)at play.jobs.Job.doJobWithResult(Job.java:50)at play.jobs.Job.call(Job.java:146)... 1more原因:jvm验证时出了错误:显⽰字节码错误:⽹上的解释是因为引⼊版本为51的字节码规范,使⽤了严格的类型检查器,任何⼯具修改了字节码的,都需要更新stackmap,但是jws修改了字节码,⽽没有更新 stackmap使⽤了即java的新特性,所以使⽤较⾼的版本进⾏编译时就会报这个错。
【每日一步】Tomcat7的七大特性新特性与增强功能
Tom cat 7的七大特性:新特性与增强功能作者:Avneet Mangat1. 使用随机数令牌(nonce)来阻止跨站请求伪造(CSRF)攻击Webopedia(在线计算机字典)这样定义跨站请求伪造(CSRF):“一种恶意攻击基于web的应用程序。
一次典型的恶意攻击将迫使用户在登录可信任站点的时候执行一些不必要的操作。
”对CSRF更形象的定义是session riding(子乌注:好吧,这个“更形象”的定义我实在看不懂……可参看session riding)。
阻止CSRF的典型做法就是使用随机数令牌,在wikipedia中对它的定义是“一个用于认证协议的随机或伪随机数,以确保老的通信不会在重播攻击中被复用。
”Tom cat 7 有一个servlet过滤器,用于在每次提交请求之后在用户的会话中保存一个随机数令牌。
这个随机数令牌必须添加到后续的每一个请求中做为一个请求参数。
这个servlet过滤器会检测这个请求参数是否与存储于用户会话中的随机数令牌一致。
如果一致,请求就只能是来自指定站点。
如果不同,这个请求会被认为是来自不同的站点并被拒绝。
servlet过滤器非常简单。
这里有一个相关源码(来自Apache Software Foundation CsrfPreventionFilter 文档)的片断:Language: Javapublic class CsrfPreventionFilter extends FilterBase {.........public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {.........String previousNonce = req.getParam eter(Constants.CSRF_NONCE_REQUEST_PARAM);String expectedNonce =(String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME );if (expectedNonce != null && !expec tedNonce.equals(previousNonce)) {res.sendError(HttpServletResponse.SC_FORBIDDEN);return;}String newNonce = generateNonce();req.getSession(true).setAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME, newNonce);.........所以每个URL都必须包含一个从用户会话中获取的随机数令牌。
软件使用说明书
软件使⽤说明书软件使⽤说明书题⽬:基于java的宅急送系统学院:数据科学与软件⼯程学院专业:软件⼯程(服务外包)姓名:熊鸿瀚指导教师:杜娜摘要随着都市化⽣活节奏的加快,许多上班族没有时间外出就餐,⽽外卖则成了他们的⾸选。
我国外卖市场⼴阔,⽤户需求⾜够强,⽤户黏度够⾼,同时能给商家带来低固定成本的额外收⼊。
⼀到午饭时间,在各⼤写字楼⾥,都能看到送餐者的⾝影。
事实上,“叫外卖”如今已成为众多消费者,尤其是年轻上班族习以为常的餐饮⽅式。
同时“叫外卖”不仅受上班族的青睐,每逢节假⽇,也有不少⼈在家⾥等⼈送餐上门,另外还有⼀些茶馆、服装店等服务⾏业,由于⼯作需要,也经常叫外卖。
⽽对校园⾥的⼤学⽣来说,⽤APP点外卖是既能省去到饭堂排队的时间,⼜菜式选择多样,价格优惠的点餐⽅式。
究其根本,外卖这个事情切中⼈性“懒惰”的需求。
关键词⽣活节奏、叫外卖、价格优惠⽬录软件使⽤说明书............................................................. 1摘要..................................................................... 2⽬录....................................................................... 31 绪论................................................................... 5Abstract ................................................................... 52 系统的开发环境........................................................... 62.1 系统开发环境...................................................... 62.2 对技术⽅法的总结.................................................. 63 系统总体设计............................................................. 73.1 总体功能模块....................................................... 73.2管理员的功能模块................................................... 73.3⽤户的功能模块..................................................... 83.4系统业务描述....................................................... 93.5程序流程图....................................................... 104系统详细设计与实现..................................................... 114.1系统和数据库的配置............................................... 114.2概念模型设计..................................................... 114.3平台数据表的设计................................................. 125系统功能实现........................................................... 155.1程序的时序图..................................................... 155.1.1餐饮模块时序图.............................................. 155.1.2分类模块时序图.............................................. 165.1.3公告模块时序图.............................................. 175.1.4⽤户模块时序图.............................................. 185.2系统功能实现的主要框架........................................... 185.2 SSH框架..................................................... 185.3系统功能实现的主要模块........................................... 195.3.1 管理员登录页⾯.............................................. 195.3.2 公告管理页⾯................................................ 205.3.3 餐饮管理页⾯................................................ 205.3.4 订单管理页⾯................................................ 215.3.5 留⾔管理页⾯................................................ 225.3.6 会员管理页⾯................................................ 226系统的调试与测试....................................................... 226.1软件测试的⽬的................................................... 226.2软件测试的任务................................................... 236.3测试环境......................................................... 236.4测试计划与结果................................................... 24结束语................................................................... 24致谢..................................................................... 251 绪论民以⾷为天,中国的第三产业在经济危机中独树⼀帜出现了⼤逆转,提升速度也是⾮常的惊⼈,餐饮⾏业也出现了各种模式的经营,为了⽅便⾜不出户就能享受到美⾷的⾷客来说,⽹络订餐⽆疑是最直接的选择。
tomcat通俗易懂的说法
tomcat通俗易懂的说法Tomcat是Apache软件基金会开发的一款免费开放源代码的Web应用服务器,它可以运行大多数的JSP和Servlet容器。
Tomcat有不同版本,但是其主要功能都是相同的,即在一个Web服务器上运行Java应用程序。
Tomcat是一款用于支持Java Servlet和JavaServer Pages (JSP)的开源Web服务器,它是Apache Software Foundation的一部分。
因此,它通常称为Apache Tomcat。
Apache Tomcat也可以作为HTTP代理服务器或反向代理服务器使用,但它主要是作为Web应用服务器而被广泛使用。
Tomcat的基本功能是提供一个Servlet容器来支持Java Web应用程序,包括JavaServer Pages(JSPs)和Web服务。
它可以被看作是一个Web应用服务器的运行时环境,它提供了用于运行Web应用程序的所有工具和类库。
Tomcat有两种部署方式,即独立和集成模式。
在独立模式下,Tomcat服务器是一个单独的应用程序,它可以运行在任何Java Web容器上。
在集成模式下,Tomcat服务器将与另一个Web服务器,如Apache HTTP服务器,一起运行,以使用Tomcat容器处理Servlet和JSP请求。
Tomcat支持多种流行的Java应用程序技术,包括Servlet、JavaServer Pages、Java Expression Language 和WebSocket。
它还支持多个Web应用程序框架,如Struts、Spring MVC和JSF,以及其他一些功能强大的Web 应用程序技术。
Tomcat的特性和功能特别强大,它可以实现应用程序的负载均衡、安全性控制和容错性,并且可以被部署在多个平台上,包括Windows、Linux和Mac OS X。
总的来说,Tomcat是一款用于支持Java Servlet和JSP的开源Web服务器,它可以提供许多强大的功能,支持多个平台,提供应用程序的负载均衡、安全性控制和容错性,是一款非常实用的Web服务器。
tomcat7.0运行过程解析
tomcat7.0运行过程解析一、接口和类概况.apache.catalina .Lifecycle接口:表示组件生命周期(1)签名:public interface Lifecycle(2) 基本流程:NEW-->init(INITIALIZING-->INITIALIZED)-->start(STARTING_PREP-->STARTING-->STARTED)-->stop(STOPPING_PREP-->STOPPING-->STOPPED)-->destroy(DESTROYING-->DESTROYED)Start,stop分三个阶段,init,destroy分两个阶段。
(2)阶段之间的跳转关系图(来自源代码):(3)声明的方法:public void addLifecycleListener(LifecycleListener listener)public LifecycleListener[] findLifecycleListeners();public void removeLifecycleListener(LifecycleListener listener);public void init() throws LifecycleException;public void start() throws LifecycleException;public void stop() throws LifecycleException;public void destroy() throws LifecycleException;public LifecycleState getState();public String getStateName();.apache.catalina.util. LifecycleSupport类:为Lifecycle的实现提供支持,简化Lifecycle的实现(1)签名:public final class LifecycleSupport(2)构造函数:public LifecycleSupport(Lifecycle lifecycle) {super();this.lifecycle = lifecycle;}(3)已实现public void addLifecycleListener(LifecycleListener listener)public LifecycleListener[] findLifecycleListeners()public void fireLifecycleEvent(String type, Object data)public void removeLifecycleListener(LifecycleListener listener).apache.catalina.util.LifecycleBase 类:实现了Lifecycle接口,完成大部分通用业务(1)签名:public abstract class LifecycleBase implements Lifecycle(2)重要成员:private LifecycleSupport lifecycle = new LifecycleSupport(this); 利用它完成Lifecycle接口的实现private volatile LifecycleState state = LifecycleState.NEW; 初始状态(3)定义抽象方法initInternal,startInternal,stopInternal,destroyInternal(4)实现了生命周期方法init,start,stop,destroy,并在实现内部分别调用对应的initInternal,startInternal,stopInternal,destroyInternal方法,以便子类可以增加个性化的业务逻辑(5)把生命周期方法执行的过程分阶段,并调用阶段设置方法setStateInternal设置相应阶段,在setStateInternal的内部调用fireLifecycleEvent(lifecycleEvent, data)来触发生命周期事件.apache.catalina.util.LifecycleMBeanBase 类:实现对Lifecycle对象的JMX管理(1)签名:public abstract class LifecycleMBeanBase extends LifecycleBase implements MBeanRegistration(2)主要是在initInternal中调用register(this, getObjectNameKeyProperties());在destroyInternal中调用unregister(oname)。
tomcat与resin
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。
由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。
因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
目前最新版本是7.0。
Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
Apache Tomcat 6.x在汲取 Tomcat 5.5.x优点的基础上,实现了Servlet 2.5和JSP 2.1等特性的支持。
Apache Tomcat 7.x是目前的开发焦点,仍基于Apache Software License v2.0标准,同时也是自2006年以来的首个主要发布版本。
它在汲取了Tomcat 6.0.x优点的基础上,实现了对于Servlet 3.0、JSP 2.2和Expression Language(EL)2.2等特性的支持。
除此以外的改进列表如下:• Web应用内存溢出侦测和预防• 增强了管理程序和服务器管理程序的安全性• 一般CSRF保护• 支持web应用中的外部内容的直接引用• 重构(connectors, lifecycle)及很多核心代码的全面梳理Resin是CAUCHO公司的产品,是一个非常流行的支持servlets 和jsp 的引擎,速度非常快。
Resin本身包含了一个支持HTTP/1.1的WEB服务器。
虽然它可以显示动态内容,但是它显示静态内容的能力也非常强,速度直逼APACHE SERVER。
Servlet工作原理解析
Servlet⼯作原理解析Tomcat中真正管理Servlet的是Context容器,⼀个Context对应⼀个Web⼯程,在Tomcat的配置⽂件中可以很容易发现:<Context path-"" docBase="" reloadable="true"/>Tomcat7开始⽀持嵌⼊式⽅式,通过添加⼀个启动类org.apache.catalina.startup.Tomcat,创建⼀个这个类的实例对象并调⽤start⽅法就可以很容易启动Tomcat(SpringBoot的内嵌Tomcat容器启动⼤概就基于此),还可以通过这个对象来添加和修改Tomcat的配置参数,如动态添加Context,Servlet 等Servlet容器启动过程添加⼀个Web应⽤时将会创建⼀个StandardContext对象,这个对象就是Tomcat中管理Servlet的Context具体对象了。
并且会给这个容器对象设置必要的参数,如url和path分别对应这个应⽤在Tomcat中的访问路径和这个应⽤实际的物理路径Tomcat的启⽤逻辑是基于观察者模式设计的,所有的容器都会继承Lifecycle(⽣命周期)接⼝,它管理着容器的整个⽣命周期,所有容器的修改和状态的改变都会由它去通知已经注册的观察者(Listener)Web应⽤的初始化⼯作Web应⽤的初始化⼯作是在ContextConfig的configureStart⽅法中实现的,引⽤⽤的初始化主要是解析web.xml⽂件,这个⽂件描述了⼀个Web 应⽤的关键信息,也是⼀个Web应⽤的⼊⼝web.xml⽂件中的各个配置项会被解析成相应的属性保存在WebXml对象中,如果当前的应⽤⽀持Servlet3.0还会完成⼀些额外的操作,这些操作主要是Servlet3.0新特性的解析以及对annotations注解的⽀持接下来将WebXml对象中的属性设置到Context容器中,当然这⾥包括创建Servlet对象,Filter,Listener等在Tomcat中Servlet会被包装成StandardWrapper,这是因为StandardWrapper是Tomcat容器的⼀部分,具有容器的特性,⽽Servlet作为独⽴的Web开发标准,不应该强耦合在Tomcat⾥,这⾥主要是为了解耦除了将Servlet包装成StandardWrapper并作为⼦容器添加到Context外,其他所有的web.xml属性都被解析到Context中,所以说Context才是真正运⾏Servlet的地⽅⼀个Web应⽤对应⼀个Context容器,容器的配置属性由应⽤的web.xml指定创建Ser vlet实例创建Se r v le t对象如果Servlet的load-on-startup配置项⼤于0,那么在Context容器启动时就会被实例化在Tomcat的conf下的web.xml⽂件(默认配置⽂件)定义了两个Servlet,分别是org.apache.catalina.servlets.DefaultServlet和org.apache.jasper.servlet.JspServlet。
绿色版Tomcat7.0配置文档
绿色版TOMCAT 7.0安装配置手册一、安装JDK 1.71、添加环境变量:在我的电脑->属性->高级->环境变量2、新建系统变量,变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 (JDK的安装目录)3、在原有的系统变量Path后面加上英文分号,再添加%JAVA_HOME%\bin;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\jre\bin; 不要删除原来的。
看清楚,它们之间的分号,是英文的分号。
4、重启电脑生效(因为添加的是系统变量,如果你的系统是win7,则不需要重启)。
5、测试JDK是否安装成功,运行->cmd ->D: 进入D盘,输入javac 看能否出来很多命令,出来则说明JDK配置成功。
二、Tomcat 7.0的安装配置1、Tomcat 7.0 的免安装版的配置(假如将Tomcat 解压到C:\Program Files 目录,目录结构为:C:\Program Files\apache-tomcat-7.0.112、添加环境变量:在我的电脑->属性->高级->环境变量3、新建系统变量,(1)变量名:CATALINA_HOME 变量值:C:\ProgramFiles\apache-tomcat-7.0.11 (Tomcat 解压到的目录)。
(2) 变量名:CATALINA_BASE 变量值:C:\ProgramFiles\apache-tomcat-7.0.11 (Tomcat 解压到的目录)。
(3) 变量名:TOMCAT_HOME 变量值:C:\ProgramFiles\apache-tomcat-7.0.11 (Tomcat 解压到的目录)。
4、在系统变量Path的最后面添加%CATALINA_HOME%\lib;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_H OME%\lib\jsp-api.jar注意它们之间的分号,一定是英文的分号。
简述tomcat工作原理
简述tomcat工作原理
Tomcat是一个开源的Java Servlet容器,它充当了一个Web服务器的角色,并能够托管Java的Web应用程序。
Tomcat的工
作原理可以简述如下:
1. Tomcat启动时,会读取配置文件,如server.xml和web.xml。
这些配置文件包含了Tomcat的各种设置,如端口号、虚拟主
机配置、Servlet和其他Web应用程序的部署信息等。
2. Tomcat监听指定的端口号(默认为8080),等待客户端的
连接请求。
3. 当有客户端请求访问Tomcat时,Tomcat接收到请求后,会
根据请求的URL路径找到对应的Web应用程序。
4. Tomcat会按照配置文件中的规则,将请求交给对应的Servlet进行处理。
Servlet是Java编写的,用于处理客户端的HTTP请求和生成HTTP响应的组件。
5. Servlet会根据客户端的请求进行处理,并生成相应的HTTP
响应,然后将响应返回给Tomcat。
6. Tomcat将HTTP响应发送给客户端,完成一次请求-响应周期。
7. Tomcat会维护一个线程池,用于处理多个并发请求。
这样
可以提高性能和响应速度。
总之,Tomcat作为Java Servlet容器,通过监听端口、解析请求、调用相应的Servlet和返回响应等步骤,实现了Web应用程序的运行。
它可以处理并发请求,提供了稳定和高效的Web服务。
jdk1.7
JDK 1.7简介Java Development Kit(JDK)是一种包含了用于开发、编译和运行Java应用程序的软件包。
JDK 1.7(Java Development Kit 1.7)是Java平台的一个重要版本,于2011年7月28日发布。
JDK 1.7引入了许多新功能和改进,给开发者提供了更强大的工具和性能。
主要特性1. Switch语句改进在JDK 1.7之前,Switch语句只支持整数、字符和枚举类型的比较。
而JDK 1.7引入了对字符串类型的支持,开发者可以使用字符串作为Switch语句的条件,这样就能够更加简洁和灵活地处理不同的情况。
2. 泛型实例化类型自动推断在JDK 1.7之前,使用泛型需要在实例化对象时指定类型,然而这会导致代码过于冗长。
而JDK 1.7引入了菱形操作符(Diamond Operator),可以根据上下文自动推断出泛型的类型,简化了代码的书写。
例如,在JDK 1.7之前,我们需要这样实例化一个ArrayList对象:List<String> list = new ArrayList<String>();而在JDK 1.7及以后的版本,我们可以省略泛型类型,直接写成:List<String> list = new ArrayList<>();3. try-with-resources语句在JDK 1.7之前,处理带资源的情况(如文件IO、数据库连接等)需要显式地关闭资源。
而JDK 1.7引入了try-with-resources语句,可以更方便地自动关闭资源,避免了忘记关闭资源而导致的内存泄漏等问题。
try-with-resources语句的语法结构如下:try (Resource r = new Resource()) {// 执行操作} catch (Exception e) {// 异常处理}4. 数字字面量改进JDK 1.7对数字字面量进行了改进,支持以下划线分隔的数字表示,使得数字更加易读。
windows7下配置tomcat7.0
一、JDK的安装:1.JDK可从以下位置获取:百度JA V A SDK(1.7版本)2.下载后直接安装,按默认就可3.配置环境变量,在我的电脑->属性->高级->环境变量4.新建系统变量,变量名:JA V A_HOME 变量值:C:\Program Files\Java\jdk1.7.0(JDK的安装目录)5.在原有的系统变量Path后面加上英文分号,再添加%JA V A_HOME%\bin;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\jre\bin; 不要删除原来的。
看清楚,它们之间的分号,是英文的分号。
6.重启电脑生效(因为添加的是系统变量,如果你的系统是win7,则不需要重启)。
7.测试JDK是否安装成功,运行->cmd ->D: 进入D盘,输入javac 看能否出来很多命令,出来则说明JDK配置成功。
8.二、Tomcat7的配置:1.下载tomcat:TOMCA T官网可选择Full documentation2.添加环境变量:在我的电脑->属性->高级->环境变量3.新建系统变量,变量名:CA TALINA_HOME 变量值:C:\ProgramFiles\apache-tomcat-7.0.11 (Tomcat 解压到的目录)。
4.在系统变量Path的最后面添加%CA TALINA_HOME%\lib;%CA TALINA_HOME%\lib\servlet-api.jar;%CA TALINA_HOME%\lib\jsp-api.jar 注意它们之间的分号,一定是英文的分号。
5.Tomcat 7.0的管理员的配置,进入C:\Program Files\apache-tomcat-7.0.11(Tomcat目录)下的conf目录,编辑tomcat-users.xml,找到最后的:<!--<role rolename="tomcat"/><role rolename="role1"/><user username="tomcat" password="tomcat" roles="tomcat"/><user username="both" password="tomcat" roles="tomcat,role1"/><user username="role1" password="tomcat" roles="role1"/>-->即可配置管理员信息。
tomcat
举个例子,如果我们想部署一个名叫MyWebApp.
(Virtual Hosts)
关于server.xml中“Host”这个元素,只有在设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务 器上服务多个域名的机制,对每个域名而言,都好象独享了整个主机。实际上,大多数的小型商务网站都是采用 虚拟主机实现的,这主要是因为虚拟主机能直接连接到Internet并提供相应的带宽,以保障合理的访问响应速度, 另外虚拟主机还能提供一个稳定的固定IP。
tomcat
Web应用服务器
01 名称由来
0 配置方法 06 安全启动
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由 Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是 能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定, 而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web应用服务器。
名称由来
Tomcat最初是由Sun的软件架构师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡 献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素 描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为 Tomcat(英语公猫或其他雄性猫科动物)。而O'Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8)的封 面也被设计成了一个公猫的形象。而Tomcat的Logo兼吉祥物也被设计为一只公猫。
tomcat 日志 端口 域名 支持的文件格式配置
Tomcat的配置1 Tomcat 日志信息分为两类:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息。
1.1 问题tomcat每次启动时,自动在logs目录下生产以下日志文件,且每天都会生成对应日期的一个文件,造成日志文件众多:localhost.2012-07-05.txtcatalina.2012-07-05.txtmanager.2012-07-05.txthost-manager.2012-07-05.txt1.2目的Tomcat以上日志都输出到同一个文件中。
1.3修改步骤打开Tomcat目录conf\logging.properties,修改如下,所有日志输出到tomcat 开头的文件中.apache.juli.FileHandler.level = FINE.apache.juli.FileHandler.directory = ${catalina.base}/logs# .apache.juli.FileHandler.prefix = catalina..apache.juli.FileHandler.prefix = tomcat..apache.juli.FileHandler.level = FINE.apache.juli.FileHandler.directory = ${catalina.base}/logs# .apache.juli.FileHandler.prefix = localhost..apache.juli.FileHandler.prefix = tomcat..apache.juli.FileHandler.level = FINE.apache.juli.FileHandler.directory = ${catalina.base}/logs# .apache.juli.FileHandler.prefix = manager..apache.juli.FileHandler.prefix = tomcat..apache.juli.FileHandler.level = FINE.apache.juli.FileHandler.directory = ${catalina.base}/logs# .apache.juli.FileHandler.prefix = host-manager..apache.juli.FileHandler.prefix = tomcat.2是访问日志信息,它记录的访问的时间,IP ,访问的资料等相关信息。
Apache2.4+Tomcat7.0整合配置详解
Apache2.4+Tomcat7.0整合配置详解⼀、简单介绍 Apache、TomcatApache HTTP Server(简称 Apache),是 Apache 软件基⾦协会的⼀个开放源码的⽹页服务器,可以在 Windows、Unix、Linux 等操作系统中运⾏是最流⾏的Web服务器软件之⼀。
Apache 反应速度快,运⾏效率⾼,但只⽀持HTML等静态页⾯(加载插件后也可⽀持 PHP 页⾯)。
Apache Tomcat 是由 Apache 软件基⾦协会与 Sun 公司联合开发的⼀款Web服务器,它除了⽀持HTML等静态页⾯外,还⽀持JSP、Servlet 。
在相同的运⾏环境下,Tomcat 对静态页⾯的反应速度没有 Apache 灵敏,整合 Apache 与 Tomcat 能使系统运⾏于⼀个良好环境下,提⾼系统效率。
⼆、软件包下载运⾏环境:Windows 7Apache 2.4 下载:Tomcat 7.0 下载:JDK 6 下载:mod_jk.mo 连接包下载:下载mod_jk时⼀定要看清版本,下载对应的版本如果已有tomcat和jdk,则不⽤另外下载三、Apache 2.4 安装下载的apache2.4如下图所⽰,直接解压到D:\apache-httpd修改⽂件D:\apache-httpd\conf\httpd.conf,端⼝改为8000,程序⽬录指定为E:\apache-tomcat-7.0.50\webapps\ROOT(即tomcat程序所在⽬录,此⽬录可以修改)ServerRoot "D:/apache-httpd"## Mutex: Allows you to set the mutex mechanism and mutex file directory# for individual mutexes, or change the global defaults## Uncomment and change the directory if mutexes are file-based and the default # mutex file directory is not on a local disk or is not appropriate for some# other reason.## Mutex default:logs## Listen: Allows you to bind Apache to specific IP addresses and/or# ports, instead of the default. See also the <VirtualHost># directive.## Change this to Listen on specific IP addresses as shown below to# prevent Apache from glomming onto all bound IP addresses.##Listen 12.34.56.78:80Listen 8000## Dynamic Shared Object (DSO) Support## To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the# directives contained in it are actually available _before_ they are used.# Statically compiled modules (those listed by `httpd -l') do not need# to be loaded here.## Example:# LoadModule foo_module modules/mod_foo.so#LoadModule access_compat_module modules/mod_access_compat.so LoadModule actions_module modules/mod_actions.soLoadModule alias_module modules/mod_alias.soLoadModule allowmethods_module modules/mod_allowmethods.so LoadModule asis_module modules/mod_asis.soLoadModule auth_basic_module modules/mod_auth_basic.so#LoadModule auth_digest_module modules/mod_auth_digest.so#LoadModule auth_form_module modules/mod_auth_form.so#LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_core_module modules/mod_authn_core.so#LoadModule authn_dbd_module modules/mod_authn_dbd.so#LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_file_module modules/mod_authn_file.so#LoadModule authn_socache_module modules/mod_authn_socache.so#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule authz_core_module modules/mod_authz_core.so#LoadModule authz_dbd_module modules/mod_authz_dbd.so#LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_host_module modules/mod_authz_host.so#LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule autoindex_module modules/mod_autoindex.so#LoadModule buffer_module modules/mod_buffer.so#LoadModule cache_module modules/mod_cache.so#LoadModule cache_disk_module modules/mod_cache_disk.so#LoadModule cache_socache_module modules/mod_cache_socache.so#LoadModule cern_meta_module modules/mod_cern_meta.so LoadModule cgi_module modules/mod_cgi.so#LoadModule charset_lite_module modules/mod_charset_lite.so#LoadModule data_module modules/mod_data.so#LoadModule dav_module modules/mod_dav.so#LoadModule dav_fs_module modules/mod_dav_fs.so#LoadModule dav_lock_module modules/mod_dav_lock.so#LoadModule dbd_module modules/mod_dbd.so#LoadModule deflate_module modules/mod_deflate.soLoadModule dir_module modules/mod_dir.so#LoadModule dumpio_module modules/mod_dumpio.soLoadModule env_module modules/mod_env.so#LoadModule expires_module modules/mod_expires.so#LoadModule ext_filter_module modules/mod_ext_filter.so#LoadModule file_cache_module modules/mod_file_cache.so#LoadModule filter_module modules/mod_filter.so#LoadModule http2_module modules/mod_http2.so#LoadModule headers_module modules/mod_headers.so#LoadModule heartbeat_module modules/mod_heartbeat.so#LoadModule heartmonitor_module modules/mod_heartmonitor.so#LoadModule ident_module modules/mod_ident.so#LoadModule imagemap_module modules/mod_imagemap.soLoadModule include_module modules/mod_include.so#LoadModule info_module modules/mod_info.soLoadModule isapi_module modules/mod_isapi.so#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so#LoadModule ldap_module modules/mod_ldap.so#LoadModule logio_module modules/mod_logio.soLoadModule log_config_module modules/mod_log_config.so#LoadModule log_debug_module modules/mod_log_debug.so#LoadModule log_forensic_module modules/mod_log_forensic.so#LoadModule lua_module modules/mod_lua.so#LoadModule macro_module modules/mod_macro.soLoadModule mime_module modules/mod_mime.so#LoadModule mime_magic_module modules/mod_mime_magic.soLoadModule negotiation_module modules/mod_negotiation.soLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so#LoadModule proxy_express_module modules/mod_proxy_express.so#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.so#LoadModule proxy_html_module modules/mod_proxy_html.soLoadModule proxy_http_module modules/mod_proxy_http.so#LoadModule proxy_http2_module modules/mod_proxy_http2.so#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so#LoadModule ratelimit_module modules/mod_ratelimit.so#LoadModule reflector_module modules/mod_reflector.so#LoadModule remoteip_module modules/mod_remoteip.so#LoadModule request_module modules/mod_request.so#LoadModule reqtimeout_module modules/mod_reqtimeout.soLoadModule rewrite_module modules/mod_rewrite.so#LoadModule sed_module modules/mod_sed.so#LoadModule session_module modules/mod_session.so#LoadModule session_cookie_module modules/mod_session_cookie.so#LoadModule session_crypto_module modules/mod_session_crypto.so#LoadModule session_dbd_module modules/mod_session_dbd.soLoadModule setenvif_module modules/mod_setenvif.so#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so#LoadModule socache_dbm_module modules/mod_socache_dbm.so#LoadModule socache_memcache_module modules/mod_socache_memcache.so#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule speling_module modules/mod_speling.soLoadModule ssl_module modules/mod_ssl.so#LoadModule status_module modules/mod_status.so#LoadModule substitute_module modules/mod_substitute.so#LoadModule unique_id_module modules/mod_unique_id.so#LoadModule userdir_module modules/mod_userdir.so#LoadModule usertrack_module modules/mod_usertrack.so#LoadModule version_module modules/mod_version.so#LoadModule vhost_alias_module modules/mod_vhost_alias.so#LoadModule watchdog_module modules/mod_watchdog.so#LoadModule xml2enc_module modules/mod_xml2enc.so<IfModule unixd_module>## If you wish httpd to run as a different user or group, you must run# httpd as root initially and it will switch.## User/Group: The name (or #number) of the user/group to run httpd as.# It is usually good practice to create a dedicated user and group for# running httpd, as with most system services.#User daemonGroup daemon</IfModule># 'Main' server configuration## The directives in this section set up the values used by the 'main'# server, which responds to any requests that aren't handled by a# <VirtualHost> definition. These values also provide defaults for# any <VirtualHost> containers you may define later in the file.## All of these directives may appear inside <VirtualHost> containers,# in which case these default settings will be overridden for the# virtual host being defined.### ServerAdmin: Your address, where problems with the server should be# e-mailed. This address appears on some server-generated pages, such# as error documents. e.g. admin@#ServerAdmin aaa123@## ServerName gives the name and port that the server uses to identify itself. # This can often be determined automatically, but we recommend you specify # it explicitly to prevent problems during startup.## If your host doesn't have a registered DNS name, enter its IP address here. #ServerName localhost## Deny access to the entirety of your server's filesystem. You must# explicitly permit access to web content directories in other# <Directory> blocks below.#<Directory />AllowOverride noneRequire all denied</Directory>## Note that from this point forward you must specifically allow# particular features to be enabled - so if something's not working as# you might expect, make sure that you have specifically enabled it# below.### DocumentRoot: The directory out of which you will serve your# documents. By default, all requests are taken from this directory, but# symbolic links and aliases may be used to point to other locations.#DocumentRoot "E:\apache-tomcat-7.0.50\webapps\ROOT"<Directory "E:\apache-tomcat-7.0.50\webapps\ROOT">## Possible values for the Options directive are "None", "All",# or any combination of:# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews## Note that "MultiViews" must be named *explicitly* --- "Options All"# doesn't give it to you.## The Options directive is both complicated and important. Please see# /docs/2.4/mod/core.html#options# for more information.#Options Indexes FollowSymLinks## AllowOverride controls what directives may be placed in .htaccess files.# It can be "All", "None", or any combination of the keywords:# AllowOverride FileInfo AuthConfig Limit#AllowOverride None## Controls who can get stuff from this server.#Require all granted</Directory>## DirectoryIndex: sets the file that Apache will serve if a directory# is requested.#<IfModule dir_module>DirectoryIndex index.html index.php index.htm index.jsp</IfModule>## The following lines prevent .htaccess and .htpasswd files from being# viewed by Web clients.#<Files ".ht*">Require all denied</Files>## ErrorLog: The location of the error log file.# If you do not specify an ErrorLog directive within a <VirtualHost># container, error messages relating to that virtual host will be# logged here. If you *do* define an error logfile for a <VirtualHost># container, that host's errors will be logged there and not here.#ErrorLog "logs/error.log"## LogLevel: Control the number of messages logged to the error_log.# Possible values include: debug, info, notice, warn, error, crit,# alert, emerg.#LogLevel warn<IfModule log_config_module>## The following directives define some format nicknames for use with# a CustomLog directive (see below).#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module># You need to enable mod_logio.c to use %I and %OLogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule>## The location and format of the access logfile (Common Logfile Format).# If you do not define any access logfiles within a <VirtualHost># container, they will be logged here. Contrariwise, if you *do*# define per-<VirtualHost> access logfiles, transactions will be# logged therein and *not* in this file.#CustomLog "logs/access.log" common## If you prefer a logfile with access, agent, and referer information# (Combined Logfile Format) you can use the following directive.##CustomLog "logs/access.log" combined</IfModule><IfModule alias_module>## Redirect: Allows you to tell clients about documents that used to# exist in your server's namespace, but do not anymore. The client# will make a new request for the document at its new location.# Example:# Redirect permanent /foo /bar## Alias: Maps web paths into filesystem paths and is used to# access content that does not live under the DocumentRoot.# Example:# Alias /webpath /full/filesystem/path## If you include a trailing / on /webpath then the server will# require it to be present in the URL. You will also likely# need to provide a <Directory> section to allow access to# the filesystem path.## ScriptAlias: This controls which directories contain server scripts.# ScriptAliases are essentially the same as Aliases, except that# documents in the target directory are treated as applications and# run by the server when requested rather than as documents sent to the# client. The same rules about trailing "/" apply to ScriptAlias# directives as to Alias.#ScriptAlias /cgi-bin/ "D:/apache-httpd/cgi-bin/"</IfModule><IfModule cgid_module>## ScriptSock: On threaded servers, designate the path to the UNIX# socket used to communicate with the CGI daemon of mod_cgid.##Scriptsock cgisock</IfModule>## "D:/apache-httpd/cgi-bin" should be changed to whatever your ScriptAliased# CGI directory exists, if you have that configured.#<Directory "D:/apache-httpd/cgi-bin">AllowOverride NoneOptions NoneRequire all granted</Directory><IfModule mime_module>## TypesConfig points to the file containing the list of mappings from# filename extension to MIME-type.#TypesConfig conf/mime.types## AddType allows you to add to or override the MIME configuration# file specified in TypesConfig for specific file types.##AddType application/x-gzip .tgz## AddEncoding allows you to have certain browsers uncompress# information on the fly. Note: Not all browsers support this.##AddEncoding x-compress .Z#AddEncoding x-gzip .gz .tgz## If the AddEncoding directives above are commented-out, then you# probably should define those extensions to indicate media types:#AddType application/x-compress .ZAddType application/x-gzip .gz .tgz## AddHandler allows you to map certain file extensions to "handlers":# actions unrelated to filetype. These can be either built into the server# or added with the Action directive (see below)## To use CGI scripts outside of ScriptAliased directories:# (You will also need to add "ExecCGI" to the "Options" directive.)##AddHandler cgi-script .cgi# For type maps (negotiated resources):#AddHandler type-map var## Filters allow you to process content before it is sent to the client.## To parse .shtml files for server-side includes (SSI):# (You will also need to add "Includes" to the "Options" directive.)##AddType text/html .shtml#AddOutputFilter INCLUDES .shtml</IfModule>## The mod_mime_magic module allows the server to use various hints from the # contents of the file itself to determine its type. The MIMEMagicFile# directive tells the module where the hint definitions are located.##MIMEMagicFile conf/magic## Customizable error responses come in three flavors:# 1) plain text 2) local redirects 3) external redirects## Some examples:#ErrorDocument 500 "The server made a boo boo."#ErrorDocument 404 /missing.html#ErrorDocument 404 "/cgi-bin/missing_handler.pl"#ErrorDocument 402 /subscription_info.html### MaxRanges: Maximum number of Ranges in a request before# returning the entire resource, or one of the special# values 'default', 'none' or 'unlimited'.# Default setting is to accept 200 Ranges.#MaxRanges unlimited## EnableMMAP and EnableSendfile: On systems that support it,# memory-mapping or the sendfile syscall may be used to deliver# files. This usually improves server performance, but must# be turned off when serving from networked-mounted# filesystems or if support for these functions is otherwise# broken on your system.# Defaults: EnableMMAP On, EnableSendfile Off##EnableMMAP off#EnableSendfile on# Supplemental configuration## The configuration files in the conf/extra/ directory can be# included to add extra features or to modify the default configuration of # the server, or you may simply copy their contents here and change as # necessary.# Server-pool management (MPM specific)#Include conf/extra/httpd-mpm.conf# Multi-language error messages#Include conf/extra/httpd-multilang-errordoc.conf# Fancy directory listings#Include conf/extra/httpd-autoindex.conf# Language settings#Include conf/extra/httpd-languages.conf# User home directories#Include conf/extra/httpd-userdir.conf# Real-time info on requests and configuration#Include conf/extra/httpd-info.conf# Virtual hosts#Include conf/extra/httpd-vhosts.conf# Local access to the Apache HTTP Server Manual#Include conf/extra/httpd-manual.conf# Distributed authoring and versioning (WebDAV)#Include conf/extra/httpd-dav.conf# Various default settings#Include conf/extra/httpd-default.conf# Configure mod_proxy_html to understand HTML4/XHTML1<IfModule proxy_html_module>Include conf/extra/proxy-html.conf</IfModule># Secure (SSL/TLS) connections#Include conf/extra/httpd-ssl.conf## Note: The following must must be present to support# starting without SSL on platforms with no /dev/random equivalent# but a statically compiled-in mod_ssl.#<IfModule ssl_module>SSLRandomSeed startup builtinSSLRandomSeed connect builtin</IfModule>完成配置后,启动Apache 2.4,在 "E:\apache-tomcat-7.0.50\webapps\ROOT" 添加静态页⾯ index.html。
ApacheTomcat版本说明
ApacheTomcat版本说明⼀、Tomcat介绍注意:因为版本信息有失效性,本⽂记录时间为2021年1⽉20号,本⽂只是对官⽅说明的翻译以及添加⾃⼰的理解,请以官⽅⽂档为准。
Tomcat是由Apache软件基⾦会下属的Jakarta项⽬开发的⼀个Servlet容器,其为开源的、免费的,在应⽤服务器市场上占有较⾼的使⽤率。
不同版本的Tomcat要求符合不同版本的规范,Tomcat和相应规范映射关系如下:⽬前较为常⽤的为7/8/9三个⼤版本,之前版本已经不建议使⽤,最新的10.0版本还处于Beta版本,不建议在⽣产环境使⽤。
Apache建议使⽤最新的稳定版本。
如今,Tomcat各个⼤版本是同步更新的,如果⽆特殊需求,建议升级到指定⼤版本下的最新⼩版本即可。
⼆、版本类型(Alpha / Beta / Stable)Alpha 版本可能包含规范要求的⼤量未测试/缺失的功能和/或重⼤错误。
Beta 版本可能包含⼀些未经测试的功能或⼀些相对较⼩的错误。
Stable 稳定版本可能包含少量相对较⼩的 bug。
适合⽣产使⽤,能够长时间稳定运⾏。
三、版本号介绍Apache Tomcat 10.xApache Tomcat 10.x 是当前开发的焦点。
它基于 Tomcat 9.0.x,实现了 Servlet 5.0、 JSP 3.0、 EL 4.0、 WebSocket 2.0和认证2.0规范(Jakarta EE 9平台要求的版本)。
Apache Tomcat 9.xApache Tomcat 9.x 是当前开发的焦点。
它基于 Tomcat 8.0. x 和8.5. x,实现了 Servlet 4.0、JSP 2.3、EL 3.0、WebSocket 1.1和 JASPIC 1.1规范(javaee 8平台所需的版本)。
除此之外,它还包括以下重⼤改进:添加对 HTTP/2的⽀持(要求在 java9上运⾏(从Apache Tomcat 9.0.0. M18开始)或安装库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Tomcat的7引入了许多新功能,并对现有功能进行了增强。
很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们,或指出它们的不足,或提供代码示例。
本文将明确描述TOMCAT 7中七个最显著的特征和新增的功能,并对其作出评论,而不是仅仅列出新的功能。
本文还提供了代码例子以方便你可以对其有更好的理解。
本文分为两个部分,分别是”TOMCAT 7的新特性”和“TOMCAT 7增强的功能“。
TOMCAT 7新特性1 使用随机数去防止跨站脚本攻击。
2 改变了安全认证中的jessionid的机制,防止session攻击。
3 内存泄露的侦测和防止4 在war文件外使用别名去存储静态内容。
TOMCAT 7的增强功能5 对Servlet 3.0,JSP 2.2和JSP-EL 2。
2的支持6 更容易将Tomcat内嵌到应用去中去,比如JBoss7 异步日志记录根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。
Tomcat 7的例子程序中,包含了Eclipse的工程文件和Ant的构建文件,以方便去构建war文件。
其中Eclipse工程文件有例子代码描述了Tomcat 7的一些新特性。
下面逐一开始介绍。
TOMCAT 7新特性1、使用随机数去防止跨站请求伪造攻击。
Wikipedia将跨站请求伪造攻击(Cross Site Request forgery,CSRF)定义为:“一种影响Web应用的恶意攻击。
CSRF让用户当进入一个可信任的网页时,被强行执行恶意代码。
经典的防止CSRF攻击的方法是使用随机数的方式,Wikipedia中定义为“利用随机或伪随机数嵌入到认证协议中,以确保旧的不能在以后的重放攻击中被利用。
”Tomcat 7中有一个servlet过滤器,用于将随机数存储在用户每次请求处理后的seesion会话中。
这个随机数,必须作为每次请求中的一个参数。
Servlet 过滤器然后检查在请求中的这个随机数是否与存储在用户session中的随机数是一样的。
如果它们是相同的,该请求是判断来自指定的网站。
如果它们是不同的,该请求被认为是从其他网站发出并且会被拒绝。
这个servlet过滤器是十分简单的,下面是从TOMCAT 源代码CsrfPreventionFilter文档中摘录的片段:Java代码1.public class CsrfPreventionFilter extends FilterBase {2.3.public void doFilter(ServletRequest request, ServletResponse response,4.FilterChain chain) throws IOException, ServletException {5.6.String previousNonce = req.getParameter(Constants.CSRF_NONCE_REQUEST_PARAM);7.String expectedNonce = (String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME);8.9.if (expectedNonce != null && !expectedNonce.equals(previousNonce)) {10.res.sendError(HttpServletResponse.SC_FORBIDDEN);11.return;12.}13.14.String newNonce = generateNonce();15.req.getSession(true).setAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME, newNonce);所以每个URL地址中都有一个从用户session中提取的随机数,下面是使用的JSTL例子:在以前,JSTL中构造链接可以这样:< c:url var="url" value="/show" >< c:param name="id" value="0" / >< /c:url >< a href="${show}" >Show< /a >而现在可以这样:< c:url var="url" value="/show" >< c:param name="id" value="0" / >< c:param name="org.apache.catalina.filters.CSRF_NONCE"value="${.apache.catalina.filters.CSRF_NONCE}" / >< /c:url >具体的例子可以参考TOMCAT 7自带例子中的演示,这个过滤器可以在web.xml中进行配置,配置后,所有访问如http://localhost:8080/tomcat7demo/csrf/的都必须带上参数,不带上参数的话会出现403禁止访问错误。
当然这种方法的缺点就是所有的链接都必须带上这个随机数。
2、改变了安全认证中的jessionid的机制,防止session攻击。
Session劫持攻击通常是以下的情况:1 恶意攻击者先访问一个网页,由于cookie是以jsession id的方式存储在浏览器中的,即使攻击者不登陆,他可以伪造一个带有jsession id的地址,把它发给受害者,比如/login?JESSIONID=qwerty)2 受害者点这个带有jsessionid的链接,提示输入验证信息之后就登陆系统。
3 攻击者现在使用这个带jsessionid的链接,以受害者的身份登陆进系统了。
对于攻击者来说,将jsessionid加在url中以及通过一个恶意表单发送出去是很容易的事,对于session劫持攻击的更详细描述,请参考Acros Security 组织的白皮书“Session Fixation Vuln erability in Web-based Applications”。
TOMCAT 7对此的解决方案是一个补丁,它在验证后改变了jsessionid。
这个补丁主要是应用在TOMCAT 7中,当然在TOMCAT 5和6中也可以使用但只是有些不同。
根据Mark Thomas说的,应用了Tomcat 7的这个补丁后:• TOMCAT默认情况下安全性不再变得脆弱,因为验证后会话发生了变化• 如果用户改变了默认设置(比如应用程序不能处理变化了的session id),风险也会降到最小,因为在Servlet 3中,可以禁止在url中进行会话跟踪。
而在TOMCAT 5和TOMCAT 6中,应用了补丁后:• 能阻止session劫持攻击,因为能让TOMCAT在验证后改变session id。
• 如果应用程序不能处理变化了的session id,可以通过写自定义的过滤器去检查request.isRequestedSessionIdFromURL()和其返回的结果,以降低风险。
以上这些改变都是TOMCAT在幕后所做的,开发者根本不用去理会。
3 、内存泄露的侦测和防止开发者在部署他们写的程序到生产环境上时,经常会遇到Pemgen错误:OutOfMemoryError。
这是由于内存泄露而引起的。
通常开发者是通过增大permgen内存的大小去解决或者就是重新启动tomcat。
TOMCAT 7包含了一个新的特性,它通过把不能垃圾回收的引用对象移走的方法,能解决一些Permgen内存泄露的问题。
这个特性对程序员部署应用程序在他们的开发环境中是十分方便的,因为程序员在开发环境中为了节省时间一般不重新启动Tomcat就能部署新的war文件。
在生产环境中,最好的建议还是停掉TOMCAT,然后清除work下面的目录文件并且重新部署应用。
当然,内存泄露检测和防止这个特性现在还不是很完善,还是有的情况TOMCAT不能检测内存泄露和修复之的,所以对于生产环境,最好的的办法还是停掉TOMCAT,然后清除work下面的目录文件并且重新部署应用。
Mark Thomas解析应用程序或者库程序在如下情况下会触发内存泄露:• JDBC驱动的注册• 一些日志框架• 在ThreadLocals中保存了对象但没有删除它们• 启动了线程但没停止而 Java API 存在内存泄漏的地方包括:1.使用 javax.imageio API ( Google Web Toolkit会用到)2.使用 java.beans.Introspector.flushCaches()3.使用 XML 解析器4.使用 RMI 远程方法调用5.从 Jar 文件中读取资源4、在war文件外使用别名去存储静态内容Web应用程序需要静态资源文件,比如象CSS,Javascript和视频文件、图片文件等。
通常都把它们打包放在war文件中,这将增加了WAR文件的大小并且导致很多重复的加载静态资源。
一个比较好的解决方法是使用Apache HTTP服务器去管理这些静态文件资源,下面是一个apache httpd.conf文件的配置摘录:< Directory "/home/avneet/temp/static" >Order allow,denyAllow from all< /Directory >Alias /static "/home/avneet/temp/static"以上的设置,使得访问http://localhost/static时,能访问到放在/home/avneet/temp/static下的资源。
允许使用新的aliases属性,指出静态文件资源的位置,可以通过使用Classloader.getResourceAsStream('/static/...')或者在链接中嵌入的方法让TOMCAT去解析绝对路径,下面是一个在context.xml中配置的例子:< ?xml version="1.0" encoding="UTF-8"? >< Context path="/tomcat7demo"aliases="/static=/home/avneet/temp/static" >< /Context >假设/home/avneet/temp/static这个文件夹存放有一张图片bg.png,如果war文件以tomcat7demo的名字部署,那么可以通过以下三个方式去访问这张图片1 直接访问http://localhost:8080/tomcat7demo/static/bg.png2 在HTML链接中访问:< img src="/tomcat7demo/static/bg.png" / >3 通过JAVA代码访问: ByteArrayInputStream bais = (ByteArrayInputStream)getServletContext().getResourceAsStream("/stati c/bg.png");使用aliases的好处是可以代替Apache的httpd.conf的设置,并且可以在servlet容器范围内访问,并且不需要Apache。