Tomcat中定制阀门
来源:互联网 发布:淘宝店铺导航栏 编辑:程序博客网 时间:2024/04/27 17:44
我们说管道机制给我们带来了更好的扩展性,Tomcat中在扩展性方面具体如何体现,这便是本节讨论的内容。从上节了解到基础阀门是必须执行的,假如你需要一个额外的逻辑处理阀门,可以添加一个非基础阀门。
我的需求是对每个请求访问进行IP记录,打印到日志里面,详细操作如下:
① 自定义一个阀门PrintIPValve,只要继承ValveBase并重写invoke方法即可,ValveBase是Tomcat抽象的一个基础类,它帮我们实现了生命接口及MBean接口,使我们只需专注阀门的逻辑处理即可。需要注意的地方是一定要执行调用下一个阀门操作,即执行getNext().invoke(request,response),否则运行时将出现错误,请求到这个阀门就停止往下处理。
public classPrintIPValve extends ValveBase{
@Override
publicvoid invoke(Request request, Response response) throws IOException,
ServletException{
System.out.println(request.getRemoteAddr());
getNext().invoke(request,response);
}
}
② 配置tomcat服务器配置server.xml,这里把阀门配到Engine容器下,这样作用范围即在整个引擎,你也可以根据作用范围配置Host或Context下。
<Server port="8005"shutdown="SHUTDOWN">
……
<Engine name="Catalina"defaultHost="localhost">
<ValveclassName="org.apache.catalina.valves.PrintIPValve" />
……
</Engine>
……
</Server>
③ 将PrintIPValve类编译成.class文件,可以导出一个jar包放入tomcat安装目录lib目录下,也可直接将.class文件放入tomcat官方包catalina.jar中,这里的包名为org.apache.catalina.valves。
经过上面三个步骤配置好阀门,启动tomcat后对其进行的任何请求访问的客户端的IP都将被记录到日志中。除了自定义阀门以外,tomcat的开发者也十分友好,为我们提供了很多常用的阀门,对于这些阀门我们就无需再自定编写阀门类,要做的仅仅是在server.xml中配置即可生效。
l AccessLogValve,请求访问日志阀门,通过此阀门可以记录所有客户端的访问日志,包括远程主机IP、远程主机名、请求方法、请求协议、会话id、请求时间、处理时长、数据包大小等等。它提供了任意参数化的配置,可以通过任意组合来定制你的访问日志格式。
l JDBCAccessLogValve,同样是记录访问日志的阀门,但此类帮助将访问日志通过jdbc持久化到数据库中。
l ErrorReportValve,这是一个将错误以html格式输出的阀门。
l PersistentValve,这是对每个请求的会话实现持久化的阀门。
l RemoteAddrValve,这是一个访问控制阀门,通过配置可以决定哪些ip可以访问web应用。
l RemoteHostValve,这也是一个访问控制阀门,与RemoteAddrValve不同的是它是通过主机名限制访问者。
l RemoteIPValve,这是一个针对代理或负载均衡处理的一个阀门,一般经过代理或负载均衡转发的请求都将自己的IP添加到请求头部"X-Forwarded-For"中,此时可以通过此阀门可以获取访问者真实的IP。
l SemaphoreValve,这是一个控制容器上并发访问的阀门,可以作用在不同容器上。例如放在Context则整个上下文只允许若干线程同时访问,并发数量可以自己配置。
在实际的使用过程中,如果你需要的阀门tomcat已经帮你写好,则只需要对配置文件进行配置即可生效,如果无法满足自己需求的话则可以通过自己定义一个阀门。
喜欢研究java的同学可以交个朋友,下面是本人的微信号:
- Tomcat中定制阀门
- 阀门大小
- 情绪阀门
- 定制tomcat访问日志
- 液化气阀门坏了
- 多工位阀门试验机
- Tomcat 定制JNDI URL Resource
- Android中定制组件
- Eclipse中定制快捷键
- Vision中定制图形
- Android 中定制AlertDialog
- 电动阀门已成为自控阀门的首选
- 水管总阀门开关诀窍
- 阀门测试软件知识点总结
- 武汉专业阀门自控阀门行业专家控制阀企业-ACG汉德阀门
- 部署错误:尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。
- VB中定制DllRegisterServer、DllUnregisterServer
- MFC中工具栏的定制
- 谈谈Java虚拟机——Class文件结构
- Java文件之FileInputStream、FileOutputStream
- 黑马程序员——Java Socket编程
- 使用maven开发hadoop的mapreduce应用
- Flume1.5.0入门:安装、部署、及flume的案例
- Tomcat中定制阀门
- 5555555555555555555555555
- jsp页面的建立
- 二叉树的遍历javascript
- 第十一周项目0-系春哥啊
- C++primer 5.11new 和delete表达式
- 6.13
- 适配器模式以及为什么允许声明没有抽象方法的类为抽象类?
- Matlab图像处理函数汇总