??xml version="1.0" encoding="utf-8" standalone="yes"?> <constant name="struts.i18n.encoding" value="UTF-8"/> <package name="demo" extends="struts-default"> 二、Struts2?Action package demo; public String execute() throws Exception { // getter and setter 三、Jsp面 <%@ taglib prefix="s" uri="/struts-tags"%> <body> <s:form action="" method="post">
<? 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>
<action name="excel" method="execute" class="demo.ExcelAction">
<result name="excel" type="stream">
<param name="contentType">application/vnd.ms-excel</param> <!-- 注意q里的ContentType -->
<param name="inputName">excelStream</param> <!-- q里需要和Action里的变量名一?-->
<param name="contentDisposition">filename="standard.xls"</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
public class ExcelAction {
private InputStream excelStream; // 需要生成getter和setter
StringBuffer excelBuf = new StringBuffer();
excelBuf.append("BookName").append("\t").append("Year").append("\t").append("author").append("\n");
excelBuf.append("Thinking in Java").append("\t").append("2001").append("\t").append("Eckel").append("\n");
excelBuf.append("Spring in action").append("\t").append("2005").append("\t").append("Rod").append("\n");
String excelString = excelBuf.toString();
logger.debug("result excel String: " + excelString);
excelStream = new ByteArrayInputStream(excelString.getBytes(), 0, excelString.length());
return "excel";
}
...
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<s:head />
</head>
<s:submit key="button.submit"/>
</s:form>
</body>
</html>
]]>
<%@ page import="java.io.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'createD.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String pathStr = request.getRealPath("/upload");
pathStr = pathStr + "\\Sub";//要建立的目录\?
out.println(pathStr);
//建立代表Sub目录的File对象Qƈ得到它的一个引?
File d = new File(pathStr);
if (d.exists()) {//查Sub目录是否存在
d.delete();
out.println("Sub目录存在Q已删除");
} else {
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已徏?);
}
%>
</body>
</html>
Eclipse中默认是输入"."后出现自动提C,用于cL员的自动提示Q可是有时候我们希望它能在我们输入cȝ首字母后出现自动提C,可以节省大量的输入时_虽然按alt + /会出现提C,但还是要多按一ơ按键,太麻烦了Q?/font>
但是我们可以发现Q这个Auto-Activation下的输入框里最多只能输?个字母,也许是Eclipse的开发h员担心我们输入的太多会媄响性能Q但计算机的性能不用白不用,所以我们要打破q个限制?/font>
其实上面都是铺垫Q制造一下气氛,以显得我们下面要做的事情很牛似的Q其实不Ӟ一切都很简单。嘿?:)
?."后面随便输入几个字符Q比?abij"Q然后回到开发环境,File -> export -> general -> preferences -> 选一个地方保存你的首选项Q比如C:\a.epf
用Q何文本编辑器打开a.epfQ查扑֭W串“abij”Q找C后,替换?#8220;abcdefghijklmnopqrstuvwx
最后:自动提示弹出的时间最好改?00毫秒以下Q这样会比较爽一点,不然你都完事了,自动提示才弹出来:)Q不q也要看机器性能?/font>
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
q里有几个问题: 1. 各个参数的含义什么? 2. Z么有的机器我?Xmx?XX:MaxPermSize都设|ؓ512M之后Eclipse可以启动Q而有些机器无法启动? 3. Z上面的参数写入到eclipse.ini文gEclipse没有执行对应的设|? 下面我们一一q行回答 1. 各个参数的含义什么? 参数?vmargs的意思是讄JVM参数Q所以后面的其实都是JVM的参CQ我们首先了解一下JVM内存理的机Ӟ然后再解释每个参C表的含义?br /> ?Heap)和非?Non-heap)内存 ?照官方的说法Q?#8220;Java 虚拟机具有一个堆Q堆是运行时数据区域Q所有类实例和数l的内存均从此处分配。堆是在 Java 虚拟机启动时创徏的?#8221;“在JVM中堆之外的内存称为非堆内?Non-heap memory)”。可以看出JVM主要理两种cd的内存:堆和非堆。简单来说堆是Java代码可及的内存,是留l开发h员用的Q非堆就是JVM留给 自己用的Q所以方法区、JVM内部处理或优化所需的内?如JIT~译后的代码~存)、每个类l构(如运行时常数池、字D和Ҏ数据)以及Ҏ和构造方?的代码都在非堆内存中? 堆内存分?br /> JVM初始分配的内存由-Xms指定Q默认是物理内存?/64QJVM最大分配的内存?Xmx 指定Q默认是物理内存?/4。默认空余堆内存于40%ӞJVM׃增大堆直?Xmx的最大限ӞIZ堆内存大?0%ӞJVM会减堆直到- Xms的最限制。因此服务器一般设|?Xms?Xmx相等以避免在每次GC 后调整堆的大? 非堆内存分配 JVM使用-XX:PermSize讄非堆内存初始|默认是物理内存的1/64Q由XX:MaxPermSize讄最大非堆内存的大小Q默认是物理内存?/4? JVM内存限制(最大? ?先JVM内存限制于实际的最大物理内?废话Q呵?Q假讄理内存无限大的话QJVM内存的最大D操作pȝ有很大的关系。简单的说就32位处理器虽然 可控内存I间?GB,但是具体的操作系l会l一个限Ӟq个限制一般是2GB-3GBQ一般来说Windowspȝ下ؓ1.5G-2GQLinuxpȝ 下ؓ2G-3GQ,?4bit以上的处理器׃会有限制了? 2. Z么有的机器我?Xmx?XX:MaxPermSize都设|ؓ512M之后Eclipse可以启动Q而有些机器无法启动? 通过上面对JVM内存理的介l我们已l了解到JVM内存包含两种Q堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作pȝ。所以说讄VM参数DE序无法启动主要有以下几U原因: 1) 参数?Xms的值大?XmxQ或?XX:PermSize的值大?XX:MaxPermSizeQ?br /> 2) -Xmx的值和-XX:MaxPermSize的d过了JVM内存的最大限Ӟ比如当前操作pȝ最大内存限Ӟ或者实际的物理内存{等。说到实际物?内存q里需要说明一点的是,如果你的内存?024MBQ但实际pȝ中用到的q不可能?024MBQ因为有一部分被硬件占用了? 3. Z上面的参数写入到eclipse.ini文gEclipse没有执行对应的设|? 那ؓ什么同L参数在快h式或者命令行中有效而在eclipse.ini文g中是无效的呢Q这是因为我们没有遵守eclipse.ini文g的设|规则: 参数形如“??#8221;q种形式Q中间有I格的需要换行书写,如果g有空格的需要用双引号包括v来。比如我们?vm C:\Java\jre1.6.0\bin\javaw.exe参数讄虚拟机,在eclipse.ini文g中要写成q样Q?br /> -vm C:\Java\jre1.6.0\bin\javaw.exe 按照上面所说的Q最后参数在eclipse.ini中可以写成这个样子: -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 实际q行的结果可以通过Eclipse?#8220;Help”-“About Eclipse SDK”H口里面?#8220;Configuration Details”按钮q行查看?br /> 另外需要说明的是,Eclipse压羃包中自带的eclipse.ini文g内容是这LQ?br /> -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m -vmargs -Xms40m -Xmx256m ??#8211;launcher.XXMaxPermSizeQ注意最前面是两个连接线Q跟-XX:MaxPermSize参数的含义基本是一LQ我觉得唯一的区 别就是前者是eclipse.exe启动的时候设|的参数Q而后者是eclipse所使用的JVM中的参数。其实二者设|一个就可以了,所以这里可以把 –launcher.XXMaxPermSize和下一行?注释掉? 3. 其他的启动参数?如果你有一个双核的CPUQ也许可以尝试这个参? windowsQ?gt;preferences->java->Editor->Code Assist ?/p>
autoQactivetion中的Enable auto-activetion选项要勾选上 q里面有个时间的讑֮是ؓ提示代码讑֮的显C时间。你可以Ҏ自己的情况设定?/p>
但都不能自动提示Q查了查以前eclipse 的设|才扑ֈQwindow->Preferences->Java->Editor->Content Assist->Advanced 上面的选项卡Select the proposal kinds contained in the 'default' content assist list: 中把 Other Java Proposals 选项打上勑ְ可以了?/span>
另注Q?/p>
有些情况在eclipse中安装插件时代码自动功能失效Q同样可以用以上方式修改回来?/p>
]]> 1. 安装 http://sourceforge.net/projects/jnative 解压后得?/span>3个文ӞJNativeCpp.dllQ?/span>libJNativeCpp.soQ?/span>JNative.jarQ其中: JNativeCpp.dll 攑֜windows/system32目录?/span> libJNativeCpp.so linux下?/span> JNative.jar 导入工程?/span> 2. 使用 2.1. 加蝲dll文g JNative可用两U方式加?/span>dll文gQ?/span> a.使用System.loadLibrary加蝲,使用此方法可加蝲pȝ目录中的dll文g?/span> b.可以先把dll文g复制?/span>system32目录下,使用文g前缀名作为参数来加蝲dll文g。?/span>System.load加蝲,此方法参Cؓdll文g全\径名?/span> 2.2. 调用函数 a、首先创?/span>JNative对象Q?/span> JNative jnative = new JNative(dll文g?/span>, 函数?/span>); b、设|返回值类型: jnative.setRetVal(Type.INT); c、设|参?/span> jnative.setParameter(0, Type.STRING, …); //讄W一个参Cؓ字符?/span> jnative.setParameter(1, Type.INT, String.valueof(…)); //讄W二个参Cؓ整数 d、执?/span> n.invoke(); e、获取返回?/span> Integer.parseInt(jnative.getRetVal()); 3.实例 import org.xvolks.jnative.JNative; import org.xvolks.jnative.Type; import org.xvolks.jnative.exceptions.NativeException; import org.xvolks.jnative.pointers.Pointer; import org.xvolks.jnative.pointers.memory.HeapMemoryBlock; public class Test { public static void main(String[] args) throws NativeException, IllegalAccessException { JNative v=new JNative("Kernel32.dll","GetModuleFileNameA"); int i = 0; v.setRetVal(Type.INT); Pointer pName = new Pointer(new HeapMemoryBlock(1024));
v.setParameter(i++, 0);//module handle v.setParameter(i++, pName);//pFileName v.setParameter(i++, 1024);//nSize v.setRetVal(Type.INT); v.invoke(); int ret = Integer.parseInt(v.getRetVal()); if (ret == 0) { // return "null"; System.err.println( "GetModuleFileName failed!"); } else {
String path = pName.getAsString().substring(0, ret); pName.dispose(); v.dispose(); System.out.println("current process's path is:"+path); } }
}
4.注意: ?/span>JNative中用?/span>JDK1.5的一些特性,如枚举、静态引入等Q所以在JDK1.4下是不能用的?/span> ?/span>.在程序用jawin调用window?/span>dll jawin 可以?/span>dll中的Ҏq行调用Q也可以调用com中的Ҏ.内部q提供了一个工P直接?/span> comlg导出?/span> java的类Q个为很方便?/span> 下面是我们作的一个测试,很顺利便通过了?/span> 1、下?/span>jawinQ?/span>http://jawinproject.sourceforge.net/?/span> 2、配|: a.?/span>jawin.jar放于%JAVA_HOME%"jre"lib"ext?/span>?/span> b.?/span>jawin.dll放于c:"winnt"system32下。否则将出现错误Q?/span>COMException : no jawin in java.library.pathQ?/span> 也可?/span>jawin.dll放于每个目目录下?/span>
c.x?/span>Editplus中调?/span>Jawin/NJawin的例子,可以通过?/span>而在Eclipse中有时还会出上面的错误:COMException : no jawin in java.library.path?/span> d.?/span>Eclipse中,菜单->window->preference->Java->installed JREs 原来的remove,重新Z个指C?/span>java sdk目录?/span> ok了?/span> 3、程序测试:
import org.jawin.FuncPtr;
import org.jawin.ReturnFlags;
public class GfJawinTest {
public static void main(String[] args) {
try {
FuncPtr msgBox = new FuncPtr("USER32.DLL", "MessageBoxW"); msgBox.invoke_I(0, "Hello From a DLL", "From Jawin", 0, ReturnFlags.CHECK_NONE); } catch (Exception e) {
e.printStackTrace();
}
}
}
4.利用jawin调用comlg, ?/span>word: //创徏word import org.jawin.DispatchPtr; import org.jawin.win32.Ole32; public class CreateWord {
public static void main(String[] args) { try { Ole32.CoInitialize();// 初始?/span> DispatchPtr app = new DispatchPtr("Word.Application");// 创徏word对象 app.put("Visible",true); // ?/span>word可见 DispatchPtr docs=(DispatchPtr)app.get("Documents"); // 获得document对象集合 DispatchPtr doc=(DispatchPtr)docs.invoke("Add"); // 新增一个文?/span> app.invoke("Activate"); // Ȁzd前文?/span>
DispatchPtr objTextFont=(DispatchPtr)((DispatchPtr)doc.get("Content")).get("Font"); // 取得Font对象 objTextFont.put("Name","黑体"); // 讄字体 objTextFont.put("Size","48"); // 讄字号 DispatchPtr docSelection=(DispatchPtr)app.get("Selection"); // 取得Selection对象 docSelection.invoke("TypeText","Jawwintesttext!"nJawin试文本?/span>"); // 使用TypeTextҎd文本 doc.invoke("SaveAs","d:""jawintest.doc"); // 保存文档(保存?/span>C盘根目录?/span>) doc.invoke("Close"); // 关闭当前文档Q去掉前面的注释Wƈ重新~译后可生效 app.invoke("Quit"); // 退?/span>WordQ去掉前面的注释Wƈ重新~译后可生效
Ole32.CoUninitialize(); // 释放对象 } catch (Exception e) { e.printStackTrace(); } }
}
//打开word import org.jawin.DispatchPtr; import org.jawin.win32.Ole32;
public class OpenWord { public static void main(String[] args) { try { Ole32.CoInitialize(); DispatchPtr app = new DispatchPtr("Word.Application"); app.put("Visible", true); DispatchPtr docs = (DispatchPtr) app.get("Documents"); DispatchPtr doc = (DispatchPtr) docs.invoke("Open", "d:""word.doc"); Ole32.CoUninitialize(); } catch (Exception e) { e.printStackTrace(); } } }
//调用word中的另存?/span>,保存?/span>.html import org.jawin.DispatchPtr; import org.jawin.win32.Ole32;
public class Word2Html { public static void main(String[] args) {
String path = "e://17001939578.doc"; int iPos = path.lastIndexOf("."); String fileExtName = path.substring(iPos + 1); String fileMainName = path.substring(0, iPos); fileExtName = fileExtName.toLowerCase(); try { Ole32.CoInitialize(); // 初始?/span> DispatchPtr app = new DispatchPtr("Word.Application"); // 创徏word对象 app.put("Visible", false); // 讄word不可?/span> DispatchPtr docs = (DispatchPtr) app.get("Documents"); // 取得Documents对象 DispatchPtr doc = (DispatchPtr) docs.invoke("Open", path); // 打开指定?/span>word文g doc.invoke("SaveAs", fileMainName + ".html"); // 另存?/span>HTML文g app.invoke("quit"); // 关闭word Ole32.CoUninitialize(); // 释放对象 System.out.println(""n转换完成Q?/span>"); System.out.println(""n文g名:" + fileMainName + ".html"); } catch (Exception e) { System.out.println(""n该文件不存在Q或者其他错?/span>(如:q行环境问题)Q?/span>"); } } } ]]>
]]> |