笔记
JAVA网站静态化方法
wangxian00 1 2014-03-08 21:00
绑定的课程:
1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例 1.buildhtml.jsp <%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%> <% try{ String title="This is Title"; String content="This is Content Area"; String editer="LaoMao"; String filePath = ""; filePath = request.getRealPath("/")+"test/template.htm"; //out.print(filePath+"<br>"); String templateContent=""; FileInputStream fileinputstream = new FileInputStream(filePath);//读取模块文件 int lenght = fileinputstream.available(); byte bytes[] = new byte[lenght]; fileinputstream.read(bytes); fileinputstream.close(); templateContent = new String(bytes); //out.print(templateContent); templateContent=templateContent.replaceAll("###title###",title); templateContent=templateContent.replaceAll("###content###",content); templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方 //out.print(templateContent); // 根据时间得文件名 Calendar calendar = Calendar.getInstance(); String fileame = String.valueOf(calendar.getTimeInMillis()) +".html"; fileame = request.getRealPath("/")+fileame;//生成的html文件保存路径 FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流 byte tag_bytes[] = templateContent.getBytes(); fileoutputstream.write(tag_bytes); fileoutputstream.close(); } catch(Exception e){ out.print(e.toString()); } %> 2. template.htm <html> <head> <title>###title###</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <LINK href="../css.css" rel=stylesheet type=text/css> </head> <body> <table width="500" border="0" align="center" cellpadding="0" cellspacing="2"> <tr> <td align="center">###title###</td> </tr> <tr> <td align="center">author:###author### </td> </tr> <tr> <td>###content###</td> </tr> </table> </body> </html> ======================================================= 二、从动态页的URL获取相应页面内容并写入到文件 package com.easydone.cn.tools.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; public class MakeHtml { private static long star = 0; private static long end = 0; private static long ttime = 0; //返回html代码 public static String getHtmlCode(String httpUrl){ Date before = new Date(); star = before.getTime(); String htmlCode = ""; try { InputStream in; URL url = new java.net.URL(httpUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("User-Agent","Mozilla/4.0"); connection.connect(); in = connection.getInputStream(); java.io.BufferedReader breader = new BufferedReader(new InputStreamReader(in , "GBK")); String currentLine; while((currentLine=breader.readLine())!=null){ htmlCode+=currentLine; } } catch (Exception e) { e.printStackTrace(); }finally{ Date after = new Date(); end = after.getTime(); ttime = end-star ; System.out.println("执行时间:"+ttime +"秒"); } return htmlCode; } //存储文件 public static synchronized void writeHtml(String filePath,String info,String flag) { PrintWriter pw = null; try { File writeFile = new File(filePath); boolean isExit = writeFile.exists(); if (isExit != true) { writeFile.createNewFile(); } else { if (!flag.equals("NO")) { writeFile.delete(); writeFile.createNewFile(); } } pw = new PrintWriter(new FileOutputStream(filePath, true)); pw.println(info); pw.close(); } catch (Exception ex) { System.out.println(ex.getMessage()); }finally{ pw.close(); } } public static void main(String[] args) { String url = "http://www.easydone.cn/index.htm"; writeHtml("c:/demo.htm",getHtmlCode(url),"NO"); } } 三、利用Filter和定制Response,把服务器返回的JSP响应输出到我们自己的Response中,就可以将响应快速写入Html文件,然后再发送给客户。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Calendar; public class CacheFilter implements Filter { ServletContext sc; FilterConfig fc; long cacheTimeout = Long.MAX_VALUE; public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; // check if was a resource that shouldn't be cached. String r = sc.getRealPath(""); String path = fc.getInitParameter(request.getRequestURI()); if (path!= null && path.equals("nocache")) { chain.doFilter(request, response); return; } path = r+path; String id = request.getRequestURI() + request.getQueryString(); File tempDir = (File)sc.getAttribute( "javax.servlet.context.tempdir"); // get possible cache String temp = tempDir.getAbsolutePath(); File file = new File(temp+id); // get current resource if (path == null) { path = sc.getRealPath(request.getRequestURI()); } File current = new File(path); try { long now = Calendar.getInstance().getTimeInMillis(); //set timestamp check if (!file.exists() || (file.exists() && current.lastModified() > file.lastModified()) || cacheTimeout < now - file.lastModified()) { String name = file.getAbsolutePath(); name = name.substring(0,name.lastIndexOf("/")); new File(name).mkdirs(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); CacheResponseWrapper wrappedResponse = new CacheResponseWrapper(response, baos); chain.doFilter(req, wrappedResponse); FileOutputStream fos = new FileOutputStream(file); fos.write(baos.toByteArray()); fos.flush(); fos.close(); } } catch (ServletException e) { if (!file.exists()) { throw new ServletException(e); } } catch (IOException e) { if (!file.exists()) { throw e; } } FileInputStream fis = new FileInputStream(file); String mt = sc.getMimeType(request.getRequestURI()); response.setContentType(mt); ServletOutputStream sos = res.getOutputStream(); for (int i = fis.read(); i!= -1; i = fis.read()) { sos.write((byte)i); } } public void init(FilterConfig filterConfig) { this.fc = filterConfig; String ct = fc.getInitParameter("cacheTimeout"); if (ct != null) { cacheTimeout = 60*1000*Long.parseLong(ct); } this.sc = filterConfig.getServletContext(); } public void destroy() { this.sc = null; this.fc = null; } } 参考文章: 使用Filter实现静态HTML缓冲(一种折中方法) 缓冲是Web应用中必须考虑的一个提高性能的重要手段。对于基于JSP/Servlet技术的站点,常用的缓冲有持久层的数据库连接池缓冲,内存中的值对象缓冲,JSP页面缓冲,以及各种各样的缓冲框架等等,无不是为了提高系统的吞吐量。 然而对于大型站点来说,将JSP页面转换为静态Html也许是最高效的方法,特别适合于数据不经常变化但是页面访问量特别大的站点,如新闻等,通过把JSP动态页面预先转换为静态Html页面,当用户请求此页面时,系统自动导向到对应的Html页面,从而避免解析JSP请求,调用后台逻辑以及访问数据库等操作所带来的巨大开销。 如何将一个已有的JSP站点的动态JSP页面转化为静态Html呢?我们希望在不用更改现有Servlet,JSP的前提下让系统自动将这些JSP转换为Html页。幸运的是,Filter为我们提供了一种实现方案。 Filter是Servlet 2.2规范中最激动人心的特性。Filter能过滤特定URL如/admin/*并进行必要的预处理,如修改Request和Response,从而实现定制的输入输出。更强大的是,Filter本身是一个责任链模式,它能一个接一个地传递下去,从而将实现不同功能的Filter串起来,并且可以动态组合。 要自动生成静态页面,用Filter截获jsp请求并先进行预处理,自动生成Html,是个不错的主意。一个很容易想到的方法是在Filter截获Request后,导向一个Servlet,在这个Servlet中向本机发送一个http请求,然后将响应写入一个文件: URLConnection urlConn = URLConnection.open(http://localhost/req); 注意要避免递归。 另一个方法是不模拟http,而是定制Response,把服务器返回的JSP响应输出到我们自己的Response中,就可以将响应快速写入Html文件,然后再发送给客户。而且,由于没有http模拟请求,直接读取服务器响应速度非常快。 截获Response的关键便是实现一个WrappedResponse,让服务器将响应写入我们的WrappedResponse中。这类似于一个代理模式,Servlet 2.x已经提供了一个WrappedResponse类,我们只需要复写其中的一些关键方法即可。 WrappedResponse实现了Response接口,它需要一个Response作为构造函数的参数,事实上这正是代理模式的应用:WrappedResponse充当了代理角色,它会将JSP/Servlet容器的某些方法调用进行预处理,我们需要实现自己的方法。 综上:用Filter实现HTML缓冲的步骤是: 1. 用Filter截获请求,如/a.jsp?id=123,映射到对应的html文件名为/html/a.jsp$id=123.htm。 2. 查找是否有/html/a.jsp$id=123.htm,如果有,直接forward到此html,结束。 3. 如果没有,实现一个WrappedResponse,然后调用filterChain(request, wrappedResponse)。 4. 将返回的WrappedResponse写入文件/html/a.jsp$id=123.htm,然后返回响应给用户。 5. 下一次用户发送相同的请求时,到第2步就结束了。 使用这个方法的好处是不用更改现有的Servlet,JSP页,限制是,JSP页面结果不能与Session相关,需要登陆或用户定制的页面不能用这种方法缓冲
作者
的头像

已学习课程数:3

已发表笔记数:5

Ta的笔记
01    Oracle 如何查询锁表的对象

select s.username, decode(l.type,'tm','table lock','tx','row lock',null) lock_level, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser from v$session s,v$lock l,dba_objects o where l.sid = s.s

02    linux下优化tomcat服务器性能

服务器优化说明 WEB服务器优化 1、 更换tomcat5为tomcat6 版本copy测试服务版本即可 2、 加大tomcat内存 修改bin下的catalina.sh文件,增加青绿色部分 JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m' 3、 加大tomcat连接数 修改conf下的server.xml文件,修改青绿色部分参数值 maxThrea

03    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

04    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

05    Oracle SQL使用心得

1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。 2. Oracle SQL如果想提高速度有几个方式 1)创建索引,尽量建立唯一索引 2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等) 3)在where条件后尽量采用数字类型的字段,比varchar的速度快 4)尽量不用用IN,Not In,union这样的条件查

相关笔记
01    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

02    java中的io系统详解

  Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效

03    流的概念和作用

流的概念和作用学习Java IO,不得不提到的就是JavaIO流。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类       根据处理数据类型的不同分为:字符流和字节流       根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:

04    Java源码:URL编程

 Example 1 Below is a simple Java program which can get the hostname of a computer from IP address. download now Tips 1. Compile: javac GetHost 2. Run: java GetHost 111.111.111.1(your IP or others) import java.io.*; import java.net.*; // // /

05    多线程

一:理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心

06    一个理解wait()与notify()的例子

  下面是我原来在CSDN论坛上看到的一个贴子,涉及到同步,wait(),notify()等概念的理解,我试着根据原来的一些回复和Think in Java上的相关概念将wait()和notify()这两个方法剖析了一下,欢迎指教.   问题如下:   //分析这段程序,并解释一下,着重讲讲synchronized、wait(),notify 谢谢!   class ThreadA   {    public static void main(String[] args)    {   

07    Java多线程yield心得分享

一. Thread.yield( )方法:使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。打个比方:现在有很多人在排队上厕所,好不容易轮到这个人上厕所了,突然这个人

08    java多线程详细总结

一、Thread.start()与Thread.run()的区别通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有“主线程”这一个线程,并没有开辟新线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。测试代码如下

09    java多线程中的异常处理机制简析

在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception,当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM

10    java多线程入门知识及示例程序

为什么需要多线程?模型的简化,如某些程序是由多个相对独立任务的运行:图形界面的出现,输入、输出的阻塞多核CPU的更好利用异步行为的需要 Java多线程的特性:程序的入口main本身是一个线程线程是并发的,无序执行的线程内部是顺序执行的共享数据 Java多线程的风险:安全风险:由于线程的操作顺序是不确定的,某些在单线程下能运行的程序到多线程下会出现意外的结果。性能风险:服务器的吞吐量、响应性、资源消耗 Java多线程API:Java可以通过两种形式创建线程:一、实现Runnable接口,二、继承Thread

最新笔记
01    Mysql DBA

基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编码知识5.MySQL用户账户管理6.数据备份/数据入导出7.mysql 支持的基本数据类型8.库/表/字段/索引 的创建/修改/删除9.基本sql语法:select/insert/update/delete,掌握最基本的语法即可,什么inner join,left join的了解就行mysql的应用场景大多都是高并发访问/业务逻辑简单,join/

02    mysql 备份

备份:mysqldump -uroot-p'root' jpstudy > /opt/mysql_jpstudy_bak.sql恢复:mysql -uroot-p'root' jpstudy < /opt/mysql_jpstudy_bak.sql参数说明:1、备份sql文件名以 -B ,即:mysqldump -uroot-p'root' -B jpstudy >/opt/mysql_jpstudy_bak_B.sql表示:备份的sql语句中有创建数据库和字符集的语句2、参数--com

03    mysql 索引失效

1.全值匹配2.最佳左前缀法则:如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。3.不在索引列上做任何操作(计算、函数、类型转换),会导致索引失效而转向全表扫描4.存储引擎不能使用索引中范围条件右边的列5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*6.mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描7.is null ,is not null也无法使用索引8.like以通配符开头(‘%abc’)

04    tomcat安全问题4

7 脚本权限回收去除其他用户对bin目录下可执行权限,防止其他用户起停tomcat# chmod -R 744bin/*8 访问日志格式规范开启Referer和User-Agetn是为了一旦出现安全问题能够更好的根据日志进行排查       <Hostname="23.83.xx.xx" appBase="webapps"     

05    tomcat安全问题2

3 禁用管理端对于tomcat的web管理端属于高危安全隐患,一旦被攻破,黑客通过上传web shell方式取得服务器的控制权,那是非常可怕的。我们需要删除tomcat安装目录下conf/tomcat- user.xml或者删除webapps下默认的目录和文件。 # mv webapps/*/tmp 4 降权启动tomcattomcat 启动用户权限必须为非root,避免一旦tomcat服务被入侵,获取root权限,普通用户只能使用大于1024端口,如果要想使用80端

06    tomcat安全问题

1、telnet管理端口保护使用telnet连接进来可以输入SHUTDOWN可以直接关闭tomcat,极不安全,必须关闭。可以修改默认的管理端口8005改为其他端口,修改SHUTDOWN指令为其他字符串。# viconf/server.xml <Server port="8365" shutdown="IN0IT">2 AJP连接端口保护Tomcat 服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的

07    发个测试

发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试 发个测试发个测试发个测

08    Elasticsearch 优化之路

1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的

09    SQL-触发器

1.触发器的定义触发器是一种特殊的存储过程 在表或视图上执行insert、update、delete操作自动被调用的存储过程 用途: 1.检测数据的有效性(check) 2.*记录操作的日志 3.拦截数据 rollback 4.*统计某表中的数据 分类: 1.after —— 在数据操作完成之后触发 2.inserted of —— 在数据操作完成之前触发  after可以创建在普通表上和视图上  inserted of可以创建在表 触发器的创建 表示:在指定表上执行upd

10    Java面试题—2016最新Java面试考题知识详解(1)

    动力节点Java培训  下面给出的Java开发中ClassLoader中的描述,哪些描述是正确的(C) AClassLoader没有层次关系 B所有类中的ClassLoader都是AppClassLoader C通过classforname(StringclassName)能够动态加载一个类 D不同的ClassLoader加载同一个Class文件,所得的类是相同的   拓展知识ClassLoader知识

热门笔记
01    Storm单机+zookeeper集群安装

Storm单机+zookeeper集群安装 1、安装zookeeper集群 2、准备机器 10.10.3.44 flumemaster1 zk 10.10.3.129 flumemaster2 zk 10.10.3.132 flumecollector1 zk 10.10.3.115 flumeNg1 storm 3、配置hosts文件(4台服务器上面都需要配置) vi /etc/hosts

02    sqoop安装使用手册

sqoop使用 需求:将mysql中的表b05_age的数据导入hive中 1、安装 yum install sqoop(sqoop必须安装在有hive client的服务器上面,如果没有执行yum install hive) 复制mysql的驱动jar到/usr/lib/sqoop/lib下面 2、异常处理 正确命令:(将关系型数据的表结构复制到hive中) sudo -u hive sqoop create-hive-table --connect jdbc:my

03    CDH hadoop集群安装-1

准备机器: 192.168.1.241 192.168.1.242 192.168.1.243 1、查看ip地址是否为静态ip,如果不是进行配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.1.241 NE

04    Oracle SQL使用心得

1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。 2. Oracle SQL如果想提高速度有几个方式 1)创建索引,尽量建立唯一索引 2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等) 3)在where条件后尽量采用数字类型的字段,比varchar的速度快 4)尽量不用用IN,Not In,union这样的条件查

05    JAVA网站静态化方法

1. 通过freemarker静态化 2. 通过jsp filter静态化 主要思路:请求servlet->判断静态文件是否存在并且静态文件创建时间是否在阀值之内-->如果不是,则访问数据库生成静态文件->否则直接跳转静态文件 然后通过urlReWrite直接将访问servlet的请求改为html,完成seo 最后通过SQUID缓存前台数据 一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例

06    使用JAVA 6 构建自己的HTTP服务器

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.util.List; import java.util.Map; import c

07    linux下优化tomcat服务器性能

服务器优化说明 WEB服务器优化 1、 更换tomcat5为tomcat6 版本copy测试服务版本即可 2、 加大tomcat内存 修改bin下的catalina.sh文件,增加青绿色部分 JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m' 3、 加大tomcat连接数 修改conf下的server.xml文件,修改青绿色部分参数值 maxThrea

08    Oracle 如何查询锁表的对象

select s.username, decode(l.type,'tm','table lock','tx','row lock',null) lock_level, o.owner, o.object_name, o.object_type, s.sid, s.serial#, s.terminal, s.machine, s.program, s.osuser from v$session s,v$lock l,dba_objects o where l.sid = s.s

09    【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化

10    实时流处理框架——Storm(介绍篇)

1. Storm介绍2. Storm环境配置3. Storm程序流程4. Storm总结及问题1. Storm介绍 1.1 实时流计算背景 随着互联网的更进一步发展,信息浏览、搜索、关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理和NoSQL产品应运而生,分别解决实时框架和数据大 规模存储计算的问题。 流式处理可

友情链接