- 浏览: 256026 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
郑涵魁:
这才是好文啊
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
silvia016:
很有用,非常感谢
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
chengcwn:
好文章,多谢分享!
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 -
young7:
不错,特别是那个参考文章
JAVA调用Shell脚本--及阻塞的解决办法 -
zhujianbogo:
什么邮件列表,能说下解决方案吗? 谢谢 。 我也遇到这个问题了 ...
Tomcat与apache2集群的问题
最近用新的一套web框架做项目,有很多常用的包集成在里面。
这里总结一下:
每天总结三个
commons-dbutil.jar:
对传统操作数据库的类进行二次封装,可以把结果集转化成 List
(1)org.apache.commons.dbutils
DbUtils : 提供如关闭连接、装载 JDBC 驱动程序等常规工作的工具类
QueryRunner : 该类简单化了 SQL 查询,它与 ResultSetHandler 组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryLoader : 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。
(2)org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
(3)org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :该类是用来对sql语句执行完成之后的的数值进行null的替换。
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.MapListHandler; public class DbutilsJDBCTest{ public static void main(String[] args) { Connection conn = null; String jdbcURL = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK"; String jdbcDriver = "com.mysql.jdbc.Driver"; try { DbUtils.loadDriver(jdbcDriver); // Username "root". Password "root" conn = DriverManager.getConnection(jdbcURL, "root", "root"); QueryRunner qRunner = new QueryRunner(); System.out.println("***Using MapListHandler***"); //以下部分代码采用Map存储方式,可以采用Bean的方式代替进行处理 List lMap = (List) qRunner.query(conn, "select title,authors from books", new MapListHandler()); //以下是处理代码,可以抽取出来 System.out.println("title ------------- authors "); for (int i = 0; i < lMap.size(); i++) { Map vals = (Map) lMap.get(i); System.out.println(vals.get("title")+"-------------"+ vals.get("authors")); } } catch (SQLException ex) { ex.printStackTrace(); } finally { DbUtils.closeQuietly(conn); } } } /** 上例在处理结果集时,它把数据库中的每一行映射成一个Map,其中列名作为Key,该列对应的值作为Value存放, 查询的所有的数据一起放在一个List里,然后进行处理,当然,一个更明智的处理是直接返回List然后再单独进行处理。 事实上上例返回的结果集中的每一行不必放在一个Map里,你可以放在一个Bean里, 如果使用Bean而不是用Map,那么,你也许需要建立一个Bean,如下: **/ package cn.qtone.test; public class Book { public int id; public String title; public String authors ; public StudentBean() { } public String getAuthors() { return authors; } public void setAuthors(String authors) { this.authors = authors; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } /** 然后简单修改一下DbutilsJDBCTest 中的部分代码即可,代替之后的源代码如下: **/ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; public class DbutilsJDBCTest{ public static void main(String[] args) { Connection conn = null; String jdbcURL = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK"; String jdbcDriver = "com.mysql.jdbc.Driver"; try { DbUtils.loadDriver(jdbcDriver); // Username "root". Password "root" conn = DriverManager.getConnection(jdbcURL, "root", "root"); QueryRunner qRunner = new QueryRunner(); System.out.println("***Using BeanListHandler ***"); //以下部分代码采用Map存储方式,可以采用Bean的方式代替进行处理 List lBeans = (List) qRunner.query(conn," select title,authors from books ", new BeanListHandler(Book.class)); //以下是处理代码,可以抽取出来 System.out.println("title ------------- authors "); for (int i = 0; i < lBeans.size(); i++) { Book vals = (Book) lBeans.get(i); System.out.println(vals.getTitle ()+"-------------"+ vals. getAuthors ()); } } catch (SQLException ex) { ex.printStackTrace(); } finally { DbUtils.closeQuietly(conn); } } } /** 采用Map的方式即第一种方式性能要好的多,采用Bean性能比较低可能是因为采用反射的缘故, 采用反射的东东性能和不采用反射的还是有点差距。 **/
commons-mail.jar:
是对 JavaMail进行封装从而简化其操作,
功能:简单文本邮件、带附件的邮件、HTML格式的邮件
代码说明:
// 简单文本邮件 SimpleEmail email = new SimpleEmail(); email.setHostName("mail.fastunit.com"); email.setAuthentication("support@fastunit.com", "***");//邮件服务器验证:用户名/密码 email.setCharset("UTF-8");// 必须放在前面,否则乱码 email.addTo("fastunit.com@hotmail.com"); email.setFrom("support@fastunit.com", "support"); email.setSubject("subject中文"); email.setMsg("msg中文"); email.send(); // 带附件的邮件 MultiPartEmail email = new MultiPartEmail(); email.setHostName("mail.fastunit.com"); email.setAuthentication("support@fastunit.com", "***"); email.setCharset("UTF-8"); email.addTo("fastunit.com@hotmail.com"); email.setFrom("support@fastunit.com", "support"); email.setSubject("subject中文"); email.setMsg("msg中文"); EmailAttachment attachment = new EmailAttachment(); attachment.setPath("d:/a.gif");// 本地文件 // attachment.setURL(new URL("http://xxx/a.gif"));//远程文件 attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("a"); attachment.setName("a"); email.attach(attachment); email.send(); // HTML格式邮件 HtmlEmail email = new HtmlEmail(); email.setHostName("mail.fastunit.com"); email.setAuthentication("support@fastunit.com", "***"); email.setCharset("UTF-8"); email.addTo("fastunit.com@hotmail.com"); email.setFrom("support@fastunit.com", "support"); email.setSubject("subject中文"); email.setHtmlMsg("<b>msg中文</b>"); email.send(); /**** 一些问题:首先是jar包的问题,因为不是只下载commons-mail的jar包, 如果是jdk1.5或者1.5以下的版本,还需要下载sun的mail.jar和jaf的jar包, 如果是jdk6的话只需要mail.jar就可以了。具体下载地址去sun网站自己找找就行了, 然后就是要开启邮箱的smtp服务,具体的进入邮箱进行设置就可以了。一般都很简单。 最后就是gmail,gmail跟其他的邮箱的不同之处在于它的默认端口不是普通的25, 而是465,所以需要在程序中动态设置一下,设置的具体方法就是: email.setSSL(Boolean.TRUE); // 设定是否使用SSL email.setSslSmtpPort("465"); // 设定SSL端口 ***/
Commons-Chain.jar: (参考)
Chain提供实现组织复杂的处理流程的“责任链模式”。
(1).Command接口。它是Commons Chain中最重要的接口,表示在Chain中的具体某一步要执行的命令。它只有一个方法:boolean execute(Context context)。如果返回true,那么表示Chain的处理结束,Chain中的其他命令不会被调用;返回false,则Chain会继续调用下一个Command,直到:
-Command返回true;
-Command抛出异常;
-Chain的末尾;
(2).Context接口。它表示命令执行的上下文,在命令间实现共享信息的传递。Context接口的父接口是Map,ContextBase实现了Context。对于web环境,可以使用WebContext类及其子类(FacesWebContext、PortletWebContext和ServletWebContext)。
(3).Chain接口。它表示“命令链”,要在其中执行的命令,需要先添加到Chain中。Chain的父接口是Command,ChainBase实现了它。
(4).Filter接口。它的父接口是Command,它是一种特殊的Command。除了Command的execute,它还包括一个方法:boolean postprocess(Context context,Exception exception)。Commons Chain会在执行了Filter的execute方法之后,执行postprocess(不论Chain以何种方式结束)。Filter的执行execute的顺序与Filter出现在Chain中出现的位置一致,但是执行postprocess顺序与之相反。如:如果连续定义了filter1和filter2,那么execute的执行顺序是:filter1->filter2;而postprocess的执行顺序是:filter2->filter1。
(5).Catalog接口。它是逻辑命名的Chain和Command集合。通过使用它,Command的调用者不需要了解具体实现Command的类名,只需要通过名字就可以获取所需要的Command实例。
public class Command1 implements Command { public boolean execute(Context arg0) throws Exception { System.out.println("Command1 is done!"); return false; } } public class Command2 implements Command { public boolean execute(Context arg0) throws Exception { System.out.println("Command2 is done!"); return false; } } public class Command3 implements Command { public boolean execute(Context arg0) throws Exception { System.out.println("Command3 is done!"); return true; } }
public class CommandChain extends ChainBase { //增加命令的顺序也决定了执行命令的顺序 public CommandChain(){ addCommand( new Command1()); addCommand( new Command2()); addCommand( new Command3()); } public static void main(String[] args) throws Exception{ Command process = new CommandChain(); Context ctx= new ContextBase(); process.execute( ctx); } }
对于例1,配置文件可以写成:
<?xml version="1.0" encoding="gb2312"?> <catalog> <chain name="CommandChain"> <!-- 定义的顺序决定执行的顺序 --> <command id="command1" className= "chain.Command1"/> <command id="command2" className= "chain.Command2"/> <command id="command3" className= "chain.Command3"/> </chain> <command name="command4" className="chain.Command1"/> </catalog>
public class CatalogLoader { static final String cfgFile= "/chain/chain-cfg.xml"; public static void main(String[] args) throws Exception{ CatalogLoader loader= new CatalogLoader(); ConfigParser parser= new ConfigParser(); parser.parse( loader.getClass().getResource( cfgFile)); Catalog catalog= CatalogFactoryBase.getInstance().getCatalog(); //加载Chain Command cmd= catalog.getCommand("CommandChain"); Context ctx= new ContextBase(); cmd.execute( ctx); //加载Command cmd= catalog.getCommand( "command4"); cmd.execute( ctx); } }
<context-param> <param-name>org.apache.commons.chain.CONFIG_CLASS_RESOURCE</param-name> <param-value>resources/catalog.xml</param-value> </context-param> <listener> <listener-class>org.apache.commons.chain.web.ChainListener</listener-class> </listener>
Catalog catalog = (Catalog) request.getSession() .getServletContext().getAttribute("catalog");
定义Filter
public class Filter1 implements Filter { public boolean postprocess(Context arg0, Exception arg1) { System.out.println("Filter1 is after done!"); return false; } public boolean execute(Context arg0) throws Exception { System.out.println("Filter1 is done!"); return false; } }
<command id="filter1" className= "chain.Filter1"/> Filter的还有一个常用的用法:对于异常的过滤。当Command抛出异常时,最终中会返回到最开始的调用处。有时期望不抛出这些异常,而在内部消化掉,那么就可以利用Filter。因为Commons Chain确保会调用已经执行了execute方法的Filter的postprocess方法,即使在出现异常时也是如此。因此,对应的 postprocess方法可以写为: public boolean postprocess(Context arg0, Exception arg1) { //返回true,表示非空异常已被处理,无需再抛出。 //否则,异常会被抛出 if( null!= arg1) return true; else return false; }
<?xml version="1.0" encoding="UTF-8"?> <catalog> <chain name="CommandChain"> <command id="command1" className= "chain.Command1"/> <command id="filter1" className= "chain.Filter1"/> <command className="org.apache.commons.chain.generic.LookupCommand" name="chain_command3" optional="true"/> <command id="command2" className= "chain.Command2"/> </chain> <chain name="chain_command3"> <command id="command3" className= "chain.Command3"/> </chain> </catalog>
<?xml version="1.0" encoding="gb2312"?> <catalog> <!-- Command的别名,以后直接使用即可 --> <define name="command1" className="chain.Command1"/> <define name="command2" className="chain.Command2"/> <define name="command3" className="chain.Command3"/> <define name="filter1" className="chain.Filter1"/> <define name="lookupCommand" className="org.apache.commons.chain.generic.LookupCommand"/> <chain name="CommandChain"> <command1 id="1"/> <filter1 id="2"/> <lookupCommand name="chain_command3" optional="true"/> <command2 id="3"/> </chain> <chain name="chain_command3"> <command3 id="3"/> </chain> <command1 name="command4"/> </catalog>
发表评论
-
Java文件读写数据流
2012-08-30 20:30 3716数据流可分节点流( ... -
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
2012-04-16 19:59 25036前言在平时开发、测试过程中、甚至是生产环境中,有时会遇到Out ... -
apache2.2+tomcat超时503
2012-03-26 10:35 3418最近apache2.2+tomcat5.5.28(两个) ... -
Tomcat与apache2集群的问题
2012-03-16 14:53 2473最近在Tomcat与apache2集群的问题的应用程序中 ... -
JVM的参数设置的一个要点
2012-03-11 00:07 2553JVM参数的设置(特别是 –Xmx –Xms –Xmn ... -
【转载】理解Heap Profling名词-Shallow和Retained Sizes
2012-03-06 17:22 2912转载请注明原文链接:h ... -
更改eclipse author的默认名字(作者)
2011-09-07 12:39 1668在eclipse的目录下找到eclipse.in ... -
【转载】java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-08-27 12:18 1247java.lang.OutOfMemoryError: P ... -
JAVA NIO
2011-08-19 22:25 706NIO流是一个比IO流(字节字符)效率高很多,因为是以块 ... -
XMLGregorianCalendar 与 Date 转换
2011-06-28 17:01 1929XMLGregorianCalendar 与 Date ... -
Web Service 的描述语言WSDL说明
2011-05-27 10:28 1204<?xml version="1. ... -
spring+quartz的配置文件
2011-05-26 21:23 1228spring+quartz的配置文件 &l ... -
JAVA调用Shell脚本--及阻塞的解决办法
2011-05-16 13:13 8838用java调用shell,使用 Process p=Runt ... -
WIN7安装WebSphere6.1
2011-03-23 12:55 0首先是安装,我们决定安装WebSphere6.1。 ... -
Jbpm4常用操作
2011-03-06 15:00 2645Jbpm4常用操作 一、ProcessEngine:流程 ... -
ThreadLocal
2010-11-08 21:40 856ThreadLocal -
小记--tomcat 常见问题
2010-10-12 22:29 11511. tomcat 6 undepl ... -
SimpleDateFormat用法说明
2010-09-19 13:02 1422关于java.text.SimpleDateFormat。 ... -
常用的jar包总结(4)
2010-08-13 12:34 1717最近用新的一套web框架做项目,有很多常用的包集成在里面。 ... -
常用的jar包总结(2)
2010-08-11 23:27 1906最近用新的一套web框架做项目,有很多常用的包集成在里面 ...
相关推荐
"maven常用Jar包"指的是在Java开发中频繁使用的第三方库,例如Spring框架、Hibernate ORM、Apache Commons系列库、JSON解析库如Jackson或Gson,以及测试框架JUnit等。这些库已经被广泛地接受并应用在各种项目中,...
总结来说,SSH框架的常用Jar包涵盖了Web开发的多个方面,从控制层(Struts2)到业务层(Spring)再到数据访问层(Hibernate),为开发者提供了一整套完善的解决方案。理解并熟练运用这些Jar包,将有助于提升开发效率...
微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用...
"android常用jar包"这个主题涵盖了几个重要的库,包括处理JSON数据的库、XML解析库以及一个UI组件库。让我们详细了解一下这些jar包及其在Android开发中的作用。 首先,我们来看`json-jar.zip`。这通常指的是一个...
总结来说,这个“Java开发常用jar包”资源集成了Java开发中必不可少的工具和库,涵盖了项目管理、数据交换、数据库连接、NoSQL支持以及Web框架等多个方面,为Java开发者提供了一站式的开发支持。使用这些库,开发者...
在本知识点中,我们将深入探讨Spring 4.3.9版本以及与其相关的开发常用jar包,特别是日志jar包在Spring框架搭建和测试中的作用。 首先,Spring框架的核心jar包包括`spring-core.jar`、`spring-beans.jar`、`spring-...
总结,`jar`包在Web开发中扮演着核心角色,提供了一种高效、便捷的方式来管理和使用代码资源。无论是基础的API库,还是复杂的框架和第三方库,`jar`包都是构建Web应用的基础。通过理解`jar`包的工作原理和使用方式,...
本知识点将深入探讨Java与SQL Server交互的关键技术和相关jar包。 首先,为了在Java程序中与SQL Server数据库进行通信,我们需要使用JDBC(Java Database Connectivity)驱动。JDBC是Java平台中用于访问数据库的...
总结来说,"Struts 2常用jar包"是构建基于Struts 2的Web应用所必需的类库,它们协同工作,为开发者提供了强大的MVC框架支持,包括请求处理、数据绑定、视图渲染以及丰富的客户端交互能力。正确理解和使用这些库,...
总结来说,Java JAR包在Android SSH环境下扮演了重要角色,提供了实现远程控制、自动化任务和安全通信的能力。开发者应熟悉如何正确使用和管理JAR包,以优化项目结构,提升应用性能,并确保安全性。
总结来说,"spark相关jar包"涵盖了Spark框架的各个组件以及它们所需的依赖,理解这些jar包的作用和使用方法对于成功部署和运行Spark应用程序至关重要。开发者需要根据具体项目需求,选择并管理好相应的jar包,确保...
"一般常用的jar包总结"这个主题旨在概述那些在Java应用开发中频繁使用的JAR库。这些库为开发者提供了丰富的功能,减少了重复工作,提高了开发效率。 1. **Apache Commons**: - Apache Commons是Apache软件基金会...
总结来说,`json-lib jar包`用于处理JSON数据,`mysql驱动jar包`是与MySQL数据库交互的桥梁,而`c3p0 jar包`则为Java应用提供了高效且可配置的数据库连接池。这三个jar包都是Java开发中常见的依赖,对于提升应用功能...
总结来说,Java连接三大数据库——MySQL、Oracle和SQL Server,需要分别使用`mysql-connector-java.jar`、`ojdbc.jar`系列和`sqljdbc4.jar`系列的jar包。这些驱动实现了JDBC接口,使得Java程序能够遵循统一的JDBC...
总结来说,"KETTLE常用数据库的JAR包"是Kettle与Oracle、MySQL、Sybase等数据库交互的关键组件。通过将对应的JDBC驱动JAR文件放置在Kettle的win32目录下,用户可以确保Kettle能够识别和正确连接到这些数据库,从而...
在软件开发过程中,经常需要将多个JAR包合并成一个JAR包,以方便管理和部署。本文将详细介绍如何实现这一过程,并提供具体的操作步骤和技术细节。 ### 一、概述 在Java开发中,项目通常会依赖多个外部库或模块,...
总结来说,打包Eclipse项目为JAR并处理外部JAR包和配置文件的关键步骤包括: 1. 使用Eclipse的`Runnable JAR file`导出功能。 2. 选择合适的库处理方式,通常推荐`Package required libraries into generated JAR`。...
总结来说,"消息中间件常用的jar包"涵盖了消息队列、网络通信、日志管理等多个方面,是构建高效、稳定、可扩展的消息处理系统的基础。正确理解和使用这些库,能够帮助开发者构建出满足业务需求的高质量系统。
总结起来,"JAVA中常用的jar包"涵盖了从提高JSP开发效率的标准标签库JSTL,到数据库连接的JDBC驱动,以及众多的第三方库。理解并熟练使用这些JAR包对于任何Java开发者来说都是至关重要的,它们能帮助我们编写更简洁...
"Maven引入本地Jar包并打包进War包中的方法" Maven是一种流行的项目管理工具,主要用于Java项目的构建、测试和部署。在实际开发中,我们经常需要引入本地Jar包以满足项目的需求。本文将介绍Maven引入本地Jar包并...