使用feedsky还是feedburner烧录自己的RSS?
最后决定使用 http://feeds2.feedburner.com/wasw100 作为自己RSS的烧录地址。具体理由:
1.google技术的强大,在大订阅量时稳定,举两个例子(订阅量都过万):
王建硕:http://feeds.feedburner.com/wangjianshuo
冯大辉(Fenng):http://feeds2.feedburner.com/webarch(fenng的订阅地址是http://www.dbanotes.net/index.xml,但是会302重定向到上面那个地址)
2.自己是一个G粉,可以和google的许多服务无缝集成,也可以在后面添加google adsense的广告。
直接使用feedburner地址,而不是像fenng那样通过自己的域名重定向?
可以方便转到第三方博客,缺点是可能被墙
使用feedburner注意的地方:
不要使用点击统计功能,可能出现点击文章开头出现404找不到的情况。去掉的方法:
a.登陆http://feedburner.google.com/
b.点击要修改的feedbuner标题,进入 Feed Stats Dashboard,点左面的Configure Stats链接,在右面出现配置界面,去掉Item link clicks 前面的“√”,点 save 按钮保存
补充:
在别人的博客上都有这么一个图片:
其实这个也很容易获取,登陆你的feedburner,进入你要显示的订阅地址,点上面publicize选项卡,在左侧再选FeedCount选项,剩下的就很简单了
–EOF–
获取google analytics统计代码
每次向博客添加Google Analytics代码时,因为对Google Analytics不熟悉,每次获取统计代码都需要很长时间,因此把获取Google Analytics统计代码的过程记录下来:
1.登陆Abalytics http://www.google.com/analytics/
2.进入管理界面后,你所有的统计代码都会显示在下面的一个表格(table)中去,点击需要获取的网站后面一个 Edit 的超链接后,进入 Profile Settings 页面。
3.在Profile Settings页面第一个表格的右上角有 Check Status 的超级链接,点击进入Tracking Code页面,我们所需要的js代码就在这里了,复制到我们的页面中就可以了
参考文章:http://hi.baidu.com/tom70/blog/item/91cae4d8e46eae2411df9b87.html
–EOF–
windows下apache支持wordpress的url rewrite
参考文章:http://sexywp.com/how-to-config-mod-rewrite-in-win.htm
在本地调试wordpress时apache服务器可能不支持url rewrite,可以根据如下步骤修改配置:
1.打开apache的配置文件:httpd.conf 搜索:LoadModule rewrite_module modules/mod_rewrite.so
把前面的#去掉
如果执行完第一步,重启服务器后,还是不支持url rewrite,那么执行第二步
2.在 httpd.conf 中存在下面格式的文字
<Directory "D:/tools/Apache2.2/htdocs">
#
# 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
# http://httpd.apache.org/docs/2.2/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:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
将 AllowOverride None 改为 AllowOverride All 就可以了。
(注意:可能有多个Directory标签,找到你wordpress所在目录的那个修改)
3.在要url重写的目录建立一个名为: .htaccess 的文件(worldpress在开启url重写后会自动生成)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
4.重启apache,这样apache就支持url rewrite了
–EOF–
Hello world!
今天自己独立域名的博客终于诞生了–2010年3月3日,写点东西留做纪念。
1.自己的域名wasw100.com的排名目前是:Alexa Traffic Rank: 5,395,122 。第一个目标是进入前500万,应该不难
2.尽快把自己原来的博客(http://wasw100.javaeye.com/和http://wanng.javaeye.com/)文章迁移到这个域名下
3.博客还需要完善,但一定要简介。为学习技术而写,同时希望google的广告够够博客和域名的费用。
–EOF–
jsp中导出word的一种实现
方式:
1.将原来的word另存为网页形式,把扩展名改成jsp,利用DreamWeaver的拆分模式在对应的位置填充jsp标签。
2.jsp的第一行:<%@ page contentType="application/msword; charset=gb2312" %>
保存成的word名字:<%response.setHeader(“Content-Disposition”, “attachment;filename=test.doc”);%>
3.剩下的完全把这个word当一个jsp页面对待就可以了。
以后访问这张页面的时候就提示打开还是保存word了
补充:
后来发现其实直接设计好html,导出的word也是很不错的,这样代码更好维护。
相关:
struts2导出excel笔记
–EOF–
window.location or window.location.href?
参考:
1.http://www.javascriptkit.com/jsref/location.shtml
2.http://www.highdots.com/forums/javascript-discussion-multi-lingual/window-location-window-location-href-276539.html
Location contains information about the current URL of the browser. The most common usage of Location is simply to use it to automatically navigate the user to another page:
<script type="text/javascript"> window.location="http://www.google.com" </script>
所以推荐使用window.location,包含更多信息
理由(参考文章的第二篇)
Although "window.location.href" also seems to work. The "entire URL" href property (of window.location) appears to be a bit redundant. Other properties of "windows.location" could be useful for reading or changing portions of the URL like domain/host names and port numbers (which are sometimes not stated - permitted to remain the default).
–EOF–
struts2导出excel笔记
例子很简单,就一个Action类和一个Service类
1.所需jar包
struts2需要jar包:commons-logging.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar、struts2-core-2.0.11.1.jar、xwork-2.0.4.jar
excel导出:jxl.jar
2.配置(web.xml)
.....
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
......
Struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <package name="platform-default" extends="struts-default"> <action name="excel" class="action.ExcelAction"> <result name="excel" type="stream"> <param name="contentType"> application/vnd.ms-excel </param> <param name="inputName">excelStream</param> <param name="contentDisposition"> filename="export.xls" </param> <param name="bufferSize">1024</param> </result> </action> </package> </struts>
3.Action实现(ExcelAction.java)
package action;
import java.io.InputStream;
import service.IExcelService;
import service.impl.ExcelServiceImpl;
public class ExcelAction {
InputStream excelStream;
public String execute(){
IExcelService es = new ExcelServiceImpl();
excelStream = es.getExcelInputStream();
return "excel";
}
//get set...
}
4.Service实现
a.接口(IExcelService.java)
package service;
import java.io.InputStream;
public interface IExcelService {
InputStream getExcelInputStream();
}
b.实现类(ExcelServiceImpl.java)
package service.impl;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import jxl.Workbook;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import service.IExcelService;
public class ExcelServiceImpl implements IExcelService {
@Override
public InputStream getExcelInputStream() {
//将OutputStream转化为InputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
putDataOnOutputStream(out);
return new ByteArrayInputStream(out.toByteArray());
}
private void putDataOnOutputStream(OutputStream os) {
jxl.write.Label label;
WritableWorkbook workbook;
try {
workbook = Workbook.createWorkbook(os);
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
label = new jxl.write.Label(0, 0, "struts2导出excel");
sheet.addCell(label);
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这样例子就完成了:
直接访问:http://127.0.0.1:8080/excel/excel.action 就可以导出excel
说明:
1、例子中OutputStream转InputStream是一种简单的实现,但是需要内存比较多,可以参考:
http://ostermiller.org/convert_java_outputstream_inputstream.html
2、参考实现:http://merrygrass.javaeye.com/blog/558274
代码在附件中,jar包自己下载后导入即可
问题:
//横向打印 sheet.getSettings().setOrientation(PageOrientation.LANDSCAPE); //默认行高(似乎不起作用) sheet.getSettings().setDefaultRowHeight(510); //设置行宽 sheet.getSettings().setDefaultColumnWidth(10);
横向设置和行宽起作用,但行高不起作用,望高手回答
———————————————————————————
默认行高问题解决:
此方法针对excel2003,在创建sheet后,添加如下代码
for(int i=0;i<65536;i++){
sheet.setRowView(i, 360);
}
补充:jxl中20个高度对应excel的1个高度,jxl的1个宽度对应excel的7个宽度
–EOF–
网页打印格式设置总结
1.分页符的添加
.page_break{
page-break-after:always;
}
分页的时候加上:<div class=”page_break”></div>
2.为使各个浏览器显示效果尽量一致,加上
*{
margin:0;
padding:0;
}
3.A4纵向打印,浏览器显示和打印效果相差不大,设置body的宽度
body{
width:640px;
font-size:12px;
}
4.css擅长样式的控制,table善于格式的显示。css修饰table
参考文章:http://www.w3schools.com/css/css_table.asp
table添加边框
table{
border-collapse:collapse;
}
table, th, td{
border:1px solid #000000;
}
如果一个页面有多个table,这个table和其他table格式略有不同,可以使用下面的方法
<div id="t1">
<table>
<tr>
<th scope="col"> </th>
</tr>
</table>
</div>
css中,控制不同的格式
#t1 table{
width:640px;
}
#t1 table,#t1 th,#t1 td{
text-align:center;
}
5.控制打印时是否显示
@media print{<!--控制哪些打印,哪些不打印的样式-->
.print {display:block;}
.notPrint {display:none;}
}
我们在html中引入css: <link rel=”stylesheet” type=”text/css” media=”screen” href=”styles/basic.css” />
media=”screen”,也可以时media=”print”,分别代表控制浏览器里面的格式,或者打印时的格式,如果没有写media属性,则表示css既控制浏览器显示,有控制打印显示,
所以上面的css就是单独控制打印的
–
文字间距 行间距
.space{
word-spacing:20px;
letter-spacing:20px;
line-height:60px;
}
–EOF–
jfreechart使用小结
一些jfreechart的api:http://topic.csdn.net/t/20050925/03/4292228.html
要建立类似下面的报表(折线图和柱状图都存在,图片不好贴,直接给个flicckr地址):http://www.flickr.com/photos/44025540@N03/4241013620/

先贴段代码,用到的地方尽量加载注释里:
package com.wasw100.chart;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
* @author wasw100
*
*/
public class ChartTest {
/**
* @param stuScoreMap
* @return
*/
private static DefaultCategoryDataset getDataSet(
Map<String, Number> scoreMap, String category) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 遍历Map
for (String key : scoreMap.keySet()) {
double value = scoreMap.get(key).doubleValue();
dataset.setValue(value, category, key);
}
return dataset;
}
/**
*
* @param stuScoreMap
* 学生成绩
* @param avgScoreMap
* 班级平均成绩
* @return
*/
private static JFreeChart getChart(Map<String, Number> stuScoreMap,
Map<String, Number> avgScoreMap) {
CategoryPlot categoryPlot = new CategoryPlot();
// 横轴、纵轴显示的标题
categoryPlot.setDomainAxis(new CategoryAxis(""));
categoryPlot.setRangeAxis(new NumberAxis("分数"));
// 显示的方向,横向还是纵向?
// categoryPlot.setOrientation(PlotOrientation.VERTICAL);
// 设置是否显示水平网格线
categoryPlot.setRangeGridlinesVisible(true);
// 设置是否显示垂直网格线
// categoryPlot.setDomainGridlinesVisible(true);
DefaultCategoryDataset avgData = getDataSet(avgScoreMap, "班级平均成绩");// 得到数据集
LineAndShapeRenderer lineAndShapeRenderer = new LineAndShapeRenderer();
// 不显示线条
lineAndShapeRenderer.setBaseLinesVisible(false);
// 将线条添加进图表
categoryPlot.setRenderer(lineAndShapeRenderer);
categoryPlot.setDataset(avgData);
// lineAndShapeRenderer的数值显示出来
StandardCategoryItemLabelGenerator standardcategoryitemlabelgenerator = new StandardCategoryItemLabelGenerator();
lineAndShapeRenderer
.setBaseItemLabelGenerator(standardcategoryitemlabelgenerator);
lineAndShapeRenderer.setBaseItemLabelsVisible(true);
// 个人成绩的添加
DefaultCategoryDataset stuData = getDataSet(stuScoreMap, "成绩");// 得到数据集
BarRenderer barRenderer = new BarRenderer();// 柱状图渲染器
categoryPlot.setDataset(1, stuData);
categoryPlot.setRenderer(1, barRenderer);
// 颜色显示为黄色
barRenderer.setSeriesPaint(0, Color.YELLOW);
barRenderer.setShadowVisible(false);
// barRenderer.setSeriesPaint(0, new Color(0, 0, 255));
// 显示边框
barRenderer.setDrawBarOutline(true);
barRenderer.setBaseOutlinePaint(Color.GRAY);
// 设置纵轴的最小值和最大值
ValueAxis valueAxis = categoryPlot.getRangeAxis();
valueAxis.setLowerBound(40);
valueAxis.setUpperBound(110);
JFreeChart chart = new JFreeChart(categoryPlot);
// 设置title
Font titleFont = new Font("黑体", Font.BOLD, 10); // 图片标题
chart
.setTitle(new TextTitle("高2011级6班在高一下期末的平均成绩与班级平均成绩的比较",
titleFont));
chart.setBackgroundPaint(Color.WHITE);
return chart;
}
public static void main(String[] args) {
Map<String, Number> avgScoreMap = new LinkedHashMap<String, Number>();
avgScoreMap.put("总分", 0);
avgScoreMap.put("语文", 97.02);
avgScoreMap.put("数学", 73.71);
avgScoreMap.put("英语", 77.9);
avgScoreMap.put("理综", 0);
avgScoreMap.put("物理", 52.73);
avgScoreMap.put("化学", 66.98);
Map<String, Number> stuScoreMap = new LinkedHashMap<String, Number>();
stuScoreMap.put("总分", 0);
stuScoreMap.put("语文", 98);
stuScoreMap.put("数学", 70);
stuScoreMap.put("英语", 50);
stuScoreMap.put("理综", 0);
stuScoreMap.put("物理", 50);
stuScoreMap.put("化学", 70);
JFreeChart chart = getChart(avgScoreMap, avgScoreMap);
FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\score.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos_jpg.close();
} catch (IOException e) {
}
}
}
}
还有就是图例如果显示在右面,可以这样设置
// 设置图例位置,字体
chart.getLegend().setPosition(RectangleEdge.RIGHT);
Font kfont = new Font("宋体", Font.PLAIN, 10);
chart.getLegend().setItemFont(kfont);
还没有解决的问题:
1.右侧刻度间距没有手动控制
2.柱状图中间的白色竖线去不掉,欢迎指点
补充:刻度手动控制解决,只要把上面99-102行的代码改为下面即可
// 数据轴精度 NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis(); numberAxis.setTickUnit(new NumberTickUnit(10)); numberAxis.setLowerBound(0); numberAxis.setUpperBound(110);
NumberAxis继承ValueAxis,所以ValueAxis有得属性方法, NumberAxis都可以使用。
–EOF–
java中static块执行的时间
先放一个引用:http://www.javaeye.com/topic/11003
引用
一个类的运行,JVM做会以下几件事情 1、类装载 2、链接 3、初始化 4、实例化;而初始化阶段做的事情是初始化静态变量和执行静态方法等的工作。所以,当Class.forName(args[0],true,off.getClass().getClassLoader());中的true变为false的时候,就是告诉JVM不需再load class之后进行initial的工作。这样,将initial的工作推迟到了newInstance的时候进行。所以,static块的绝对不是什么“只是在类被第一次实体化的时候才会被仅仅调用一次”,而应该是在类被初始化的时候,仅仅调用一次。
有上面的引用可知,static块在类加载的时候执行,但是什么时候类加载? 首先明确不是在类加载的时候执行,可以像写jdbc的时候:
Class.forName(“com.mysql.jdbc.Driver”);
这样就会加载并初始化程序,但不实例化,具体可以参考:
http://tech.it168.com/j/d/2007-01-09/200701091303176.shtml
jdbc只需加载并初始化,无需实例化。
在javaApi中有:
newInstance 实例化
可见初始化可以在Class.forName(第二个参数为true)的时候进行,或者在第一次实例化的时候,如果没有初始化先初始化。
–EOF–