??xml version="1.0" encoding="utf-8" standalone="yes"?> XML文g: dXML单个节点Qinputs下的columns节点Q? dXML inputs节点下所有的input节点Q?/p> 获取当前的月份和日期 试了一?果然正确 后来查看java doc文档,MONTH字段解释如下 Field number for q个字段的值只是说明get()的属性字D?来获取month?/p>
以下取其? Calendar CD = Calendar.getInstance(); Calendar cal = Calendar.getInstance(); //当前q?br />
int year = cal.get(Calendar.YEAR); java产生随机数的几种方式 ?在java.utilq个包里面提供了一个Random的类Q我们可以新Z个Random的对象来产生随机敎ͼ他可以生随机整数、随机float、随机doubleQ随机longQ这个也是我们在j2me的程序里l常用的一个取随机数的Ҏ(gu)?/p>
?在我们的SystemcM有一个currentTimeMillis()Ҏ(gu)Q这个方法返回一个从1970q?????U到目前的一个毫U数Q返回类型是longQ我们可以拿他作Z个随机数Q我们可以拿他对一些数取模Q就可以把他限制在一个范围之内啦 其实在Random的默认构造方法里也是使用上面W三U方法进行随机数的生的 java.util.RandomcL两种方式构徏方式Q带U子和不带种?/p>
不带U子Q? public class RandomTest { } public static void main(String[] args) { 两种方式的差别在?/p>
(1) 首先h开Java DocQ我们会(x)看到Randomcȝ说明Q?/p>
此类的实例用于生成伪随机数流Q此cM?48 位的U子Q该U子可以使用U性同余公式对其进行修改(请参?Donald Knuth 的《The Art of Computer Programming, Volume 2》,W?3.2.1 节)? 如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证实现这U特性,我们为类Random指定了特定的法。ؓ(f)?Java 代码的完全可UL性,Java 实现必须让类 Random 使用此处所C的所有算法。但是允?Random cȝ子类使用其他法Q只要其W合所有方法的常规协定卛_? Java Doc对Randomcdl解释得非常明白Q我们的试也验证了q一炏V?/p>
(2) 如果没有提供U子敎ͼRandom实例的种子数是当前旉的毫U数Q可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码Q我们可以非常明地看到q一炏V?/p>
/** random对象的nextInt(),nextInt(int n)Ҏ(gu)的说明:(x) int nextInt() 随机数在实际中用很q泛Q比如要随即生成一个固定长度的字符丌Ӏ数字。或者随即生成一个不定长度的数字、或者进行一个模拟的随机选择{等。Java提供了最基本的工P可以帮助开发者来实现q一切?/p>
一、Java随机数的产生方式 在Java中,随机数的概念从广义上,有三U?/p>
1、通过System.currentTimeMillis()来获取一个当前时间毫U数的long型数字?/p>
2、通过Math.random()q回一??之间的double倹{?/p>
3、通过RandomcL产生一个随机数Q这个是专业的Random工具c,功能强大?/p>
二、RandomcAPI说明 1、Java API说明 Randomcȝ实例用于生成伪随机数。此cM?48 位的U子Q用线性同余公式对其进行修?请参?Donald Knuth 的《The Art of Computer ProgrammingQ?Volume 2》,W?3.2.1 ??/p>
如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证属性的实现Qؓ(f)c?Random 指定了特定的法?/p>
很多应用E序?x)发?Math cM?random Ҏ(gu)更易于用?/p>
2、方法摘?/p>
Random() 创徏一个新的随机数生成器?/p>
Random(long seed) 使用单个 long U子创徏一个新随机数生成器Q?public Random(long seed) { setSeed(seed); } next Ҏ(gu)使用它来保存随机数生成器的状态?/p>
protected int next(int bits) 生成下一个伪随机数?/p>
boolean nextBoolean() q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、均匀分布?boolean 倹{?/p>
void nextBytes(byte[] bytes) 生成随机字节q将其置于用h供的字节数组中?/p>
double nextDouble() q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0.0 ?1.0之间均匀分布?double 倹{?/p>
float nextFloat() q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0.0 ?1.0 之间均匀分布?float 倹{?/p>
double nextGaussian() q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、呈高斯(“正常?#8221;)分布?double |其^均值是 0.0Q标准偏差是 1.0?/p>
int nextInt() q回下一个伪随机敎ͼ它是此随机数生成器的序列中均匀分布?int 倹{?/p>
int nextInt(int n) q回一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0(包括)和指定?不包?之间均匀分布?int倹{?/p>
long nextLong() q回下一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、均匀分布?long 倹{?/p>
void setSeed(long seed) 使用单个 long U子讄此随机数生成器的U子?/p>
三、RandomcM用说?/p>
1、带U子与不带种子的区别RandomcM用的Ҏ(gu)是策略分带种子和不带U子的Random的实例?/p>
通俗_(d)两者的区别是:(x)带种子的Q每ơ运行生成的l果都是一L(fng)?/p>
不带U子的,每次q行生成的都是随机的Q没有规律可a?/p>
2、创Z带种子的Random对象 Random random = new Random(); 3、创Z带种子的Random对象有两U方法:(x) 1) Random random = new Random(555L); 2) Random random = new Random();random.setSeed(555L); 四、测?/p>
通过一个例子说明上面的用法 import java.util.Random; /** * Java随机数测?/p>
* User: leizhimin * Date: 2008-11-19 17:52:50 */ public class TestRandomNum { public static void main(String[] args) { randomTest(); testNoSeed(); testSeed1(); testSeed2(); } public static void randomTest() { System.out.println("--------------test()--------------"); //q回以毫Uؓ(f)单位的当前时间?/p>
long r1 = System.currentTimeMillis(); //q回带正L(fng) double |大于或等?0.0Q小?1.0?/p>
double r2 = Math.random(); //通过RandomcL获取下一个随机的整数 int r3 = new Random().nextInt(); System.out.println("r1 = " + r1); System.out.println("r3 = " + r2); System.out.println("r2 = " + r3); } public static void testNoSeed() { System.out.println("--------------testNoSeed()--------------"); //创徏不带U子的测试Random对象 Random random = new Random(); for (int i = 0; i < 3; i++) { System.out.println(random.nextInt()); } } public static void testSeed1() { System.out.println("--------------testSeed1()--------------"); //创徏带种子的试Random对象 Random random = new Random(555L); for (int i = 0; i < 3; i++) { System.out.println(random.nextInt()); } } public static void testSeed2() { System.out.println("--------------testSeed2()--------------"); //创徏带种子的试Random对象 Random random = new Random(); random.setSeed(555L); for (int i = 0; i < 3; i++) { System.out.println(random.nextInt()); } } } q行l果Q?/p>
--------------test()-------------- r1 = 1227108626582 r3 = 0.5324887850155043 r2 = -368083737 --------------testNoSeed()-------------- 809503475 1585541532 -645134204 --------------testSeed1()-------------- -1367481220 292886146 -1462441651 --------------testSeed2()-------------- -1367481220 292886146 -1462441651 Process finished with exit code 0 通过testSeed1()与testSeed2()Ҏ(gu)的结果可以看刎ͼ两个打印l果相同Q因Z们种子相同,再运行一ơ,l果q是一L(fng)Q这是带种子随机数的特性?/p>
而不带种子的Q每ơ运行结果都是随机的?/p>
五、综合应?/p>
下面通过最q写的一个随机数工具cL展示用法Q?/p>
import java.util.Random; /** * 随机数、随卛_W串工具 * User: leizhimin * Date: 2008-11-19 9:43:09 */ public class RandomUtils { public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String numberChar = "0123456789"; /** * q回一个定长的随机字符?只包含大写字母、数? * * @param length 随机字符串长?/p>
* @return 随机字符?/p>
*/ public static String generateString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(allChar.charAt(random.nextInt(allChar.length()))); } return sb.toString(); } /** * q回一个定长的随机U字母字W串(只包含大写字母) * * @param length 随机字符串长?/p>
* @return 随机字符?/p>
*/ public static String generateMixString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(allChar.charAt(random.nextInt(letterChar.length()))); } return sb.toString(); } /** * q回一个定长的随机U大写字母字W串(只包含大写字母) * * @param length 随机字符串长?/p>
* @return 随机字符?/p>
*/ public static String generateLowerString(int length) { return generateMixString(length).toLowerCase(); } /** * q回一个定长的随机U小写字母字W串(只包含大写字母) * * @param length 随机字符串长?/p>
* @return 随机字符?/p>
*/ public static String generateUpperString(int length) { return generateMixString(length).toUpperCase(); } /** * 生成一个定长的U?字符?/p>
* * @param length 字符串长?/p>
* @return U?字符?/p>
*/ public static String generateZeroString(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append('0'); } return sb.toString(); } /** * Ҏ(gu)数字生成一个定长的字符Ԍ长度不够前面? * * @param num 数字 * @param fixdlenth 字符串长?/p>
* @return 定长的字W串 */ public static String toFixdLengthString(long num, int fixdlenth) { StringBuffer sb = new StringBuffer(); String strNum = String.valueOf(num); if (fixdlenth - strNum.length() >= 0) { sb.append(generateZeroString(fixdlenth - strNum.length())); } else { throw new RuntimeException("数? + num + "转化为长度ؓ(f)" + fixdlenth + "的字W串发生异常!"); } sb.append(strNum); return sb.toString(); } /** * Ҏ(gu)数字生成一个定长的字符Ԍ长度不够前面? * * @param num 数字 * @param fixdlenth 字符串长?/p>
* @return 定长的字W串 */ public static String toFixdLengthString(int num, int fixdlenth) { StringBuffer sb = new StringBuffer(); String strNum = String.valueOf(num); if (fixdlenth - strNum.length() >= 0) { sb.append(generateZeroString(fixdlenth - strNum.length())); } else { throw new RuntimeException("数? + num + "转化为长度ؓ(f)" + fixdlenth + "的字W串发生异常!"); } sb.append(strNum); return sb.toString(); } public static void main(String[] args) { System.out.println(generateString(15)); System.out.println(generateMixString(15)); System.out.println(generateLowerString(15)); System.out.println(generateUpperString(15)); System.out.println(generateZeroString(15)); System.out.println(toFixdLengthString(123, 15)); System.out.println(toFixdLengthString(123L, 15)); } } q行l果Q?/p>
vWMBPiNbzfGCpHG 23hyraHdJkKPwMv tigowetbwkm1nde BPZ1KNEJPHB115N 000000000000000 000000000000123 000000000000123 Process finished with exit code 0 六、ȝ 1、随机数很常用,在Java有三U生方式,以Random随机数的使用最为复杂?/p>
2、Randomcd象有是否带种子之分,带种子的只要U子相同Q多ơ运行,生成随机数的l果L那样?/p>
3、带U子随机数的带种子的对象创徏方式有两U,效果一栗但是带U子的随机数用处g不大?/p>
4、Random的功能涵盖了Math.random()的功能?/p>
5、可以通过随机数去做实现随机字W串{复杂的随机数据?/p>
6、不要研I不重复的随机数Q意义不大?/p>
在Java 中我们可以用java.util.RandomcL产生一个随机数发生器。它有两UŞ式的构造函敎ͼ分别是Random()和Random(long seed)。Random()使用当前旉即System.currentTimeMillis()作ؓ(f)发生器的U子QRandom(long seed)使用指定的seed作ؓ(f)发生器的U子?br />
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
/**
* d有命名空间的XMLQ支持节点读取不完整Q?br />
* @author Ai Bo
* @version 1.3.1 Date 2011-12-14
*/
public class Dom4jFactory {
private SAXReader reader = new SAXReader();
private Document document;
private static Element root;
private static Map<String, String> xmlMap = new HashMap<String, String>();
public Dom4jFactory(String path) {
super();
try {
document = reader.read(path);
root = document.getRootElement();
String defaultNamespace = root.getNamespaceURI();
xmlMap.put("default", defaultNamespace);
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static List<?> getSelectNodes(String arg0) {
XPath selector = root.createXPath("//default:" + arg0);
selector.setNamespaceURIs(xmlMap);
return selector.selectNodes(root);
}
@SuppressWarnings("unchecked")
public <T> T getSelectObject(String arg0){
List<?> selectNodes = getSelectNodes(arg0);
if(selectNodes.size()==1){
return (T) selectNodes.get(0);
}else{
return null;
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<inputs xmlns="http://input.abio.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://input.abio.com.cn http://www.abio.com.cn/sproinput.xsd">
<columns>2</columns>
<input id="id" datatype="String" minlen="1" maxlen="32" casetype="U" width="40" name_zh="数据代码" inputtype="text" editable="2" gridwidth="3"></input>
<input id="organNo" datatype="integer" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="机构~号" inputtype="text" editable="2"></input>
<input id="organName" datatype="String" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="机构名称" inputtype="text" editable="2"></input>
<input id="pOrganNo" datatype="String" nullable="false" minlen="1" maxlen="20" casetype="U" width="40" name_zh="父机构编? inputtype="text" editable="2"></input>
<input id="effTime" datatype="Date" validator="Date" nullable="false" format="yyyy-MM-dd" minlen="8" maxlen="8" casetype="U" width="40" name_zh="有效日期" inputtype="date" editable="2"></input>
<input id="createUser" datatype="String" minlen="1" maxlen="20" casetype="U" width="40" name_zh="创徏? inputtype="text" editable="2"></input>
<input id="createTime" datatype="Date" minlen="10" maxlen="20" casetype="U" width="40" name_zh="创徏日期" editable="2" inputtype="text"></input>
<input id="updateUser" datatype="String" minlen="1" maxlen="20" casetype="U" width="40" name_zh="更新? inputtype="text" editable="2"></input>
<input id="updateTime" datatype="Date" minlen="10" maxlen="20" casetype="U" width="40" name_zh="更新日期" editable="2" inputtype="text"></input>
</inputs>
Dom4jFactory df = new Dom4jFactory("c:\\test.xml");
DefaultElement columnsitem = df.getSelectObject("columns");
List<DefaultElement> inputNodes = df.getSelectNodes("input");
]]>
-------------------------
http://java.sun.com/j2se/1.3/download.html
http://java.sun.com/j2se/1.4.2/download.html
http://java.sun.com/javase/downloads/index_jdk5.jsp
http://java.sun.com/javase/downloads/index.jsp
J2EE DK & API下蝲
-------------------------
http://java.sun.com/j2ee/1.3/index.jsp
http://java.sun.com/j2ee/1.3/download.html
http://java.sun.com/j2ee/1.4/index.jsp
http://java.sun.com/j2ee/1.4/download.html
http://java.sun.com/javaee/downloads/index.jsp
JDK1.6API中文版(全)
-------------------------
* HTML 格式(在线英文) http://java.sun.com/javase/6/docs/
* HTML 格式(在线中文) http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html
* zip 格式(中文) http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip
* CHM 格式(中文) http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM
JDK1.5API中文版(全)
-------------------------
* HTML 格式(在线英文) http://java.sun.com/javase/5/docs/
* HTML 格式(在线中文) http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html
* zip 格式(中文) http://gceclub.sun.com.cn/Java_Docs/html_zh_CN.zip
* CHM 格式(中文) http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/JDK_API_1_5_zh_CN.CHM
相关|站
-------------------------
http://java.sun.com
http://gceclub.sun.com.cn/
http://developers.sun.com/downloads/
http://java.sun.com/javaee/downloads/
http://java.sun.com/javase/downloads/
http://www.netbeans.info/downloads/
]]>
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipCompressor {
static final int BUFFER = 8192;
private File zipFile;
public ZipCompressor(String pathName) {
zipFile = new File(pathName);
}
public void compress(String srcPathName) {
File file = new File(srcPathName);
if (!file.exists())
throw new RuntimeException(srcPathName + "不存在!");
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,
new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
String basedir = "";
compress(file, out, basedir);
out.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void compress(File file, ZipOutputStream out, String basedir) {
/* 判断是目录还是文?nbsp;*/
if (file.isDirectory()) {
System.out.println("压羃Q?/span>" + basedir + file.getName());
this.compressDirectory(file, out, basedir);
} else {
System.out.println("压羃Q?/span>" + basedir + file.getName());
this.compressFile(file, out, basedir);
}
}
/** 压羃一个目?nbsp;*/
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists())
return;
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 递归 */
compress(files[i], out, basedir + dir.getName() + "/");
}
}
/** 压羃一个文?nbsp;*/
private void compressFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**測試是否可以壓縮*/
public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compress("E:\\test");
System.out.println("OK.");
}
}
]]>
public class object {
public static void main(String[] args) {
String str1 = new String("abcde");
String str2 = new String("abcde");
String str3 = new String("abcde");
String str4 = new String("abcde");
String str5 = new String("abcde");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
}
q行l果不是Q?br />
list.size()=5
after remove:list.size()=0
居然是:(x)
list.size()=5
after remove:list.size()=2
原因QList每remove掉一个元素以后,后面的元素都?x)向前移动,此时如果执行i=i+1Q则刚刚U过来的元素没有被读取?br />
解决Ҏ(gu)Q?br />
1.倒过来遍历list
for (int i = list.size()-1; i > =0; i--) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
}
}
2.每移除一个元素以后再把iUd?br />
for (int i = 0; i < list.size(); i++) {
if (((String) list.get(i)).startsWith("abcde")) {
list.remove(i);
i=i-1;
}
}
3.使用iterator.remove()Ҏ(gu)删除
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
}
System.out.println("after remove:list.size()=" + list.size());
}
}
]]>
2.package com;
3.
4.import java.io.FileOutputStream;
5.
6.
7.
8.public class ToImg {
9. public static void main(String[] args) throws Exception {
10. toSmaillImg("untitled.bmp","thumb.bmp");
11. }
12.
13. public static void toSmaillImg(String filePath,String thumbPath) throws Exception{
14. String newurl =thumbPath;
15. java.awt.Image bigJpg = javax.imageio.ImageIO.read(new java.io.File(filePath));
16. float tagsize = 100;
17. int old_w = bigJpg.getWidth(null);
18. int old_h = bigJpg.getHeight(null);
19. int new_w = 0;
20. int new_h = 0;
21. float tempdouble;
22. tempdouble = old_w > old_h ? old_w/tagsize : old_h/tagsize;
23. new_w = Math.round(old_w/tempdouble);
24. new_h = Math.round(old_h/tempdouble);
25. java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB);
26. tag.getGraphics().drawImage(bigJpg,0,0,new_w,new_h,null);
27. FileOutputStream newimage = new FileOutputStream(newurl);
28. com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(newimage);
29. encoder.encode(tag);
30. newimage.close();
31. }
32.}
]]>
本例子用了jspsmartlgq行上传Q这里可以免费下载该lgwww.jspsmart.com
下蝲解压后,jar包复制到 \WEB-INF\lib 目录后重启服务器Qjspsmart卛_正常使用?br />
1、uploadimage.jsp
<%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,java.sql.*,com.jspsmart.upload.*,java.util.*,cn.oof.database.*,cn.oof.house.*"%>
<%
SmartUpload mySmartUpload =new SmartUpload();
long file_size_max=4000000;
String fileName2="",ext="",testvar="";
String url="uploadfile/images/"; //应保证在根目录中有此目录的存?br />
//初始?/span>
mySmartUpload.initialize(pageContext);
//只允怸载此cL?/span>
try {
mySmartUpload.setAllowedFilesList("jpg,gif");
//上蝲文g
mySmartUpload.upload();
} catch (Exception e){
%>
<SCRIPT language=javascript>
alert("只允怸?jpg?gifcd囄文g");
window.location='upfile.jsp';
</script>
<%
}
try{
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
if (myFile.isMissing()){%>
<SCRIPT language=javascript>
alert("请先选择要上传的文g");
window.location='upfile.jsp';
</script>
<%}
else{
//String myFileName=myFile.getFileName(); //取得上蝲的文件的文g?/span>
ext= myFile.getFileExt(); //取得后缀?/span>
int file_size=myFile.getSize(); //取得文g的大?nbsp;
String saveurl="";
if(file_size<file_size_max){
//更改文g名,取得当前上传旉的毫U数?/span>
Calendar calendar = Calendar.getInstance();
String filename = String.valueOf(calendar.getTimeInMillis());
saveurl=request.getRealPath("/")+url;
saveurl+=filename+"."+ext; //保存路径
myFile.saveAs(saveurl,mySmartUpload.SAVE_PHYSICAL);
//out.print(filename);
//-----------------------上传完成Q开始生成羃略图-------------------------
java.io.File file = new java.io.File(saveurl); //d刚才上传的文?/span>
String newurl=request.getRealPath("/")+url+filename+"_min."+ext; //新的~略图保存地址
Image src = javax.imageio.ImageIO.read(file); //构造Image对象
float tagsize=200;
int old_w=src.getWidth(null); //得到源图?/span>
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0; //得到源图?/span>
int tempsize;
float tempdouble;
if(old_w>old_h){
tempdouble=old_w/tagsize;
}else{
tempdouble=old_h/tagsize;
}
new_w=Math.round(old_w/tempdouble);
new_h=Math.round(old_h/tempdouble);//计算新图长宽
BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //l制~小后的?/span>
FileOutputStream newimage=new FileOutputStream(newurl); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
encoder.encode(tag); //qJPEG~码
newimage.close();
}
else{
out.print("<SCRIPT language='javascript'>");
out.print("alert('上传文g大小不能过"+(file_size_max/1000)+"K');");
out.print("window.location='upfile.jsp;'");
out.print("</SCRIPT>");
}
}
}catch (Exception e){
e.toString();
}
%>
2 upload.htm
<html>
<head>
<title>请选择上传的图?/span></title>
</head>
<body>
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="45" align="center" valign="middle"><form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1">
请选择上传的图?br />
<input type="file" name="file">
<input type="submit" name="Submit" value="上传">
</form></td>
</tr>
</table>
</body>
</html>
来源:http://www.moon-soft.com/doc/49683.htm
]]>
Calendar calendar=Calendar.getInstance();
calendar.setTime(new Date());
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天的日?nbsp;
calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+1);//让日期加1
System.out.println(calendar.get(Calendar.DATE));//?之后的日期Top
2.用java.text.SimpleDateFormat和java.util.Date来实?br />
Date d=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
System.out.println("今天的日期:(x)"+df.format(d));
System.out.println("两天前的日期Q?/span>" + df.format(new Date(d.getTime() - 2 * 24 * 60 * 60 * 1000)));
System.out.println("三天后的日期Q?/span>" + df.format(new Date(d.getTime() + 3 * 24 * 60 * 60 * 1000)));
]]>
java.text.DecimalFormat df = new java.text.DecimalFormat("00.00");//""00.00"数点后面的0的个数表C小数点的个?/span>
String b = df.format(a);
------打印l果-----------------
1123454.6789
]]>
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
String dateStr1="2008-3-16";
String dateStr2="2008-3-24";
java.util.Date dateBegin=formater.parse(dateStr1);
java.util.Date dateEnd=formater.parse(dateStr2);
Calendar ca=Calendar.getInstance();
while(dateBegin.compareTo(dateEnd)<=0){
ca.setTime(dateBegin);
ca.add(ca.DATE,1);//把dateBegin加上1天然后重新赋值给date1
dateBegin=ca.getTime();
}
2、Java获取当月的第一天和最后一?br />
Calendar cal = Calendar.getInstance();
SimpleDateFormat datef=new SimpleDateFormat("yyyy-MM-dd");
//当前月的最后一?nbsp;
cal.set( Calendar.DATE, 1 );
cal.roll(Calendar.DATE, - 1 );
Date endTime=cal.getTime();
String endTime1=datef.format(endTime)+" 23:59:59";
//当前月的W一?nbsp;
cal.set(GregorianCalendar.DAY_OF_MONTH, 1);
Date beginTime=cal.getTime();
String beginTime1=datef.format(beginTime)+" 00:00:00";
]]>
]]>
]]>
int day = date.get(Calendar.DAY_OF_MONTH);
get
and set
indicating the month. This is a calendar-specific value. The first month of the year is JANUARY
which is 0; the last depends on the number of months in a year.
int YY = CD.get(Calendar.YEAR) ;
int MM = CD.get(Calendar.MONTH)+1;
int DD = CD.get(Calendar.DATE);
int HH = CD.get(Calendar.HOUR);
int NN = CD.get(Calendar.MINUTE);
int SS = CD.get(Calendar.SECOND);
int MI = CD.get(Calendar.MILLISECOND);
//当前?br />
int month = (cal.get(Calendar.MONTH))+1;
//当前月的W几天:(x)卛_前日
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
//当前Ӟ(x)HOUR_OF_DAY-24时ӞHOUR-12时?br />
int hour = cal.get(Calendar.HOUR_OF_DAY);
//当前?br />
int minute = cal.get(Calendar.MINUTE);
//当前U?br />
int second = cal.get(Calendar.SECOND);
//0-上午Q?-下午
int ampm = cal.get(Calendar.AM_PM);
//当前q的W几?br />
int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
//当前月的W几?br />
int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);
//当前q的W几?br />
int day_of_year = cal.get(Calendar.DAY_OF_YEAR);
]]>
(数据cd)(最?Math.random()*(最大?最?1))
?
(int)(1+Math.random()*(10-1+1))
??0的int型随?/font>
获得随机?br />
for (int i=0;i<30;i++)
{System.out.println((int)(1+Math.random()*10));}
(int)(1+Math.random()*10)
通过java.Math包的randomҎ(gu)得到1-10的int随机?br />
公式?最?--最大|整数Q的随机?br />
Q类型)最?Math.random()*最大?/font>
Random ra =new Random();
for (int i=0;i<30;i++)
{System.out.println(ra.nextInt(10)+1);}
通过java.util包中的RandomcȝnextIntҎ(gu)来得?-10的int随机?/font>
一.在j2se里我们可以用Math.random()Ҏ(gu)来生一个随机数Q这个生的随机数是0-1之间的一个doubleQ我们可以把他乘以一定的敎ͼ比如说乘?00Q他是?00以内的随机,q个在j2me中没有?/p>
对于Ҏ(gu)二中的RandomcL以下说明Q?/p>
此种方式会(x)q回随机的数字,每次q行l果不一?/p>
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
带种子:(x)
此种方式Q无论程序运行多次Q返回结果都是一L(fng)
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
* Creates a new random number generator. Its seed is initialized to
* a value based on the current time:
* Random() { this(System.currentTimeMillis()); }java.lang.System#currentTimeMillis()
*/
public Random() { this(System.currentTimeMillis()); }
另外Q?
q回下一个伪随机敎ͼ它是此随机数生成器的序列中均匀分布?int 倹{?
int nextInt(int n)
q回一个伪随机敎ͼ它是从此随机数生成器的序列中取出的、在 0Q包括)和指定|不包括)之间均匀分布?int倹{?nbsp;
Java随机数ȝ
随机数发生器(Random)对象产生以后Q通过调用不同的methodQnextInt()、nextLong()、nextFloat()、nextDouble(){获得不同类型随机数?br />
1>生成随机?br />
Random random = new Random();
Random random = new Random(100);//指定U子?00
random调用不同的方法,获得随机数?br />
如果2个Random对象使用相同的种子(比如都是100Q,q且以相同的序调用相同的函敎ͼ那它们返回值完全相同。如下面代码中两个Random对象的输出完全相?br />
import java.util.*;
class TestRandom {
public static void main(String[] args) {
Random random1 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random1.nextFloat());
System.out.println(random1.nextBoolean());
Random random2 = new Random(100);
System.out.println(random2.nextInt());
System.out.println(random2.nextFloat());
System.out.println(random2.nextBoolean());
}
}
2>指定范围内的随机?br />
随机数控制在某个范围?使用模数q算W?
import java.util.*;
class TestRandom {
public static void main(String[] args) {
Random random = new Random();
for(int i = 0; i < 10;i++) {
System.out.println(Math.abs(random.nextInt())%10);
}
}
}
获得的随机数有正有负的,用Math.abs使获取数据范围ؓ(f)非负?br />
3>获取指定范围内的不重复随机数
import java.util.*;
class TestRandom {
public static void main(String[] args) {
int[] intRet = new int[6];
int intRd = 0; //存放随机?br />
int count = 0; //记录生成的随机数个数
int flag = 0; //是否已经生成q标?br />
while(count<6){
Random rdm = new Random(System.currentTimeMillis());
intRd = Math.abs(rdm.nextInt())%32+1;
for(int i=0;i<count;i++){
if(intRet[i]==intRd){
flag = 1;
break;
}else{
flag = 0;
}
}
if(flag==0){
intRet[count] = intRd;
count++;
}
}
for(int t=0;t<6;t++){
System.out.println(t+"->"+intRet[t]);
}
}
}
Java中的随机数是否可以重复?Java中生的随机数能否可以用来生数据库主键Q带着q个问题Q我们做了一pd试?br />
1.试一Q?使用不带参数的Random()构造函?br />
public class RandomTest {
public static void main(String[] args) {
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
}
E序q行l果Q?br />
-1761145445
-1070533012
216216989
-910884656
-1408725314
-1091802870
1681403823
-1099867456
347034376
-1277853157
再次q行该程序:(x)
-169416241
220377062
-1140589550
-1364404766
-1088116756
2134626361
-546049728
1132916742
-1522319721
1787867608
从上面的试我们可以看出Q用不带参数的Random()构造函C生的随机C?x)重复。那么,什么情况下Java?x)生重复的随机数呢Q且看下面的试?br />
2. 试二:(x)为Random讄U子?br />
public class RandomTest_Repeat {
/**
* @param args
*/
public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
}
无论E序q行多少ơ,其结果LQ?br />
-1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
1581279777
-778209333
1532292428
甚至在不同的机器上测试,试l果也不?x)改变?br />
3.原因分析Q?br />
(1) 首先h开Java DocQ我们会(x)看到Randomcȝ说明Q?br />
此类的实例用于生成伪随机数流Q此cM?48 位的U子Q该U子可以使用U性同余公式对其进行修改(请参?Donald Knuth 的《The Art of Computer Programming, Volume 2》,W?3.2.1 节)?br />
如果用相同的U子创徏两个 Random 实例Q则Ҏ(gu)个实例进行相同的Ҏ(gu)调用序列Q它们将生成q返回相同的数字序列。ؓ(f)了保证实现这U特性,我们为类Random指定了特定的法。ؓ(f)?Java 代码的完全可UL性,Java 实现必须让类 Random 使用此处所C的所有算法。但是允?Random cȝ子类使用其他法Q只要其W合所有方法的常规协定卛_?br />
Java Doc对Randomcdl解释得非常明白Q我们的试也验证了q一炏V?br />
(2) 如果没有提供U子敎ͼRandom实例的种子数是当前旉的毫U数Q可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码Q我们可以非常明地看到q一炏V?br />
/**
* Creates a new random number generator. Its seed is initialized to
* a value based on the current time:
* <blockquote><pre>
* public Random() { this(System.currentTimeMillis()); }</pre></blockquote>
*
* @see java.lang.System#currentTimeMillis()
*/
public Random() { this(System.currentTimeMillis()); }
4. l论Q?br />
通过上面的测试和分析Q我们会(x)对RandomcL较ؓ(f)深刻的理解。同Ӟ我觉得,通过阅读Java Doc的API文档Q可以很好地提高我们的Java~程能力Q做?#8220;知其?#8221;Q一旦遇到费解的问题Q不妨打开Java的源代码Q这h们就能做?#8220;知其所以然”?/p>
]]>
TOMCAT的配|?br />
http://download.chinaitlab.com/soft/10791.htm
JAVA配置文g~写说明文档
http://download.chinaitlab.com/soft/10010.htm
一步一步学?x)配|Kjava开发环?br />
http://download.chinaitlab.com/soft/9483.htm
Weblogic7开发EJB的配|?br />
http://download.chinaitlab.com/soft/4938.htm
图解JSP环境安装配置
http://download.chinaitlab.com/soft/2157.htm
Tomcat配置Ҏ(gu)
http://download.chinaitlab.com/soft/931.htm
全程指导Linux下JAVA环境配置
http://download.chinaitlab.com/soft/11272.htm
学习(fn)Ҏ(gu)Q?br />
通过JB4学习(fn)JAVA
http://download.chinaitlab.com/soft/7589.htm
10步学?nbsp;JavaScript
http://download.chinaitlab.com/soft/6492.htm
Java Sctipt学习(fn)不求?br />
http://download.chinaitlab.com/soft/6361.htm
JSP学习(fn)指南
http://download.chinaitlab.com/soft/6152.htm
JAVA学习(fn)文档
http://download.chinaitlab.com/soft/6114.htm
J2EE学习(fn)W记
http://download.chinaitlab.com/soft/6048.htm
JavaScript学习(fn)
http://download.chinaitlab.com/soft/3029.htm
Java2 学习(fn)指南
http://download.chinaitlab.com/soft/2743.htm
Juniper学习(fn)指南
http://download.chinaitlab.com/soft/2227.htm
J2EE学习(fn)资料
http://download.chinaitlab.com/soft/1618.htm
JSP由浅入深
http://download.chinaitlab.com/soft/1315.htm
面向对象~程Q?br />
Java面向对象~程指南
http://download.chinaitlab.com/soft/9792.htm
JAVA的核心技术:(x)面向对象~程
http://download.chinaitlab.com/soft/9093.htm
Java ?nbsp;UML 面向对象E序设计
http://download.chinaitlab.com/soft/6053.htm
Java 2 ~程21天自学?br />
http://download.chinaitlab.com/soft/10507.htm
J2EE~程h
http://download.chinaitlab.com/soft/10506.htm
Java面向对象~程指南
http://download.chinaitlab.com/soft/9792.htm
Java专业~程指南
http://download.chinaitlab.com/soft/9791.htm
Java服务器高U编E?br />
http://download.chinaitlab.com/soft/9790.htm
J2EE EAI~程指南
http://download.chinaitlab.com/soft/9784.htm
J2MEMIDP无线讑֤~程指南
http://download.chinaitlab.com/soft/9765.htm
JAVA~程思想 中文?br />
http://download.chinaitlab.com/soft/9481.htm
Java XML~程指南
http://download.chinaitlab.com/soft/9097.htm
Java 数据库编E宝?br />
http://download.chinaitlab.com/soft/9095.htm
JAVA的核心技术:(x)面向对象~程
http://download.chinaitlab.com/soft/9093.htm
JDBC API数据库编E实作教?br />
http://download.chinaitlab.com/soft/9087.htm
核心 JSF ~程
http://download.chinaitlab.com/soft/7946.htm
JAVA 2应用~程150?br />
http://download.chinaitlab.com/soft/6815.htm
JAVA数据库编EJDBC
http://download.chinaitlab.com/soft/6113.htm
深入掌握J2EE~程技?br />
http://download.chinaitlab.com/soft/6030.htm
实用J2EE设计模式~程指南
http://download.chinaitlab.com/soft/5033.htm
Java for Internet~程技?br />
http://download.chinaitlab.com/soft/4198.htm
Java安全性编E指?br />
http://download.chinaitlab.com/soft/3773.htm
J2ME无线讑֤~程
http://download.chinaitlab.com/soft/3669.htm
J2EE EJB~程实例
http://download.chinaitlab.com/soft/3141.htm
Java~程思想 W三?br />
http://download.chinaitlab.com/soft/2982.htm
Java 极限~程
http://download.chinaitlab.com/soft/1707.htm
Java2~程详解
http://download.chinaitlab.com/soft/1705.htm
|络~程Q?br />
J2EE|络~程标准教程
http://download.chinaitlab.com/soft/9100.htm
Java|络~程实例
http://download.chinaitlab.com/soft/9090.htm
Java P2P|络~程技?br />
http://download.chinaitlab.com/soft/6333.htm
Java|络~程
http://download.chinaitlab.com/soft/3871.htm
|络~程基础之 Java Script
http://download.chinaitlab.com/soft/3618.htm
Solaris Shell ~程
http://download.chinaitlab.com/soft/6426.htm
SUN Solaris理手册
http://download.chinaitlab.com/soft/5732.htm
Solaris性能理
http://download.chinaitlab.com/soft/11247.htm
Solaris9安装指南
http://download.chinaitlab.com/soft/5022.htm
SOLARIS高pȝ理员指?br />
http://download.chinaitlab.com/soft/3726.htm
Solaris操作环境安全
http://download.chinaitlab.com/soft/1500.htm
Solaris GNOME2.0桌面用户指南
http://download.chinaitlab.com/soft/1488.htm
Solaris 9 12/03 安装指南
http://download.chinaitlab.com/soft/1484.htm
Solaris理员指?br />
http://download.chinaitlab.com/soft/1475.htm
中文Solaris9 pȝ理员指?br />
http://download.chinaitlab.com/soft/1463.htm
Solaris安全性专题指?br />
http://download.chinaitlab.com/soft/746.htm
XMLpdQ?br />
Java XML~程指南
http://download.chinaitlab.com/soft/9097.htm
JavaE序设计EJB、XML与数据库
http://download.chinaitlab.com/soft/9094.htm
XML l极教程
http://download.chinaitlab.com/soft/9057.htm
Java&XML应用
http://download.chinaitlab.com/soft/6211.htm
XML_JAVA指南
http://download.chinaitlab.com/soft/6163.htm
JDBCQ?br />
JDBC API数据库编E实作教?br />
http://download.chinaitlab.com/soft/9087.htm
JAVA数据库编EJDBC
http://download.chinaitlab.com/soft/6113.htm
JDBC API 参考教E第三版
http://download.chinaitlab.com/soft/6057.htm
JDBC与Java数据库程序设?br />
http://download.chinaitlab.com/soft/6018.htm
Java语言SQL接口 JDBCprogram
http://download.chinaitlab.com/soft/5938.htm
JSP应用E序开发指?br />
http://download.chinaitlab.com/soft/1546.htm
?nbsp;JDBC 理数据库连?br />
http://download.chinaitlab.com/soft/935.htm
JDOQ?br />
全面了解JDO数据库编E?br />
http://download.chinaitlab.com/soft/7992.htm
StrutsQ?br />
Struts中文手册
http://download.chinaitlab.com/soft/10516.htm
Struts架构指导
http://download.chinaitlab.com/soft/7529.htm
_Nstruts技?br />
http://download.chinaitlab.com/soft/6801.htm
Struts 学习(fn)h问答
http://download.chinaitlab.com/soft/6156.htm
HibernateQ?br />
Hibernate2.1.2参考手册中文版
http://download.chinaitlab.com/soft/8919.htm
JAVA与模式\J2EE模式Q?br />
J2EE 核心模式
http://download.chinaitlab.com/soft/9785.htm
Java 企业设计模式
http://download.chinaitlab.com/soft/9096.htm
Java单工厂创立性模式介l?br />
http://download.chinaitlab.com/soft/7398.htm
EJB设计模式
http://download.chinaitlab.com/soft/6135.htm
JAVA设计模式
http://download.chinaitlab.com/soft/6112.htm
实用J2EE设计模式~程指南
http://download.chinaitlab.com/soft/5033.htm
Java与模?br />
http://download.chinaitlab.com/soft/3073.htm
设计模式Java?br />
http://download.chinaitlab.com/soft/1723.htm
JBuilder开发Servlet?qing)JSPQ?br />
_NJBuilder
http://download.chinaitlab.com/soft/10565.htm
JBuilder速成资料
http://download.chinaitlab.com/soft/9714.htm
Jbuilder7和weblogic7整合开发手
http://download.chinaitlab.com/soft/9664.htm
JBUILDER9 软g开发项目实?br />
http://download.chinaitlab.com/soft/9089.htm
JbuilderX开发指?br />
http://download.chinaitlab.com/soft/9088.htm
Jbuilder x 指南
http://download.chinaitlab.com/soft/7984.htm
JBuilder4开发h员指?br />
http://download.chinaitlab.com/soft/5939.htm
JBuilder7 Weblogic7整和开发培训手?br />
http://download.chinaitlab.com/soft/4727.htm
JBuilder开发数据库应用E序
http://download.chinaitlab.com/soft/1701.htm
Java开发指?-Servlets和JSP?br />
http://download.chinaitlab.com/soft/9793.htm
Java Servlets ~程指南
http://download.chinaitlab.com/soft/9098.htm
Oreilly Java Servlet
http://download.chinaitlab.com/soft/6522.htm
Java Servlet开发与实例
http://download.chinaitlab.com/soft/6029.htm
深入Java Servlet |络~程
http://download.chinaitlab.com/soft/9783.htm
用JSP_Servlet构徏三层式管理信息系l?br />
http://download.chinaitlab.com/soft/6034.htm
Java Servlet帮助文档
http://download.chinaitlab.com/soft/2981.htm
JSP|站~程教程
http://download.chinaitlab.com/soft/11256.htm
JSP语法分析
http://download.chinaitlab.com/soft/11257.htm
JSP实用教程
http://download.chinaitlab.com/soft/10792.htm
JSP语法Q?Q?-HTML注释
http://download.chinaitlab.com/soft/10790.htm
JSP应用开发详?br />
http://download.chinaitlab.com/soft/10025.htm
JSP技术揭U?br />
http://download.chinaitlab.com/soft/9387.htm
JSP技术大?br />
http://download.chinaitlab.com/soft/9388.htm
JSP|上书店实例详解
http://download.chinaitlab.com/soft/9386.htm
JSP动态网|技?br />
http://download.chinaitlab.com/soft/8920.htm
JSP 技术大?br />
http://download.chinaitlab.com/soft/7782.htm
JSP高开发与应用
http://download.chinaitlab.com/soft/7633.htm
JSP 完全探烦
http://download.chinaitlab.com/soft/7546.htm
JSP 高开发与应用
http://download.chinaitlab.com/soft/7116.htm
JSP~程技?br />
http://download.chinaitlab.com/soft/7114.htm
JSP速成教程
http://download.chinaitlab.com/soft/6882.htm
JSP|络~程技?br />
http://download.chinaitlab.com/soft/6880.htm
JSPE序设计指南
http://download.chinaitlab.com/soft/6690.htm
最新JSP入门与应?br />
http://download.chinaitlab.com/soft/6697.htm
JSP快速入?br />
http://download.chinaitlab.com/soft/6636.htm
JSP|页~程
http://download.chinaitlab.com/soft/6527.htm
JSP 实用教程
http://download.chinaitlab.com/soft/6334.htm
JSP入门与提?br />
http://download.chinaitlab.com/soft/6326.htm
JSP语法
http://download.chinaitlab.com/soft/6116.htm
掌握自定义JSP标签
http://download.chinaitlab.com/soft/6096.htm
JSP 动态网站技术入门与提高
http://download.chinaitlab.com/soft/6019.htm
JSP实例入门
http://download.chinaitlab.com/soft/4377.htm
JSP教程之与数据库通信
http://download.chinaitlab.com/soft/3673.htm
如何成ؓ(f)优秀的JSP E序?br />
http://download.chinaitlab.com/soft/3002.htm
JSP数据库编E指?br />
http://download.chinaitlab.com/soft/2946.htm
JSP 高~程
http://download.chinaitlab.com/soft/2635.htm
JSP实用~程实例集锦
http://download.chinaitlab.com/soft/2154.htm
JSPE序设计_ֽ实例
http://download.chinaitlab.com/soft/2151.htm
JSPx应用
http://download.chinaitlab.com/soft/1547.htm
JSPE序设计_ֽ实例
http://download.chinaitlab.com/soft/1543.htm
JSP实用~程实例集锦
http://download.chinaitlab.com/soft/1537.htm
JSP基础
http://download.chinaitlab.com/soft/894.htm
Eclipse开发Servlet?qing)JSPQ?br />
Eclipse+Tomcat集成开发servle
http://download.chinaitlab.com/soft/6134.htm
J2EE Jboss Ejb With Eclipse 2003
http://download.chinaitlab.com/soft/6045.htm
]]>
log4j.addivity.org.apache=true
#ConsoleAppenderQ控制台输出
#FileAppenderQ文件日志输?br />
#SMTPAppenderQ发邮g输出日志
#SocketAppenderQSocket日志
#NTEventLogAppenderQW(xu)indow NT日志
#SyslogAppenderQ?br />
#JMSAppenderQ?br />
#AsyncAppenderQ?br />
#NullAppender
#文g输出QRollingFileAppender
#log4j.rootLogger = INFO,logfile
log4j.appender.logfile = org.apache.log4j.RollingFileAppender
log4j.appender.logfile.Threshold = INFO
# 输出以上的INFO信息
log4j.appender.logfile.File = INFO_log.html
#保存log文g路径
log4j.appender.logfile.Append = true
# 默认为trueQ添加到末尾Qfalse在每ơ启动时q行覆盖
log4j.appender.logfile.MaxFileSize = 1MB
# 一个log文g的大,过q个大小又?x)生?个日?# KB QMBQGB
log4j.appender.logfile.MaxBackupIndex = 3
# 最多保?个文件备?
log4j.appender.logfile.layout = org.apache.log4j.HTMLLayout
# 输出文g的格?
log4j.appender.logfile.layout.LocationInfo = true
#是否昄cd和行?br />
log4j.appender.logfile.layout.Title =title:\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
#html面?< title >
############################## SampleLayout ####################################
# log4j.appender.logfile.layout = org.apache.log4j.SampleLayout
############################## PatternLayout ###################################
# log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
# log4j.appender.logfile.layout.ConversionPattern =% d % p [ % c] - % m % n % d
############################## XMLLayout #######################################
# log4j.appender.logfile.layout = org.apache.log4j.XMLLayout
# log4j.appender.logfile.layout.LocationInfo = true #是否昄cd和行?br />
############################## TTCCLayout ######################################
# log4j.appender.logfile.layout = org.apache.log4j.TTCCLayout
# log4j.appender.logfile.layout.DateFormat = ISO8601
#NULL, RELATIVE, ABSOLUTE, DATE or ISO8601.
# log4j.appender.logfile.layout.TimeZoneID = GMT - 8 : 00
# log4j.appender.logfile.layout.CategoryPrefixing = false ##默认为true 打印cd?br />
# log4j.appender.logfile.layout.ContextPrinting = false ##默认为true 打印上下文信?br />
# log4j.appender.logfile.layout.ThreadPrinting = false ##默认为true 打印U程?br />
# 打印信息如下Q?br />
#2007 - 09 - 13 14 : 45 : 39 , 765 [http - 8080 - 1 ] ERROR com.poxool.test.test - error成功关闭链接
###############################################################################
#每天文g的输出:(x)DailyRollingFileAppender
#log4j.rootLogger = INFO,errorlogfile
log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlogfile.Threshold = ERROR
log4j.appender.errorlogfile.File = ../logs/ERROR_log
log4j.appender.errorlogfile.Append = true
#默认为trueQ添加到末尾Qfalse在每ơ启动时q行覆盖
log4j.appender.errorlogfile.ImmediateFlush = true
#直接输出Q不q行~存
# ' . ' yyyy - MM: 每个月更C个log日志
# ' . ' yyyy - ww: 每个星期更新一个log日志
# ' . ' yyyy - MM - dd: 每天更新一个log日志
# ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一个log日志
# ' . ' yyyy - MM - dd - HH: 每小时更C个log日志
# ' . ' yyyy - MM - dd - HH - mm: 每分钟更C个log日志
log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
#文g名称的格?/span>
log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] - %m %n %d
#控制台输出:(x)
#log4j.rootLogger = INFO,consoleAppender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold = ERROR
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern =%d %-5p %m %n
log4j.appender.consoleAppender.ImmediateFlush = true
# 直接输出Q不q行~存
log4j.appender.consoleAppender.Target = System.err
# 默认是System.out方式输出
#发送邮Ӟ(x)SMTPAppender
#log4j.rootLogger = INFO,MAIL
log4j.appender.MAIL = org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold = INFO
log4j.appender.MAIL.BufferSize = 10
log4j.appender.MAIL.From = yourmail@gmail.com
log4j.appender.MAIL.SMTPHost = smtp.gmail.com
log4j.appender.MAIL.Subject = Log4J Message
log4j.appender.MAIL.To = yourmail@gmail.com
log4j.appender.MAIL.layout = org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern =%d - %c -%-4r [%t] %-5p %c %x - %m %n
#数据库:(x)JDBCAppender
log4j.appender.DATABASE = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL = jdbc:oracle:thin:@ 210.51 . 173.94 : 1521 :YDB
log4j.appender.DATABASE.driver = oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user = ydbuser
log4j.appender.DATABASE.password = ydbuser
log4j.appender.DATABASE.sql = INSERT INTO A1 (TITLE3) VALUES ( ' %d - %c %-5p %c %x - %m%n ' )
log4j.appender.DATABASE.layout = org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern =% d - % c -%- 4r [ % t] %- 5p % c % x - % m % n
JNI之C++调用Javac?—?java.lang.String
Z么要用C++调用Javac?很难回答Q写着文章只是觉得JNI很有意思。于是开始编写一D用VC++在Windowspȝ里调用java的Stringc,在C++里调用Stringcd的一些方法?/p>
JNI已经被开发了很多q_(d)而在?q多的Java~程旉里从来没有接触过。直到最q研IJVM实现原理才注意到JNI?JNI既Java Native InterfaceQNativeq个词我见过我认为最恰当的翻译就是原生。原生的意思就是来自系l自qQ原汁原味的东西Q例如Win32 API。Javac需要在虚拟Zq行Q也׃是原生的Q同?NET Framework也不是原生的。JNI也就是Java原生接口。关于JNI的规范,以及(qing)Z么要使用它,它能做些什么,都在http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/jniTOC.html里记q着?/p>
JNI是规范,它规定了虚拟机的接口Q而把具体的实现留l开发者?/p>
JVM的实C是唯一的,目前存在很多UJava虚拟机,Sun HotspotQIBM JDKQ还有HP的,Kaffe{等。最行的就是Sun的HotspotQ最复杂的就是IBM JDKQ这是IBM的一贯作风。本文不讨论JVM的实玎ͼ只关注JNI。如果?zhn)安装了Sun的JDKQ?zhn)p在[JAVA_HOME]\include目录下找到jni.h。这个头文g是虚拟机的唯一接口Q你可以调用它声明的函数创徏一个JVM?/p>
在说明C++调用JavacM前,我想先演CZ下如果编写Java Native Method?/p>
1Q编写带有NativeҎ(gu)的Javac?/p>
package org.colimas.jni.test;
public class JniTest {
static { System.loadLibrary("JniTestImpl"); } //JVM调用JniTestImpl.dll
public JniTest(){
}
//原生Ҏ(gu)
public native void print(String str);
/**
* @param args
*/
public static void main(String[] args) {
JniTest test=new JniTest();
test.print("hello JVM"); //调用原生Ҏ(gu)
}
}
2Q用javah生成c语言头文件?/p>
javah -jni org.colimas.jni.test.JniTest
目录里多了一个org_colimas_jni_test_JniTest.h文gQ打开文gQ内容如?
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_colimas_jni_test_JniTest */
#ifndef _Included_org_colimas_jni_test_JniTest
#define _Included_org_colimas_jni_test_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_colimas_jni_test_JniTest
* Method: print
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
其中的Java_org_colimas_jni_test_JniTest_print是JniTestc里面的print原生Ҏ(gu)的C语言声明?/p>
3Q编写C(j)代码实现原生Ҏ(gu)print
#include <jni.h>
#include "org_colimas_jni_test_JniTest.h" //javah生成的头文g
#include <stdio.h>
JNIEXPORT void JNICALL Java_org_colimas_jni_test_JniTest_print
(JNIEnv *env, jobject object,jstring str)
{
//获得字符?br />
const char * txt=(*env)->GetStringUTFChars(env,str,0);
printf("%s\n",txt); //打印到控制台
return;
}
参数JNIEnv *envQ是JNI里最重要的变量。Java.exe创徏JVMQ之后JVM生成一个envQ该env相当于JVM内的SessionQ可以完成创建Java对象Q调用类Ҏ(gu)Q获得类的属性等{?/p>
在这里env方法的参数Str从JNI的jstringcd转换为常数char数组?/p>
4Q编?/p>
cl /Ic:\j2sdk1.4.2_10\include /Ic:\j2sdk1.4.2_10\include\win32 /c JniTestImpl.c
5Q连接ؓ(f)DLL
link /dll JniTestImpl.obj
6Q设|PATH
set PATH=C:\MyProject\Colimas\CD\JNI\MyJNI;%PATH%
7Q运?/p>
java org.colimas.jni.test.JniTest
q回l果
hello JVM
l束
以上是实现Java原生Ҏ(gu)的开发过E,下面q入正题Q用C++调用Java的java.lang.StringcR?/p>
1. Objectcd创徏JVM?/p>
使用JavacM前必要创徏JVM环境。JDK由java.exe来完成。本文有Objectcȝ静态方法BeginJVM来创建,用EndJVM来关闭?/p>
创徏JVM之后?x)在创?个变量,分别是JNIEnv* env和JavaVM* jvmQJNIEnv上文已经说明QJavaVMQ顾名思义Q代表Java虚拟机,用它来关闭JVM?/p>
Objectcȝ头文?/p>
#include "jni.h"
class Object
{
public:
static bool BeginJVM();
static bool EndJVM();
Object();
virtual ~Object();
protected:
static JNIEnv* env;
static JavaVM* jvm;
};
object.cpp代码
#include "stdafx.h"
#include "JavaClasses.h"
#include "Object.h"
Object::Object()
{}
Object::~Object()
{}
JNIEnv* Object::env=NULL;
JavaVM* Object::jvm=NULL;
//创徏JVM
bool Object::BeginJVM()
{
JavaVMOption options[3];
JavaVMInitArgs vm_args;
//各种参数
options[0].optionString="-Xmx128m";
options[1].optionString="-Verbose:gc";
options[2].optionString="-Djava.class.path=.";
vm_args.version=JNI_VERSION_1_2;
vm_args.options=options;
vm_args.nOptions=3;
//创徏JVMQ获得jvm和env
int res = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args);
return true;
}
bool Object::EndJVM()
{
//关闭JVM
jvm->DestroyJavaVM();
return true;
}
2. C++的Stringc调用java.lang.StringcL?/p>
~写C(j)++版的Stringc,调用java StringcL法。调用的Ҏ(gu)如下Q?/p>
String replaceAll(String regex, String replacement);
boolean endsWith(String str);
int indexOf(String str);
int compareTo(String anotherString);
char charAt(int i);
String的头文g:
class String :public Object
{
public:
//与要调用的JavaҎ(gu)名一致?br />
const char * replaceAll(char *regex,char *replacement);
bool endsWith(char * str);
int indexOf(char * str);
int compareTo(char *anotherString);
char charAt(int i);
String(char *str);
virtual ~String();
};
实现Q?/p>
#include "stdafx.h"
#include "String.h"
#include "jni.h"
using namespace std;
jclass clazz; //全局变量Q用来传递class
jobject object; //全局变量Q用来传递object
String::String(char *str)
{
jstring jstr;
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
//获得java.lang.Stringc?br /> clazz=Object::env->FindClass("java/lang/String");
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
//获得String(String str)构造体
jmethodID mid= Object::env->GetMethodID(clazz,"<init>", "(Ljava/lang/String;)V");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
//字W串装为jstring?br /> jstr = Object::env->NewStringUTF(str);
if (jstr == 0) {
cerr << "Out of memory" <<endl;
exit(-1);
}
cout << "invoking method" << endl;
//创徏一个java.lang.String对象?br />
object=Object::env->NewObject(clazz,mid,jstr);
}
String::~String()
{}
char String::charAt(int i)
{
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
if (object ==0 ){
cout << "String object is not created" << endl;
exit(-1);
}
jmethodID mid;
//获得charAtҎ(gu)Q(IQC表示 参数为int型,q回char型。详l参见JNI规范
mid = Object::env->GetMethodID(clazz,"charAt", "(I)C");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
jint ji=i;
cout << "invoking method" << endl;
//调用charAt
jchar z = Object::env->CallCharMethod(object,mid,i);
//q回l果?br />
return z;
}
int String::compareTo(char *anotherString)
{
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
if (object ==0 ){
cout << "String object is not created" << endl;
exit(-1);
}
jmethodID mid;
//(Ljava/lang/String;)I表示参数为java.lang.StringQ返回int
mid= Object::env->GetMethodID(clazz,"compareTo", "(Ljava/lang/String;)I");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
jstring jstr = Object::env->NewStringUTF(anotherString);
cout << "invoking method" << endl;
//调用Ҏ(gu)
jint z=Object::env->CallIntMethod(object,mid,jstr);
//q回l果
return z;
}
int String::indexOf(char *str)
{
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
if (object ==0 ){
cout << "String object is not created" << endl;
exit(-1);
}
jmethodID mid;
mid= Object::env->GetMethodID(clazz,"indexOf", "(Ljava/lang/String;)I");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
jstring jstr = Object::env->NewStringUTF(str);
cout << "invoking method" << endl;
jint z=Object::env->CallIntMethod(object,mid,jstr);
return z;
}
bool String::endsWith(char *str)
{
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
if (object ==0 ){
cout << "String object is not created" << endl;
exit(-1);
}
jmethodID mid;
mid= Object::env->GetMethodID(clazz,"endsWith", "(Ljava/lang/String;)Z");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
jstring jstr = Object::env->NewStringUTF(str);
cout << "invoking method" << endl;
bool z = Object::env->CallBooleanMethod(object,mid,jstr);
return z;
}
const char * String::replaceAll(char *regex, char *replacement)
{
if (Object::env ==NULL){
cout << "JVM is not created" << endl;
exit(-1);
}
if (clazz ==0 ){
cout << "Class is not found" << endl;
exit(-1);
}
if (object ==0 ){
cout << "String object is not created" << endl;
exit(-1);
}
jmethodID mid;
mid= Object::env->GetMethodID(clazz,"replaceAll", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
if (mid==0){
cerr<< "GetMethodID Error for class" << endl;
exit(-1);
}
jvalue array[2];
jstring jreg = Object::env->NewStringUTF(regex);
jstring jstr = Object::env->NewStringUTF(replacement);
array[0].l=jreg;
array[1].l=jstr;
cout << "invoking method" << endl;
//传入参数Q调用replaceAllҎ(gu)
jobject z=Object::env->CallObjectMethodA(object,mid,array);
const char *result=Object::env->GetStringUTFChars((jstring)z, 0);
return (const char *)result;
}
3Q测?/p>
~写试代码
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)){
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
} else{
//创徏JVM
Object::BeginJVM();
String test("hello");
//调用replaceAll
const char *result = test.replaceAll("l","z");
//q回l果
cout<< result <<endl;
//关闭JVM
Object::EndJVM();
}
return nRetCode;
}
4Q运?/p>
~译需?jni.h和jvm.lib文g?/p>
jni.h在[JAVA_HOME]\include
jvm.lib在[JAVA_HOME]\lib
q行需要jvm.dll
jvm.dll在[JAVA_HOME]\ jre\bin\client
q行l果如下Q?/p>
invoking method
invoking method
hezzo
Press any key to continue
管本文的代码很有意思,但我q没有想到有什么h(hun)|以及(qing)应用到实际项目中的理由?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/onlymilan/archive/2006/07/20/947652.aspx