细心!用心!耐心!

吾非文人,乃市井一俗人也,读百卷书,跨江河千里,故申城一游; 一两滴辛酸,三四年学业,五六点粗墨,七八笔买卖,九十道人情。

BlogJava 联系 聚合 管理
  1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

刘杰刘杰随时都在家,因为刘杰不酷。但是现在不会了,因为刘杰在游走……

2006-08-31

今天整理了一下深喉咙

归类于: 心情日记 — maxazure @ 5:53 pm

用了一天的时间,查缺补漏,截至目前为止,全新采集已经做上去了,修改了审核界面。还有问题就是,采集的时候经常会采到重名的,所以要注意一下。呵呵。

2006-08-30

关于页面优化和伪静态

归类于: PHP技术 — maxazure @ 6:41 pm

内容提要:
1)版面优化
2)伪静态(重点涉及apache,smarty,正则)

详细内容:

一、版面优化:
版面优化其实主要涉及HTML,JS,CSS,XML之间的关系(XML相关在此不作描述).
1)一般来说,在资源共享的前提下,我们最基本的目的是让搜索引擎所收录(很多人被AJAX所迷惑,到处使用AJAX,但我的观点是,只有在后台或用户操作部分才使用).
因此,首先我们应该按搜索引擎的收录准则来设计(其实下面说的“伪静态”还不是为了搜索引擎,由于相关文档有好几个PAGE,请自行搜索),主要是html的使用问题,如<h1> <meta> <title>以及标签属性的使用问题.

2)然后解决加载速度和内容纯度问题:
主要是以下几个原则:
1>不要为了版面美观,把无谓的HTML加上去,建议把版面美观的任务交给CSS,并认真考虑CSS的可重用性,HTML只作为对信息内容的描述(好像是XML的重点吧)。我在网上抽查了好一部分的站点,好的网站,html占总内容的50%以下,但有的站点,文字内容占总内容不到20%,
2>把JS,CSS写成文件.只要是利用了浏览器的CAHCHE,减少内容下载
3>HTML标签应该尽量减少嵌套,我见过夸张的一个站点,TABLE嵌套居然是11层..狂汗….

3)解决数据合理处理时间
这个涉及内容比较多,主要是

二、伪静态
这里主要描述apache,smarty的应用,当然,其实使用什么模板甚至不使用模板都没什么关系的,只是笔者长年使用smarty,深浓感受到它的强大
该部分主要针对的是对系统有控制权和对apache、正则较为熟悉的用户。

在这里,核心是强调正则的应用,如果你不会正则表达式,那么你就只能停留一成不变的抄袭阶段,甚至无法使用.而且正则在应用上普遍(基本上什么语言都有)、频繁和强大,笔者还是建议花点时间,学精一点,受用终生
对于搜索引擎,据我所知,关键是处理GET中的”?”、”&”.”php”,还有就是URL长度的问题就OK了,形式就看个人爱好了。
先说APACHE,关键是使用mod_rewrite,打开mod_rewrite模块(在httpd.conf中,把LoadModule rewrite_module modules/mod_rewrite.so前面的“#”去除)

如果使用了vhost(<VirtualHost>),可以在vhost里面加入类似下面的代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^xxx.com$
RewriteRule ^/([^\.\/]+)\.html$ /index.php?action=$1 [L]

解释:
以上配置不一定放在vhost里,按你个人要求放得合适就行。
第一行,表示该vhost将要使用rewrite(URL重写)
第二行,RewriteCond是用于如果后面条件符合(第一个参数满足第二个参数,其中第二个参数为正则表达式),则执行下面的RewriteRule指令,其中%{xxxx}表示是apache的变量,%{HTTP_HOST}表示URL的主机(域名),其它变量请查看apache2手册
第三行,实现url重写(重头戏),第一个参数为在浏览器中输入的url,满足该正则的uri才执行重写,第二个参数是重写规则,即把满足第一个参数的url按照该规则转换成你须要的url在这里笔者必须指出,重写后的url如果包含”http://”,跳转后的地址会显示在浏览器的地址栏中。第三个参数是一些控制,如以上[L]表示该重写是最后一条,后面的重写规则不再被执行。

smarty部分:
主要是处理输出的页面内容,你使用apache的rewrite后,你页面中的链接当然使用了它的规则了,如:原来是abc.php?action=doit就要改用类似abc/action-doit.html这样的方式表示,当然,你可以在做页面时自己手动去改,但我觉得这是比较笨的方法.为什么不去使用ob_xxxxx()去控制呢?(ob_xxxx()系的函数使用请参考php手册).在这里的介绍使用smarty去代替,因为这样会更加灵活
在smarty中,使用register_outputfilter()注册一个处理方法即可,具体方法类似为:
//先定义好一个处理函数
function change_url($tpl_output, &$smarty)
{
        $tpl_output=preg_replace(”/\/index.php?\?action=([^&]+)/i”,”/\\1.html”,$tpl_output);
        return $tpl_output;
        }
//该函数第一个参数是smarty的页面内容,第二个是smarty指针
//然后使用
$tpl->register_outputfilter(”change_url”);

register_outputfilter()方法是输出过滤函数,即交给 change_url($tpl_output, &$smarty)第一个参数是smarty处理后的页面内容
同类型的还有前过滤方法register_prefilter(),即把smarty模板交给第一个参数,详细使用方法请参考smarty手册

如果上述内容有错漏,请原谅并指正

看了下表,一点了..已经写了一个小时,累.要想午觉了…

FedoraCore5下PHP服务器配置

归类于: PHP技术 — maxazure @ 6:31 pm

系统已经安装的软件:
zlib: zlib-1.2.3-1.2.1
libxml: libxml2-2.6.23-1.2
libpng: libpng-1.2.8-2.2.1
freetype: freetype-2.1.10-5.2.1
gd: gd-2.0.33-6.2

需要下载安装的软件:
把以下软件包下载到:/root/software/目录下
apache2: httpd-2.0.59.tar.gz
mysql5: mysql-max-5.0.24-linux-i686-glibc23.tar.gz
jpeg6: jpegsrc.v6b.tar.gz
php5:php-5.1.5.tar.gz

安装apache2:
进入目录/root/software/
# cd /root/software/
解压httpd-2.0.59.tar.gz
# tar -zvxf httpd-2.0.59.tar.gz
进入httpd-2.0.59目录
# cd httpd-2.0.59
生成/usr/local/apache2目录
# mkdir -p /usr/local/apache2
配置安装目录
# ./configure –prefix=/usr/local/apache2 –enable-modules=so –enable-rewrite
编译
# make
安装
# make install
安装完毕
启动apahce
# /usr/local/apache2/bin/apachectl -k start
用浏览器查看http://localhost,如果可以正常显示,说明apache已经配置成功了
停止apache
# /usr/local/apache2/bin/apachectl -k stop

安装mysql:
添加mysql用户及用户组
# groupadd mysql
# useradd -g mysql mysql
解压
# cd /root/software/
# gunzip < mysql-max-5.0.24-linux-i686-glibc23.tar.gz | tar xvf -
复制
# cp -r mysql-max-5.0.24-linux-i686-glibc23   /usr/local/mysql
生成mysql系统数据库
# cd /usr/local/mysql
# scripts/mysql_install_db –user=mysql
更改权限
chown -R root  .
chown -R mysql data
chgrp -R mysql .
启动mysql服务
# /usr/local/mysql/bin/mysqld_safe –user=mysql &
用root帐号访问mysql数据库
# /usr/local/mysql/bin/mysql -u root
关闭mysql服务
# /usr/local/mysql/bin/mysqladmin shutdown

安装 jpeg6:
建立目录
# mkdir -p /usr/local/jpeg6
# mkdir -p /usr/local/jpeg6/bin
# mkdir -p /usr/local/jpeg6/lib
# mkdir -p /usr/local/jpeg6/include
# mkdir -p /usr/local/jpeg6/man
# mkdir -p /usr/local/jpeg6/man1
# mkdir -p /usr/local/jpeg6/man/man1
解压,编译,安装
# cd /root/software/
# tar -zvxf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
# make
# make install

复制GD库文件:
复制文件gd.h和libgd.so到gd-2.0.33目录下
cp  /usr/include/gd.h  /usr/share/doc/gd-2.0.33
cp  /usr/lib/libgd.so    /usr/share/doc/gd-2.0.33

安装php5:
解压
# cd /root/software/
# tar -zvxf php-5.1.5.tar.gz
# mkdir -p /usr/local/php
# cd php-5.1.5
编译,安装
# ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/local/mysql/ –with-libxml-dir=/usr/share/doc/libxml2-2.6.23 –with-gd=/usr/share/doc/gd-2.0.33 –with-jpeg-dir=/usr/local/jpeg6/ –with-png=/usr/share/doc/libpng-1.2.8 –with-zlib-dir=/usr/share/doc/zlib-1.2.3 –with-freetype-dir=/usr/share/doc/freetype-2.1.10 –enable-ftp –enable-soap
# make
# make install
复制配置文件
# cp php.ini-dist /usr/local/php/php.ini

其中
–prefix=/usr/local/php
–with-apxs2=/usr/local/apache2/bin/apxs
–with-mysql=/usr/local/mysql/
–with-libxml-dir=/usr/share/doc/libxml2-2.6.23
是必要的选项

配置php:
#  vi  /usr/local/php/php.ini
找到register_globals = off,把off修改为on
找到;extension=php_mbstring.dll,把前面的;号删掉
找到;extension=php_mysql.dll,把前面的;号删掉

配置apache2支持php:
# vi /usr/local/apache2/conf/httpd.conf
找到DirectoryIndex index.html…这一行
修改为DirectoryIndex index.htm index.html index.php
找到LoadModule php5_module modules/libphp5.so在其下添加以下内容:
PHPIniDir “/usr/local/php”
找到 AddType application/x-gzip .gz .tgz 在其下添加如下内容:
AddType application/x-httpd-php .php
重启apache
# /usr/local/apache2/bin/apachectl restart
在/usr/local/apache2/htdocs目录里新建index.php文件,文件内容为:
<?php
phpinfo();
?>
在浏览器中输入URL为http://localhost/index.php进行测试

新概念不可不知

归类于: 技术前沿 — maxazure @ 5:42 pm

RSS RSS的全称是Really Simple Syndication,是一种描述和同步网站内容的格式,是目前使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用。

Feed Feed比起RSS更为广义。是RSS,Atom的综合称谓,并且包容各个版本。比如RSS2.0,RSS0.91,Atom0.3。 Atom 简单的讲ATOM是一种订阅Blog的格式。它与RSS相比来讲,有更大的弹性。深入的讲是与XML的格式定义的问题。但与RSS一样,可以用于订阅阅读。

网摘 网摘是一个在线的网页收藏夹,它可以让您收藏每一个您感兴趣的网页、网址,将它们保存下来,以便日后查阅。通过网摘收藏夹,还可以把您收藏的网页共享给大家。网摘不同于blog,网摘所关注的不是书写,而是阅读,是如何消化数字媒体(包括blog)。

Podcast Podcast这个单词源于Broadcast和iPod组合。是一种在互联网上发布文件并允许用户订阅feed以自动接收新文件的方法,或用此方法来制作的电台节目。

2006-08-29

JSP中 contentType 和 pageEncoding 的差异

归类于: JAVA — maxazure @ 4:21 pm

 

contentType — 指定的是JSP页最终 Browser(客户端)所见到的网页内容的编码.
就是 Mozilla的 Character encoding, 或者是 IE6的 encoding. 例如 JSPtw Forum 用的contentType就是 Big5.
pageEncoding — 指定JSP编写时所用的编码
如果你的是 WIN98, 或 ME 的NOTEPAD记事本编写JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的
NOTEPAD时, SAVE时就可以选择不同的编,码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16).
因为 JSP要经过 两次的”编码”,
第一阶段会用 pageEncoding, 第二阶段会用 utf-8 至utf-8, 第三阶段就是由TOMCAT出来的网页, 用的是contentType.
阶段一是 JSPC的 JSP至JAVA(.java)原码的”翻译”, 它会跟据 pageEncoding 的设定读取JSP. 结果是 由指定的
pageEncoding(utf-8,Big5,gb2312)的JSP 翻译成统一的utf-8 JAVA原码(.java). 如果pageEncoding设定错了, 或没设定
(预设 ISO8859-1), 出来的 在这个阶段 就已是中文乱码.
阶段二是由 JAVAC的JAVA原码至JAVA BYTECODE的编译. 不论JSP的编写时是用(utf-8,Big5,gb2312),经过阶段一的结果全
都是utf-8的ENCODING的JAVA原码.
JAVAC用 utf-8的ENCODING读取AVA原码, 编译成字符串是 utf-8 ENCODING的二进制码(.class). 这是 JAVA VIRTUAL MACNHINE
对常数字符串在 二进制码(JAVA BYTECODE)内表逹的规范.
阶段三是TOMCAT(或其的application container)加载和执行阶段二得来的JAVA二进制码, 输出的结果( 也就是BROWSER(客户端))
见到的. 这时一早隐藏在阶段一和二的参数contentType, 就发挥了功效. (见 阶段一的 ).
response.setContentType(”text/html; charset=utf-8″);
出来的可以是 utf-8, Big5, gb2312, 看的就是JSP ? contentType的设定.
<%@ page session=”false” pageEncoding=”big5″ contentType=”text/html; charset=utf-8″ %>
还有, pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此).
但这不是绝对, 看的各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示,
(例pageEncoding=Big5 不等于 contentType=utf-8).
一个简单的解决方法是在包含和被包含文件的开始部分都加上:
<%@ page contentType=”text/html;charset=GB2312″ language=”java” %>

 

JSP中文解决之道

归类于: JAVA — maxazure @ 4:16 pm

 

自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。
一、Java中文问题的由来
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType=”text/html;charset=GBK”%>或<%@ page contentType=”text/html;charset=gb2312″%>基本上就能解决这类乱码问题。
本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:
从页面form提交数据到java程序 byte->char
从java程序到页面显示 char—>byte
从数据库到java程序 byte—>char
从java程序到数据库 char—>byte
从文件到java程序 byte->char
从java程序到文件 char->byte
从流到java程序 byte->char
从java程序到流 char->byte
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法

前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。
1、JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding(”GBK”)或request.setCharacterEncoding(”gb2312″)。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType(”text/html;charset=GBK”)或response.setContentType(”text/html;charset=gb2312″)解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CharacterEncodingFilter.java:
public class CharacterEncodingFilter implements Filter
{
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter(”encoding”);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType(”text/html;charset=”+encoding);
chain.doFilter(request, response);
}
}

2、Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
3、Java与文件/流之间的乱码
Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
4、其他
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器,使用smartUpload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartUpload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartUpload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartUpload的源文件,增加了一个属性charset和setCharset(String)方法,将upload()方法中提取参数语句:
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );
改成了
String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );
终于解决了这个乱码问题。
三、后记
接触Java和JSP已经有一年多了,这一年来最大的收获是越来越喜欢上了Java,开始把问题当作乐事去研究,没有了以前的恐惧心理,我相信我会继续坚持下去。这一年来,从网上学习了很多同行的宝贵经验,在此表示感谢。这是我第一篇自己总结的Java学习心得,由于水平有限,本文中偏颇和错误之处,欢迎指正。如果对你有些价值,在保留作者信息和文章原始出处的前提下可以随处转载。
撰写该文之前已参考了很多关于Java中文问题的文章,其中影响比较大的有owen1944在“Java研究组织”中发表的《这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!》等。本文谈到的解决方法已应用到“基于网络的协作学习系统-WebCL”等项目中,并通过资源绑定的方式实现了该平台中文文两个版本的即时切换。Google根据浏览器自动选择语言,一个页面同时显示多种语言的国际化应用和车东的《Java中文处理学习笔记——Hello Unicode》一文引起了我极大的兴趣,日后想将继续探讨Java的国际化问题,欢迎大家一起讨论。

 

为什么我还要写自己的类库

归类于: JAVA — maxazure @ 4:12 pm

 

有很多人在问我,既然SUN或第三方已经为我们提供足够多的API,我们为什么还要自己写底层类库?
其实这个问题对于初学者和普通的程序员是不会理解的,但当你对一门语言,不然不仅是说JAVA,精通到一定的程序时,你就自然地理解了—–你不再想用别人为你设计的类库,因为你相信你自己写的类库的实现过程比别人提供给你的更strong.
这个strong的标准应该上效率更高,功能更好(不是更多).
我们先把SUN和第三方软件商提供的API叫标准API,我们自己的就叫快捷API,
标准API的特点是通用,为了这个通用,就要付出一定的资源,就象JAVA本身为了通用就要先实现JVM,一个普通的BEAN,它的业务逻辑可能只有一行代码,但为了照顾那些菜鸟级的客户程序员,BEAN的设计者们(服务程序员)不得不花更多的时候来写BEAN的接口.就是所谓的规范:以80%的资源来完成业务逻辑以外的功能.
就比如JAVAMAIL,在一个MAIL系统中,真正实现非常完整的MAIL功能的API大约有30个左右,但JAVAMAIL为了基于”消息机制”这一规范,无论从效率还是从易用性方面都成了邮件系统中的垃圾,我自己虽然学过好多种语言,但我对JAVA语言有一种狂热.我这样评价JAVAMAIL并不影响我对JAVA语言和JAVA技术的热爱.
可以说,JAVA开发小组的人员已经不是原来的那些精英了,他们最初的思想并没有被一直发扬,就JAVAMAIL本身来说,他们已经从思想退化到程式的水平——为了通用而故意通用,结果陷入了难用的泥坑.
对于我们来说,如果你对JAVA技术的实现非常了解,自己写类库解决问题是一个最有效的手段.比如我们明知道String的+操作在底层是StringBuffer的append()操作,为什么不在程式中直接这样做呢?如果你这样你会获得惊人的效率:
String s = “”;
for(int =0;i<1024*1024*4;i++)
s += 1;
这样得到4M的字符串在我的P2上要30分钟以上,

StringBuffer sb = new StringBuffer();
for(int =0;i<1024*1024*4;i++)
sb.append(”1″);
String s = new String(sb);
不到一秒.为什么不这么做呢?当然String和StringBuffer是普通程序员都知道的,但是对于更多的数据结构的效率,有几个程序员都明明白白清清楚楚?
我多次说过,所有的语言,哪怕是汇编,所有日期类库都是从UNIX时间戳转换来的,
那么从这个值转换过去是最快的方法,你别看SUN为你提供了DateFormat,Calendar等类以及一些什么after(),before()方法,它们也都是从UNIX时间戳来比较再转换的,为了实现通用,它们还要考虑不同国家的格式规范,
(local),所以根本不如你自己写来得更有效.
另外一方面,你要相信,标准API的开发人员并不是每个人都比你更聪明,同样的功能他们也许实现得比你更差劲,或者说你能做得比他们更好.当然绝大多数的功能他们实现得很好,这就是我,我们都还在用JAVA语言而没有去自己重写JAVA语言的原因,但在实际应用中,很多很多的时候,应该自己动手动手去写出更有效率,更加实用的快捷API来.
最后说说,如何能写出更好的API.
首先你要对现有的API非常熟悉,那些连什么随机数API都不知道还要问人的人不要再看了,你们应该好好地下一些真功夫在JAVA语言本身上,而不要急于做一些项目,你们现在要做的不是项目,而是作业.
对JAVA语言有了相当的了解后,提高一个档次,深入地理解一个JAVA技术.
然后回过头来,再深入JAVA语言,就是说在功夫到了七层左右,先要对十层的境界有一个概览再回头练八层.这时你把JDK的几个jar文件都展开了,然后把目录结构打印出来,对每个包下的每个类这样的整体结构的目录树先熟悉,然后每天对其中的几个jad出来,看看SUN的实现过程,吹毛求疵!!!不是为了和他们过不去,是为了加深记忆和理解.
如果没有足够的时候,至少对常用的类要做到以上的要求.
接下来,你要学习的是JAVA语言的调试技术,不要用任何工具,就用命令行.
熟悉以后学习JAVA虚拟机规范,这是你成为高手的关键.
经过以上学习,当然在学习中为了解决一些问题你已经无意地学了更多地东西.
你自己试试看,自己写一个String类,把jdk中的那个给replace了看看,如果一切没问题你应该可以是真正的高手了.这时你一定会感觉到自己写API的效率和乐趣了.

 

Response.ContentType

归类于: JAVA — maxazure @ 3:34 pm

Response.ContentType 是用来控制输出的文件类型的。

服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“Text/Html”类型。
<% Response.ContentType = ”text/HTML” %>
<% Response.ContentType = ”image/GIF” %>
<% Response.ContentType = ”image/JPEG” %>

用于作为文本内容返回而不是已解释的 HTML 语句
Response.ContentType = ”text/plain”


程序代码:

<% 
Response.ContentType =
 “text/plain” 
Response.write(now()&“会被执行么?”)
%>

你可以注意到:页面提供下载,页面中的ASP内容被解释执行了的

程序文件以XLS文件被提供下载
Response.ContentType = ”application/vnd.ms-excel”


程序代码:

<%
Response.ContentType =
 “application/vnd.ms-excel”
Response.write(“本页面调试会出现下载对话框提供下载,保存类型为XLS”)
%>

实现歌曲连续播放
response.ContentType=”audio/x-pn-realaudio” 


程序代码:

<%
dim ramstr 
ramstr=“” 
set rs=server.createobject(“adodb.recordset”
sql=“XXXXXXXXXXX” 
rs.open sql,conn,1,3 ’conn已定义 
do while not rs.eof 
ramstr=ramstr&rs(“url”)&vbCrLf 
rs.movenext 
loop 
rs.close 
response.ContentType=“audio/x-pn-realaudio” 
‘response.ContentType=
“audio/x-mpegurl” 
response.write ramstr 
%>

response.write 输出的时候,由于定义了response.ContentType 所以输出歌曲地址的时候会自动调用符合相应格式的软件来播放歌曲,不过前提是播放歌曲的软件必须先安装的。 

下一页 »

基于WordPress

posted on 2007-07-16 23:06 张金鹏 阅读(446) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: