- 浏览: 251427 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
郑涵魁:
这才是好文啊
一次使用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 3662数据流可分节点流( ... -
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
2012-04-16 19:59 24846前言在平时开发、测试过程中、甚至是生产环境中,有时会遇到Out ... -
apache2.2+tomcat超时503
2012-03-26 10:35 3382最近apache2.2+tomcat5.5.28(两个) ... -
Tomcat与apache2集群的问题
2012-03-16 14:53 2427最近在Tomcat与apache2集群的问题的应用程序中 ... -
JVM的参数设置的一个要点
2012-03-11 00:07 2499JVM参数的设置(特别是 –Xmx –Xms –Xmn ... -
【转载】理解Heap Profling名词-Shallow和Retained Sizes
2012-03-06 17:22 2871转载请注明原文链接:h ... -
更改eclipse author的默认名字(作者)
2011-09-07 12:39 1631在eclipse的目录下找到eclipse.in ... -
【转载】java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-08-27 12:18 1207java.lang.OutOfMemoryError: P ... -
JAVA NIO
2011-08-19 22:25 669NIO流是一个比IO流(字节字符)效率高很多,因为是以块 ... -
XMLGregorianCalendar 与 Date 转换
2011-06-28 17:01 1895XMLGregorianCalendar 与 Date ... -
Web Service 的描述语言WSDL说明
2011-05-27 10:28 1172<?xml version="1. ... -
spring+quartz的配置文件
2011-05-26 21:23 1195spring+quartz的配置文件 &l ... -
JAVA调用Shell脚本--及阻塞的解决办法
2011-05-16 13:13 8685用java调用shell,使用 Process p=Runt ... -
WIN7安装WebSphere6.1
2011-03-23 12:55 0首先是安装,我们决定安装WebSphere6.1。 ... -
Jbpm4常用操作
2011-03-06 15:00 2604Jbpm4常用操作 一、ProcessEngine:流程 ... -
ThreadLocal
2010-11-08 21:40 829ThreadLocal -
小记--tomcat 常见问题
2010-10-12 22:29 11161. tomcat 6 undepl ... -
SimpleDateFormat用法说明
2010-09-19 13:02 1390关于java.text.SimpleDateFormat。 ... -
常用的jar包总结(4)
2010-08-13 12:34 1667最近用新的一套web框架做项目,有很多常用的包集成在里面。 ... -
常用的jar包总结(2)
2010-08-11 23:27 1859最近用新的一套web框架做项目,有很多常用的包集成在里面 ...
相关推荐
微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用...
一般常用的jar包总结
希望能够帮助到大家,一点小小的总结,里面包含了freemarker包和其他常用web开发包
自己总结的struts常用jar包和配置文件的简单编写,其中包括项目的web.xml和struts.xml,给初学者很好礼物!
个人在学习中总结的Java开发常用jar包,或有不全敬请包涵
ssh三大框架整合让很多人很头疼,这里我总结了所用的jar包,如要扩展请大家自己添加其他jar包。
早一段时间学习了springsecurity3.0 框架,在开始阶段不知道导入那些必需jar包,经过摸索,总结出来最精简的jar包
在做webservice的过程中,总结的常用webservice的jar包,wsdl4j-1.6.1.jar、wstx-asl-3.2.0.jar、xfire-all-1.2.6.jar、XmlSchema-1.4.2.jar,jdom.jar,emayclient.jar,commons-codec-1.5.jar
JPA开发所需jar包总结
使用Spring4框架时,对于使用不同的功能来导入不同的jar包的总结
自己总结的java项目打包,软件加自己总结打包步骤
这个压缩包包含了SSH框架的的一些jar包,是自己写ssh项目总结出来的,小伙伴们有兴趣可以下载哟。
axis2客户端需要的jar包总结,包含axis2客户端搭建需要的全部jar包。
Java使用EasyExcel操作Excel表格的相关jar包,总结的一些包,想要的兄弟们来下载把!!
包括mysql oracle sqlserver sqlserver2005 在内的各驱动jar包。并且为大家总结了java连接各类数据库的方法。希望对大家有所帮助。
使用json格式的数据需要的jar包,除了本身的jar包,还有一些需要依赖的jar包 总结一下包括: 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar ...
spring比较全面的jar包,整合项目必用,在项目开发中,我也曾经遇到jar包冲突,缺少jar等问题,这是我自己总结出来的jar。各位大佬不要嫌弃小弟渣
这是本人在尝试好多次后总结的三大框架整合时所需的jar包,解决了三大框架初学者因为jar问题导致错误而找不到原因的问题,欢迎初学者下载。
使用Axis开发Webservice时,需要用到相应的jar包,总结我们项目中的jar包,分享学习!
在进行ssh开发环境搭建的时候,要不断挑选需咬掉jar包,很是麻烦,这里总结了ssh开发环境搭建的基础jar包,以后需要那个jar包在添加就行了