收集于:
vocat的专栏
http://blog.csdn.net/vocat/archive/2006/10/21/1344388.aspx
结合我的情况,写下来以后忘记了,可以看下。
=============================如下是:vocat原文===============================
很多和我一样的菜鸟,为了学linux都会在原来windows的基础上安装linux。但windows的病毒是在太多了,难保哪天中了病毒杀不掉甚至进不windows了就只好重装了。重装后往往就默认直接进入windows,而没有出现个菜单让你选择是进windows和linux。原因嘛,网上搜下到处都是,下面直接进入正题,找回进不去的linux。
先准备好以下两个软件
grub for dos(http://sourceforge.net/project/showfiles.php?group_id=104188),选择GRUB4DOS那个就行,用这个来引导linux
explore2fs(http://www.chrysocome.net/explore2fs),这个是在windows下看linux文件用的
以上两个软件或者百度,google下,到处都有,很多,好啦,开始进入步骤
1:把下好的grub for dos 解压到C盘根目录下,取名为grub,把里面的grlrd复制到C盘根目录下
2:找到C盘下面的boot.ini文件(这是个隐藏文件),在里面最后一行加入c:\grldr="linux"
3:新建一个menu.lst文件,把它放在C盘根目录下,里面的内容,以我的为例,如下
title redhat 9.0
root (hd0,7)
kernel (hd0,7)/boot/vmlinuz-2.4.20-8 root=/dev/hda8
initrd (hd0,7)/boot/initrd-2.4.20-8.img
boot
总共5行,每行的意思如下
第一行:title redhat 9.0
这个title跟的值是指你要在菜单上出现用来显示linux的名称
第二行:root (hd0,7)
一般的写法为root(hdX,Y)
对于X,如果你只有一个硬盘且装在这个硬盘(好像是废话……)那么当然为0啦,否则的话以此类推为1,2,等
对于Y,这个会稍微复杂些。在windows下面,由一个主分区-C盘,和N个扩展分区-D,E,F……等组成。但在linux下,hd1~hd4代表主分区,对应于windows下就是C盘,hd5开始为扩展分区,如hd5对应D盘,hd6对应E盘等。grub的分区算法和linux类似,但有一个差别是,它是从0开始计数的,也就是说0~3对应C盘,4对应D盘,以此类推。我自己的电脑分区如下C盘-windows,D,E,F存储资料,剩下的空间给了linux,所以为root(hd0,7)
第三行:kernel (hd0,7)/boot/vmlinuz-2.4.20-8 root=/dev/hda8
把vmlinuz-2.4.20-8换成你对应的文件就行啦。用explre2fs这个软件就可以在windows下看linux分区的文件啦。要有点注意的是,root=/dev/hda8 中的hda8而不是hda7,因为此时是按照liuux的规则而不是grub的规则。
第四行:initrd (hd0,7)/boot/initrd-2.4.20-8.img
也只要把initrd-2.4.20-8.img 替换成你相应的文件就行啦
第五行:root
好像没什么好说吧……
OK,大功告成也~
=============================以上是:vocat原文===============================
现在来看我的情况:我硬盘有C、D、E、F分区,其中linux分区在E、F之间,有/boot、/、swap三个分区。
整个硬盘分区的顺序C、D、E、/boot、/、swap、F
我的menu.lst的写法是:
title FC7
root (hd0,7)
kernel /vmlinuz-2.6.21-1.3194.fc7 ro root=LABEL=/ rhgh quiet
initrd /initrd-2.6.21-1.3194.fc7.img
boot
在
kernel (hd0,7)/boot/vm... root=/dev/sda8
initrd (hd0,7)/boot/initrd...
反而不行
我的是怎样看到的呢?,是安装Linux后启动后的第一幕的前面几行就是。
posted @
2007-09-07 21:22 流浪汗 阅读(5513) |
评论 (0) |
编辑 收藏
UTF-8修改(写xml文件乱码),报Invalid byte 2 of 2-byte UTF-8 sequence错误。写gb2312和gbk没事,写xml是网上的例子,用了FileWirter。然后找到
博客:http://blog.csdn.net/redez/archive/2005/11/11/527897.aspx
说到用FileOutPutStream
看例子(是个测试类,只给出这个修改方法,测试类请看——dom4j 读 xml:http://www.blogjava.net/chenlb/archive/2007/09/05/143036.html):
public void testModXml() {
List list = document.selectNodes("/company/tel" );
Random rm = new Random();
for(Element tel : (List<Element>) list) {
logger.info("tel: "+tel.getTextTrim());
tel.setText("020-12345678-"+rm.nextInt(100));
}
Element root = document.getRootElement();
for(int i=0; i<2; i++) {
Element tel = root.addElement("tel");
tel.setText("020-12345678-"+rm.nextInt(100));
}
XMLWriter writer;
try {
OutputFormat format = OutputFormat.createPrettyPrint();
//format.setEncoding("UTF-8");
FileOutputStream fos = new FileOutputStream(xmlFile);
//writer = new XMLWriter(new FileWriter(xmlFile), format);
writer = new XMLWriter(fos, format);
writer.write(document);
writer.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
logger.error("修改xml文件失败!");
e.printStackTrace();
}
}
posted @
2007-09-06 00:10 流浪汗 阅读(6174) |
评论 (1) |
编辑 收藏
由于要保存一些项目中只有一个而且很少改的,用数据库存储太浪费了,用xml保存吧。
1.现在来看下读xml,xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<tel>020-12345678-66</tel>
<tel>020-12345678-85</tel>
<introduce>
<![CDATA[
<br/><h1>公司简介</h1>
]]>
</introduce>
</company>
2.用dom4j 读,
package cn.rentbus;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
//import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jXmlTest extends TestCase {
protected final Log logger = LogFactory.getLog(getClass());
private SAXReader reader;
private Document document;
private File xmlFile;
protected void setUp() throws Exception {
xmlFile = new File("WEB-INF/company.xml");
reader = new SAXReader();
document = reader.read(xmlFile);
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testReadXml() {
Element root = document.getRootElement();
for ( Iterator i = root.elementIterator( "tel" ); i.hasNext(); ) {
Element tel = (Element) i.next();
logger.info("tel: "+tel.getTextTrim());
// do something
}
logger.info("==== XPath use on tel ====");
List list = document.selectNodes("/company/tel" );
for(Element tel : (List<Element>) list) {
logger.info("tel: "+tel.getTextTrim());
}
for ( Iterator i = root.elementIterator( "introduce" ); i.hasNext(); ) {
Element introduce = (Element) i.next();
logger.info("introduce: "+introduce.getTextTrim());
// do something
}
logger.info("==== XPath use on introduce ====");
Node node = document.selectSingleNode("/company/introduce");
String introduce = node.getText();
logger.info("introduce: "+introduce.trim());
}
}
注意:如果用到XPath,需要jaxen-1.1-beta-6.jar(发本包/lib下有)
我的环境:
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
posted @
2007-09-05 23:58 流浪汗 阅读(3635) |
评论 (2) |
编辑 收藏
不知那天开始,任务管理器标题没了,光秃秃的,想看任务管理器其它的内容没法切换。郁闷……
百度一下,有结果了。发现百度的知道发展得很好,很多电脑应用问题都有答案。
解决方法是:双击任务管理器面板就出来了,再双击又是光秃秃的……,^_^
百度知道
http://zhidao.baidu.com/question/869385.html
posted @
2007-09-03 20:38 流浪汗 阅读(698) |
评论 (0) |
编辑 收藏
Javascript检测整数或小数,写的正则表达式:
^(+|\-)?\d+(.\d+)?$
报错,说数量词错误。
然后改用:
^[+\-]?\d+(.\d+)?$
就行了,^_^
posted @
2007-08-27 14:56 流浪汗 阅读(11033) |
评论 (7) |
编辑 收藏
这里使用一个小技巧,就是先将其转换为可编辑的JSP文件,然后再像操作其它的JSP页面一样操作,就这么简单。
因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为web页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式 。
word页面只要在jsp头设置如下指令:
<%@page contentType="application/msword;charset=gb2312" %>
excel如下:
<%@page contentType="application/vnd.ms-excel;charset=gb2312" %>
使用这种方式,就不用使用其它的复杂技术,并且可以达到很好的效果,所谓走路走捷径,呵呵,例子就不给了。
http://blog.csdn.net/fenglibing/archive/2007/06/27/1668809.aspx
posted @
2007-08-22 13:15 流浪汗 阅读(294) |
评论 (0) |
编辑 收藏
由于项目里要发邮件,用了spring 和 velocity 模板。写下来以后可以看,好记性不如博客。
版本说明下:
spring 2.0.6
velocity 1.5
javamail 用 spring/lib下的
1.封装邮件信息类:
package com.chenlb.mail;
import java.util.Map;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.velocity.VelocityEngineUtils;
/**
* 邮件发送器
* @作者 chenlb
* @创建时间 2007-7-28 下午03:35:31
*/
public class VelocityTemplateMailMessage {
protected final Log logger = LogFactory.getLog(getClass());
private JavaMailSender javaMailSender;
private VelocityEngine velocityEngine;
private String from;
private String title;
private String encoding;
private String templateLocation;
private String[] toEmails;
private Map model;
public boolean send() {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg);
try {
helper.setFrom(from);
helper.setSubject(title);
helper.setTo(toEmails);
helper.setText(getMessage(), true); //如果发的不是html内容去掉true参数
javaMailSender.send(msg);
} catch (MessagingException e) {
// TODO 自动生成 catch 块
if(logger.isWarnEnabled()) {
logger.warn("邮件信息导常! 邮件标题为: "+title);
}
return false;
//e.printStackTrace();
} catch (MailException me) {
// TODO: handle exception
if(logger.isWarnEnabled()) {
logger.warn("发送邮件失败! 邮件标题为: "+title);
}
return false;
}
return true;
}
/**
* 邮件模板中得到信息
* @return 返回特发送的内容
*/
private String getMessage() {
return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine,
templateLocation, encoding, model);
}
private String[] createToEmail(String to) {
return new String[] {to};
}
public void setToEmail(String to) {
setToEmails(createToEmail(to));
}
public void setJavaMailSender(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public void setVelocityEngine(VelocityEngine velocityEngine) {
this.velocityEngine = velocityEngine;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public void setModel(Map model) {
this.model = model;
}
public void setTemplateLocation(String templateLocation) {
this.templateLocation = templateLocation;
}
public void setTitle(String title) {
this.title = title;
}
public void setToEmails(String[] toEmails) {
this.toEmails = toEmails;
}
public void setFrom(String from) {
this.from = from;
}
public String getTemplateLocation() {
return templateLocation;
}
}
2.spring配置文件,applictionContext-mail.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"dtd/spring-beans-2.0.dtd">
<!-- http://www.springframework.org/ -->
<beans>
<!-- 属性文件加载 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:mail.properties</value>
</list>
</property>
</bean>
<!-- 邮件发送器 -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}" />
<property name="username" value="${mail.username}" />
<property name="password" value="${mail.password}" />
<property name="defaultEncoding" value="UTF-8"></property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
</props>
</property>
</bean>
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="resourceLoaderPath" value="classpath:velocity"></property>
</bean>
<bean id="templateMail" class="com.chenlb.mail.VelocityTemplateMailMessage">
<property name="javaMailSender" ref="mailSender"></property>
<property name="from" value="${mail.from}"></property>
<property name="encoding" value="UTF-8"></property>
<property name="templateLocation" value="test.vm"></property>
<property name="velocityEngine" ref="velocityEngine"></property>
<property name="title" value="wwww.blogjava.net/chenlb"></property>
</bean>
</beans>
说明:模板文件放到classpath的velocity目录下,可自行改。
3.发送者邮件信息,mail.properties(classpath位置):
mail.from=yourname@126.com
mail.host=smtp.126.com
mail.password=yourpassword
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.username=yourname
4.模板文件,text.vm(classpath的velocity目录下):
你好!${me} 这是模板生成的邮件。
5.使用:
VelocityTemplateMailMessage vtmm = (VelocityTemplateMailMessage) context.getBean("templateMail");
Map<String, String> data = new HashMap<String, String>();
data("me","yourname");
vtmm.setModel(data);
vtmm.setToMail("yourOtherMail@163.com");
vtmm.setTitle("mail with veloctiy and spring");
vtmm.send();
看下是否收到邮件了。^_^
posted @
2007-08-21 19:43 流浪汗 阅读(3322) |
评论 (6) |
编辑 收藏
请参:
方法一:使用插入分节符的方式在第一页的最后,插入/分隔符/分节符使之与后面的成为两节再从第二页即第二节的页眉处插入页码设置页码的起始编号为1.
方法二:使用首页不同的设置,可见页面设置/版式:首页不同,将首页设置为与后面不一样的页眉页脚,在第二页的页眉中的页码格式设置(页眉页码工具栏),设置起始页码为1.
方法三使用域计算,在页眉或者页脚处插入如下域代码:{ if { page } > 1 { = { page } - 1 } "" }
此域代码的意思是如果页码大于1,则当前页码数-1,反之则为空.
注意花括号为CTRL+F9系统自动插入的,文字为英文标点下的字符输入,中间有空格详细的域使用方法可见置顶贴子<也谈域在WORD中的应用>
相关链接:http://club.excelhome.net/dispbbs.asp?BoardID=23&replyID=326315&id=67463&skin=0
http://club.excelhome.net/dispbbs.asp?boardID=23&ID=48825&page=1
posted @
2007-08-21 17:08 流浪汗 阅读(2092) |
评论 (0) |
编辑 收藏
数据源:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/study"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>
事务管理者:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
被管理的对象:
<bean id="myBusinessObjectTarget" class="mybusiness.MyBusinessObject"></bean>
事务性代理对象:
<bean id="myBusinessObject" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"></property>
<property name="target" ref="myBusinessObjectTarget"></property>
<property name="transactionAttributes">
<props>
<prop key="myBusinessMethod">
PROPAGATION_REQUIRED,-MyCheckedException
</prop>
</props>
</property>
</bean>
说明:-MyCheckedException表示抛出此导常时回滚,+MyCheckedException表示抛出此导常时提交。
MyBusinessObject:
package mybusiness;
/**
*
* 2007-8-20 上午11:26:28
* @author chenlb
*/
public class MyBusinessObject {
public void myBusinessMethod() throws MyCheckedException {
// do some resource access
// return some result object or throw MycheckedException
}
}
声明式事务的其中一种形式。^_^
posted @
2007-08-20 11:39 流浪汗 阅读(575) |
评论 (0) |
编辑 收藏
spring 对 JdbcTemplate……的事务管理不用担心。就是对直接Jdbc实现的Dao事务管理有点小问题,如:我直接,用dataSource.getConnection()。spring是管理不了事务的。原因是Jdbc实现的Dao里的connection是自动提交的。要改用经过spring 处理过的connection = DataSourceUtil.getConnection(dataSource);才行。
我这有个例子——用户注册,有备份。只是例子而且。
下面是原始的Dao实现,
备份方法:
public User backUp(User user) throws SQLException {
Connection conn = dataSource.getConnection();
try {
PreparedStatement pstmt = conn.prepareStatement("insert into user(name) values (?)");
pstmt.setString(1, user.getName()+" 备份");
pstmt.executeUpdate();
pstmt = conn.prepareStatement("select last_insert_id()");
ResultSet rs = pstmt.executeQuery();
if(rs != null && rs.next()) {
user.setUId(rs.getInt(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
throw e;
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
System.out.println("数据库连接关闭失败!");
}
}
}
return user;
}
现在要改成:
public User backUp(User user) throws SQLException {
Connection conn = DataSourceUtils.getConnection(dataSource);
try {
PreparedStatement pstmt = conn.prepareStatement("insert into user(name) values (?)");
pstmt.setString(1, user.getName()+" 备份");
pstmt.executeUpdate();
pstmt = conn.prepareStatement("select last_insert_id()");
ResultSet rs = pstmt.executeQuery();
if(rs != null && rs.next()) {
user.setUId(rs.getInt(1));
}
} catch (SQLException e) {
throw e;
} finally {
DataSourceUtils.releaseConnection(conn, dataSource);
}
return user;
}
然后你在逻辑层就可以用spring的任何方式管理事务了。
如:注册
public User register(User user) throws SQLException {
userDao.backUp(user);
userDao.insert(user);
return user;
}
posted @
2007-08-20 11:22 流浪汗 阅读(642) |
评论 (0) |
编辑 收藏