在前面一篇日志: 理解和灵活应用 Struts2 的文件下载功能 还留下一个问题,在 Servlet 中支持文件下载功能时,客户保存下载文件所用的字符集总是 ANSI(ISO8859-1), 如何能设定客户保存文件用的字符集呢?像 BlogJava 的备份数据功能下载后就是用的 UTF-8 字符集的。 自己作了一些尝试,总是无济于事,看如下代码是 Servlet 的 doGet() 方法:
Read More1public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 4 // PrintWriter out = response.getWriter(); 5 PrintWriter out = new PrintWriter(new OutputStreamWriter(response 6 .getOutputStream(), "UTF-8")); 7 8 response.setContentType("text/plain;charset=UTF-8"); 9 response.setHeader("Content-Disposition","attachment;filename=down.txt"); 10 out.write("Servlet download file test"); 11 out.close(); 12}- 文件下载给我们最直接的概念就是,给个文件链接点击就下载。似乎太简单,然而 Struts2 却把它作为一个独立的学问来对待,理由有四:
1. 文件名为中文时,直接点击下载,链接可能会走样(某些浏览器,URL 编码的问题),致使无法下载。
2. 不总是从下载实际的文件,文件内容有时候是动态生成的,如数据库中的内容。
3. 对于知名的文件类型不让浏览器直接打开,而是出现下载对话框保存文件。例如,要下载的文件是 .txt 的,可能直接就在浏览器中显示其内容。
4. 需要授权才能下载文件时
当然对于以上若干问题,Servlet/JSP 都能通过正确的 URL 编码,响应头设置、权限代码控制解决,只是 Struts2 让我们处理起来更方便了,内部原理自然是一样的。 Read More - 内部网通过 Squid 代理访问国税的 税收调查网上直报(http://218.18.101.150:8001/i/main.jsp) -- i@Report通用 WEB网络报表平台 时页面只出现:
XXX.XXX.XXX.xx透过反向代理访问服务器。请确保报表服务器server.property设置了'proxyServer'参数
不走代理就没事,在网上通过上面的关键字没找到相应的解决办法,还查英文的报错信息:
please esure property "proxyServer" in server.property was not empty
找到一份答案:http://bbs2.chinaunix.net/archiver/tid-1391943.html
原因是访问该网站时要求 Squid 对 请求 Header 部作些处理,上面链接中给了多种方法,有些不一定对你可行。最后我是在 squid.conf 文件后面加上以下两行: Read More - 我安装的 Linux 是 Linux Mint 7,它是基于 Ubuntu 9.04 的发行版,它提供一种更开箱即用的用户体验。如去除了顶端的任务栏,安装后即包括了浏览器插件(如 Flash),多媒体解码器,对 DVD 播放的支持,Java 和其他组件等。它与 Ubuntu 软件仓库完全兼容。
免去游戏方面,Linux 基本能应付得了日常事物的。可偏偏有些网站与 IE 结缘太深,更不争气的还就是 BlogJava,它的编辑器在非 IE 浏览器上处理 <textarea> 不能正常,所以我要考虑装个 IE 在 Linux 上。
所用的软件是 ies4linux,复数的,可以同时安装多个版本的 IE。它用样是由 wine 来模拟运行的,所以必须先安装 wine,你可以用新立得软件包管理器来安装 wine,也可以直接用 apt-get 来安装 wine。
然后是 ie24linux 的安装,安装步骤如下: Read More Java 程序员还是应该对 Java ClassLoader 有所了解,曾经问过一个做 Java 的 JVM 是什么?结果是:没听过。 汗颜了吧,但也不少写 JSP 的甚至是 Java 代码的真的可能不了解 ClassLoader,所以对 Classpath 仍然费解。 JRE 本身就有一个 ClassLoader 层次,更别说在各种应用服务器中因为 ClassLoader 层次的因素产生了莫名其妙的问题。 例如,数据库驱动有时候应该放在哪个目录中,怎么应用却加载了一个旧版的 Jar 包等等。
本篇的 Understand Java ClassLoader.chm 文件是我根据 IBM 开发者网站上的 https://www6.software.ibm.com/developerworks/cn/education/java/j-classloader/tutorial 整理而成的。以前是用 Visual CHM 工具来制作 CHM 文件,而这个呢是用 FAR 生成的,感觉 FAR 的功能要强大些。 Read More
- Java中的类路径分“编译后的存放路径” 和 “运行时的查找路径”,下面分别谈谈
1. java编译后的类存放路径,
分两种:“源文件被直接编译”和“源文件被间接编译”
1-1源文件直接编译
什么是源文件直接编译:即通过javac直接编译源文件
建立d:\my目录,在其目录下新建一个文件,如下:
Public class HelloWorld{
Public static void main(String[] args){
System.out.println(“HelloWorld”);
}
}
在命令行输入: javac HelloWorld.java
这时在d:\my这个目录下就产生了一个类文件HelloWorld.class Read More - 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,
类装载器所做的工作实质是把类文件从硬盘读取到内存中
2.java中的类大致分为三种:
1.系统类
2.扩展类
3.由程序员自定义的类
3.类装载方式,有两种
1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,
2.显式装载, 通过class.forname()等方法,显式加载需要的类
隐式加载与显式加载的区别:
两者本质是一样?, Read More 系统基本配置
如何查看日志信息 dmesg | more /var/adm/messages*
收集 exlpore 日志 /opt/SUNWexplo/bin/explorer -k ->/opt/SUNWexplo/output
系统的基本状况 showrev
系统运行时间,平均负载 uptime
版本信息 uname -a
Update 版本 more /etc/release
系统补丁 showrev -p 已安装的补丁信息 patchadd 123-12 打补丁
查看服务对应的端口 more /etc/services
Read More应用服务器一般都支持热部署(Hot Deployment),更新代码时把新编译的确类替换旧的就行,后面的程序就执行新类中的代码。这也是由各种应用服务器的独有的类加载器层次实现的。那如何在我们的程序中也实现这种热加载功能呢?即要在虚拟机不关闭的情况下(比如一个),换个类,JVM 就知道加载这个新类,执行新类中的逻辑呢?下面就简单演示这样一个热加载的例子,首先大致了解一下类加载器。
标准 Java 启动器的类加载器层次
1. 引导类加载器(bootstrap): 加载内核 API,如 rt.jar(java.lang、java.io 等)
2. 扩展类加载器(extension): 加载的默认扩展来自于 jre/lib/ext
3. 系统类加载器(system): 类路径上的类,如 com.unmi.*说明:这只是标准 Java 启动器运行程序时的类加载器层次,像应用服务器中的类加载器通常会多一两层,也是在这个基础上的延伸。上面的类加载层次存在自上而下的委托关系,委托加载不在这里细讲。 Read More
- Spring MVC 还提供了一个特别点的 Controller 类型就是 ThrowawayController,它自成一个接口,ThrowawayController 和 Controller 的关系是平行的。什么叫做 ThrowawayController 呢,中文叫做一次性控制器,也就像一次性筷子那样用完即丢,下次要用又拿新的。表现在实例上就是相应 Bean 配置为 singleton="false",每次初始化一个新实例。与其他 Controller 的区别完全就是 WebWork 或 Struts2 的 Action 与 Struts1 的 Action 的区别。因为它是多例的,所以可以用实例变量来接受请求参数,执行方法无参数;而不像其他的 Controller ,因为共享实例,所以需要通过执行方法的来传递请求参数以保证线程安全(P273)
92. 在《Spring in Action》第一版 274 页说 DispatcherServlet 使用缺省 ControllerHandlerAdapter 时只会把控制权分发给 Controller 接口类型的类,而要配置 ThrowawayControllerHandlerAdapter 后,Dispatcherservlet 就把控制权分发给 ThrowawayController,配置如下: Read More