星期三, 四月 30, 2008

关于tomcat乱码问题的解决

关于tomcat乱码问题的解决

(一) 更改 C:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:

  方法是找到 server.xml 中的

<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />


  

这时地址栏中就可传递中文了,对于tomcat5.0 不加 URIEncoding='GBK' 是不能传递中文的,有中文传递时只能变成乱码。

(二)如servlet不能正常显示汉字 则加入
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=gb2312");
...
}
}
作用是把页面的内容定义为中文字集gb2312.

(三)如果从数据库中抽取的数据是乱码需要加过滤器

实现如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;


public class SetCharacterEncodingFilter implements Filter {


public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("gb2312");

// 传递控制到下一个过滤器
chain.doFilter(request, response);
}

public void init(FilterConfig filterConfig) throws ServletException {
}
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

(四)字符的转换,如在读取文件内容,数据库内容出现乱码时,可由以下办法解决。


public class toGB2312
{
public toGB2312()
{
//
}
public String Gb2312(String uniC){
String gb2312Str = "";
if(uniC == null){
uniC = "";
}
try{
byte[] tep = uniC.getBytes("ISO8859_1");
gb2312Str = new String(tep,"GB2312");
}
catch(Exception ex){
}
return gb2312Str;
}

public String UniC(String gb2312Str){
String unicoStr = "";
if(gb2312Str == null){
gb2312Str = "";
}
try{
byte[] yte = gb2312Str.getBytes("GB2312");
unicoStr = new String(yte,"ISO8859_1");
}catch(Exception ex){
}
return unicoStr;
}
}
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。
关于tomcat乱码问题的解决

(一) 更改 C:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:

  方法是找到 server.xml 中的

<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />


  

这时地址栏中就可传递中文了,对于tomcat5.0 不加 URIEncoding='GBK' 是不能传递中文的,有中文传递时只能变成乱码。

(二)如servlet不能正常显示汉字 则加入
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=gb2312");
...
}
}
作用是把页面的内容定义为中文字集gb2312.

(三)如果从数据库中抽取的数据是乱码需要加过滤器

实现如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;


public class SetCharacterEncodingFilter implements Filter {


public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("gb2312");

// 传递控制到下一个过滤器
chain.doFilter(request, response);
}

public void init(FilterConfig filterConfig) throws ServletException {
}
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

(四)字符的转换,如在读取文件内容,数据库内容出现乱码时,可由以下办法解决。


public class toGB2312
{
public toGB2312()
{
//
}
public String Gb2312(String uniC){
String gb2312Str = "";
if(uniC == null){
uniC = "";
}
try{
byte[] tep = uniC.getBytes("ISO8859_1");
gb2312Str = new String(tep,"GB2312");
}
catch(Exception ex){
}
return gb2312Str;
}

public String UniC(String gb2312Str){
String unicoStr = "";
if(gb2312Str == null){
gb2312Str = "";
}
try{
byte[] yte = gb2312Str.getBytes("GB2312");
unicoStr = new String(yte,"ISO8859_1");
}catch(Exception ex){
}
return unicoStr;
}
}
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。

星期五, 四月 11, 2008

clientAccessCheck: proxy request denied in accel_only mode

Squid Cache: Version 2.5

Looks like the client is trying to use you as a proxy, either directly or indirectly via another proxy..
However, HTTP/1.1 requires HTTP servers to accept such request. Turn "httpd_accel_with_proxy on".
You should also make sure your access control rules is set correcly to only allow access to your servers if you haven't already.. Not the cause to your problem, but may be a cause to other problems later if not done..

星期三, 十一月 28, 2007

我们都知道在jsp中include有两种形式,分别是

< %@ include file=” ”%>

< jsp:include page=” ” flush=”true”/>

  前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。

  通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用< %@ include file=” ”%>,哪些时候用< jsp:include page=” ” flush=”true”/>.这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。

  < %@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。

  这里对翻译阶段进行一下说明:我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。

  Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类?JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段.

  由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个java文件。下面举个例子。

  服务器用tomcat,引入页面的jsp文件叫test.jsp。被引入的页面叫date.jsp.这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test

//======date.jsp的源文件=====//
<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String date_cn ="";
String dateStr = "";
switch(date.getDay())
{
case 0:date_cn ="日"; break;
case 1:date_cn ="一"; break;
case 2:date_cn ="二"; break;
case 3:date_cn ="三"; break;
case 4:date_cn ="四"; break;
case 5:date_cn ="五"; break;
case 6:date_cn ="六"; break;
}
dateStr = (1900+date.getYear())+"年"+(date.getMonth()+1)+"月"+date.getDate()+
"日(星期" + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======以下是test.jsp的源文件=============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<head>
<title>include的两种用法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ include file=”date.jsp” %-->
//我们在这里用include的两种不同形式来引入date.jsp这个文件.
<head>
<body>
<table><tr><td>
有关jsp中include的两种用法.敬请关注。
</td></tr></table>
</body>
</html>


  在test.jsp 文件中,我们只输出了一行文本“ 有关jsp中include的两种用法.敬请关注。”,现在让我们先用这种形式引入date.jsp这个文件。你想会出现什么问题了吗?此时出现了错误提示:


HTTP Status 500 ?
org.apache.jasper.JasperException: /date.jsp(0,0) Page directive:
can't have multiple occurrences of contentType


  以下还有一堆错误,但我们只要看这里就知道问题的所在了。状态码为http 500服务器内部错误。再看下面的提示。在date.jsp页面中不能指定多个contentType.

原因就在这里了。是因为在翻译阶段,date.jsp文件的代码被原封不动地加入到了test.jsp页面从而合成一个文件。合成后的文件中就会相同的:

< %@ page language=”java” contentType=”text/html;charset=gb2312”%>

  这句代码。解决的办法是把date.jsp文件中的这句删掉。刷新后再请求test.jsp页面

请求test.jsp在页面显示如下

2007年8月12日 13:12:40

有关jsp中include的两种用法.敬请关注。

  这时我们还不能发现什么。还是去查看tomcat下的临时文件吧。到那里去看看date.jsp文件的内容是否已被加入到了test.jsp文件中。

< 注.此处的tomcat装在E盘根目录下>

目录

E:tomcatworkStandalonelocalhosttest.

在这个目录下会看到

test_jsp.java和test_jsp.class两个文件。

  这里的java文件就是jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文件。

  相对应的test_jsp.class这个文件就是编译test_jsp.java这个servlet文件产生的类文件了。打开所产生的servlet 文件(test_jsp.java)。此时我们会发现,在test.jsp 文件被转化成servlet文件时,在输出的< haed >之间加入了一些不是test.jsp页面里面的代码,新加入的内容就是 date.jsp里面的代码: 新加入了哪些内容或是否真的加入了新的内容请自己测试去看一下就会一目了然了.在这里不再详述.

以上就是我们用< %@ include file=”date.jsp”%>这种形式得到的结果.

下面我们换用< jsp:include page=”dae.jsp” flush=”true”/>也就是将

< %@ include file=”date.jsp”%>换成< jsp:include page=”dae.jsp” flush=”true”/>,然后请求test.jsp.

2007? ê 8??12?? 13:30:13

  有关jsp中include的两种用法.敬请关注。

  此时会在页面上看见.我们所引入date.jsp输出的日期中中文出现了乱码.什么原因?是因为include行为元素是在请求处理阶段执行的(此处要对请求处理阶段进行说明一下.Jsp容器除了上面提到的负责将jsp页面转化成servlet外,还负责调用jsp页面实现类以处理每个请求并产生应答. 这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文件)。

  所以在我们作include行为元素引入页面时,实际只是引用了 date.jsp这个文件被转化并被编译后产生的servlet类文件.既如此, date.jsp就是作为一个单独的文件在执行后才被test.jsp文件运行时调用.由于date.jsp文件中没有指定字符编码.所以出现了乱码.解决办法是在date.jsp文件中重新把刚才去掉的

  这行语句加入后刷新重新运行.此时页面显示正确,并跟用include指令正常运行时一样.再查看tomcat下的临时文件会发现.此时多出了一个 date_jsp.java文件和一个date_jsp.class文件.这两个文件得来的方式跟test_jsp.java和 test_jsp.class文件得来的方式一样.再查看一下此时test_jsp.java文件的代码会发现.此时只新增加了一句代码:

JspRuntimeLibrary.include(request, response, "date.jsp", out, true);

  它并没有把date.jsp文件的代码加入到test.jsp.

  只是在运行时引入了date.jsp页面执行后所产生的应答.这意味着我们可以指定任何能够产生应答的Web资源,(例如一个servlet或一个 jsp页面),只要这些资源所产生的类型和jsp页面产生的内容类型相同.JSP容器将通过一个内部的函数调用来执行指定的资源.因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象.以及所有原来的请求参数.

  由于在主页面被请求时,这些页面还没有被引入到主页面中,所以你可以对page属性使用一个请求时属性值,以便根据运行时的情况来决定要引入哪一个页面.还可以添加一些将被引入的页面读取的请求参数.

<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>

  如果修改了被引入的jsp页面,那么可以立刻使用该页面的最新版本,这是因为对待被引入的页面的方式与对待由浏览器直接调用的jsp页面的方式完全相同.即容器检测页面的变化,并自动进入翻译阶段,以得到页面的最新版本.

(注意,include行为元素同jsp其它元素一样,没有行为体时要以”/”结束.就像下面这样.

< jsp:include page=”” flush=”true” />

以下是对include 两种用法的区别

主要有两个方面的不同;

  1.执行时间上:

< %@ include file=”relativeURI”%> 是在翻译阶段执行

< jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.

  2.引入内容的不同:

< %@ include file=”relativeURI”%>

  引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

< jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.

  另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍。(CSDN)


在中国崇尚权威的文化氛围中,名人名言占的地位是很重的,很多名家说的话,往往被人民当成指导自己人生观世界观的不二准则,但这些几千年流传下来的名言 中,也有一些话被人刻意或无知地曲解,背离了话语者本身的意旨与初衷,迷惑了天下万千受众。影不才,试举数例解析一二,以还世情真相与大众……好了我再文 诌诌地说话大家估计要扔鸡蛋,虚荣心也满足了,下面开始举例开讲。

1、以德抱怨

原句:“或曰:‘以德报怨,何如?’子曰:“何以报德?以直报怨,以德报德” ————《论语 宪问》

以德抱怨,是我们常听到的一句话了,人们通常理解的“以德抱怨”什么意思呢?就是说:孔老夫子教我们,别人欺负你了,你要忍,被打碎牙齿也要往肚子里吞, 别人来欺负你,你反而应该对他更好,要用你的爱心去感化他,用你的胸怀去感动他。这就让人感觉很有点肃然了。想想看,如果我一巴掌呼过去那个被打的人还笑 笑说打得好啊,你越打我我就要对你越好……遇到这种情况我也会感动到傻眼,这多好一孩子,多伟大的情操啊……

但事实上,我们根本曲解了孔子的原意,我当初,也万万没想到原来在孔子这句“以德抱怨”的后边还跟着另外一段话,什么话呢?子曰:“以德抱怨,何以报德? 以直报怨,以德报德!”看完以后,幡然醒悟,原来我们都被某个断章取义的孔子FANS给玩了一把!当时的真实情况是怎么样的呢?孔子的一个弟子问他说:师 傅,别人打我了,我不打他,我反而要对他好,用我的道德和教养羞死他,让他悔悟,好不好?孔子就说了,你以德抱怨,那“何以报德?”别人以德来待你的时 候,你才需要以德来回报别人。可是现在别人打了你,你就应该“以直抱怨”,拿起板砖飞他!看!就因为被人故意省略了一句话,刚烈如火的孔老夫子一下就被扭 曲成了现在这个温婉的受气包形象。

与西方文化相比,东方文明一向被认为是谦逊坚忍的,同样是被人欺负,西方的带头大哥耶稣在圣经里就叫嚣要:“以眼还眼,以牙还牙。”小弟们!别人瞪了你一 眼,你就要瞪回去,别人咬了你一口,你就要咬回来!而东方呢?佛家的精神领袖释迦牟尼说“我不入地狱,谁入地狱?”一副逆来顺受的样子。而且他可不是说说 而已的,大鹰来欺负他,要吃他的肉,他也真从自己身上一刀刀帮大鹰割下肉来,这就伟大得有点近乎BT了。说完了国外的几位大领导,再回到中国,孔老宗师的 这句话为什么会被别人有意地曲解呢?根源还是当时封建统治者的需要,他们的心思,无外乎就是要信仰孔子的万千民众成为“以德抱怨”的顺民,只有“以德抱 怨”的民众,才会老老实实地服从他们的剥削和压迫。我们再来看看影响吧,孔老先生这句被曲解了的“以德抱怨”,在中国文化史上起的压迫作用,可真是大到了 天上。皇帝残暴,我们要“以德抱怨”,地主剥削,我们要“以德抱怨”,八国联军都打到北京了,还是要“以德抱怨”,要卑躬屈膝,要割地称臣,要想尽一切办 法彰现自己的“德”,要“量中华之物力,结大国之欢心”……就是没想过反抗。试想,如果中国的文化里,没有这种把正确的思想东篡西改来为封建统治阶级服务 的恶习,如果孔子这句原话没有被刻意地曲解成这样子,我们中国人会养成这样一种懦弱的思维惯性吗?有人说西方人的骨子里本性是狼性,而东方人的骨子里的本 性是羊性,这里如月影倒想问问了,是什么原因让我们变成了这样?如果我们从古以来信奉的是西方那种“以眼还眼,以牙还牙”的训诫,近代史上的中国,会给世 界留下那么一个任人鱼肉的印象吗?

以德抱怨。

原句:以德抱怨,何以报德?以直报怨,以德报德。

歪曲程度:8

反面影响:9

2、民可使由之,不可使知之。

原句:。“子曰:兴于诗,立于礼,成于乐。子曰:民可使由之,不可使知之。”——————《论语·秦伯》

又是孔老先生的话,小小景仰一下下先。

民可使由之,不可使知之,这句话什么意思呢?是说,国家统治人民,指使驱赶他们去做事就行了,不要让他们明白他们在做什么。这句话在现在看来,绝对很明显 就是封建统治阶级几千年来一直在玩弄的愚民权术,小老百姓嘛,让他们知道那么多干什么?最好都是昏昏噩噩,只知道照着我们的意思去庸庸碌碌一辈子,这句训 诫不可谓不恶毒,它被千百年来中国的大小封建统治者奉为至宝,抹杀了多少真理与人民的创造性,但同时,我们的问题就来了,这样的一条愚民之术,真是孔子这 位致力于教化人民的教育家的本意吗?

我们知道,在春秋时代的文章是没有标点符号的,后人要研读那时侯的文章,便要再经过一个“句断”的过程,即是根据上下文意思自己在句子的适当地方加上标点 和停顿,这样才能得出一句句意通顺而连贯的话。在这里插一句,孔子的文章为什么被后人引用得非常多呢?这其一当然是孔子本身的名望使然,其二,则是因为他 的语录涵盖的范围非常广,几乎包括了社会生活的方方面面,这样一来,后来的人无论是谁,抱着什么目的,都可以从孔子的话中断章取义地引用其中的相关部分, 再加以自己个人倾向的理解和句断,用来证明自己的观点。比方说现在这句“民可使由之不可使知之”,从前文来看,我们孔老先生前边一直在讨论诗礼乐这三种东 东的教育问题,可怎么后边一下子就变成去教帝王权术的训诫了呢?原来,这又是后人别有用心地断章取义,刻意在句子的中间用一个不恰当的“句断”使这句话产 生了歧义的缘故。我们结合上下文的语境,很容易就能得出这句话正确的分句方法:“子曰:兴于诗,立于礼,成于乐。民可,使由之,不可,使知之。”孔子的整 句话就是说,诗、礼、乐这三样东西是教育民众的基础,一定要抓好,如果人民掌握了诗礼乐,好,让他们自由发挥,如果人民还玩不来这些东东,我们就要去教化 他们,让他们知道和明白这些东西。”你看,这才是“有教无类”的大教育家孔老先生的本意嘛。好好的一句话,硬是被那些别有用心的混蛋生生地坳成了孔子要愚 弄人民,要阻挠人民知书答理寻求知识的愚民之术。真不知道那些曲解这话的SB怎么想的,你要说这种P话是教育家孔子说出来的,谁信啊?都把人民当白痴来忽 悠了?

有人说古时候的中国人民是不幸的,即便是在物质丰富的盛世,他们的精神世界也贫乏得可怜,到了中近代,西方的思想领域渐渐迎来了文艺复兴,迎来了民主共 和,迎来了一个又一个推动世界的发明进步与思想启蒙,而聪明的中华民族呢?在更早的时候他们就有了伟大的四大发明,走在了世界的前边,可为什么就是这么好 的基础,到了近代我们反而远远于西方这些小字辈的民族?民可使由之,不可使知之,多恶毒的训诫啊!它象一条张开血盆大口的大蛇,狠狠地缠在中华民族的身 上,泯灭了多少先进的思维火花,束缚了多少应有所作为的苗子。但反过来看看,故意曲解这句话的封建统治者固然可恨,但我们能完全把责任都推到他们身上吗? 这本身就是多么可笑的一件事情,我们怎么就没想想,一个伟大的教育家,一个用一生置身于教化天下民众的孔子,又怎么会说出“民不可使知之”的蠢话来?更可 笑的是,这句话我们竟然就这样相信了几千年膜拜了几千年,这最后该伤心的,是孔老先生呢?还是我们呢?

民可使由之,不可使知之

原句:“子曰:兴于诗,立于礼,成于乐。民可,使由之;不可,使知之。”

歪曲程度:7

反面影响:9

3、无毒不丈夫

原句:量小非君子,无度不丈夫。——————民间谚语联对

量小非君子,无毒不丈夫,这句话绝对是中国众多以讹传讹的话中最搞笑的一个例子之一,就算是刚完成九年义务教育的初中生,也能轻易看出这其中的不妥之处, 首先,这无毒不丈夫,就跟我们认识的古人崇尚的价值观念大大背离了,大丈夫,自然是说那些坦坦荡荡胸怀宽广的男人,什么时候恶毒阴损,暗箭伤人这种前缀也 能放在前边来形容大丈夫了?

原来,这句来自民间的谚语本来应该是“量小非君子,无度不丈夫”,这本来是个很好的句子,里边充分运用了对仗。显示出了一份阳刚有力的气魄,一个胸怀坦荡 的男人形象就跃然于纸上,可惜劳动人民口耳相传的这一句话,到了朝廷上那些所谓的学高八斗的“君子”嘴里就变了个味。为什么呢?这要从古时候文人的习性说 起,在这副对联式的谚语里,“度”为仄声字,犯了孤平,念着别扭,很容易读为平声字“毒”,那些对音律美感要求甚高的学者们某天吃饱了没事儿干,便发挥他 们的专长自做主张,把这句改为“无毒不丈夫”了,于是这句话,终于成了典型的“信言不美,美言不信”的例句,成了迂腐文人的笔下的又一个牺牲品,“量小非 君子,无度不丈夫”,原话里一个君子对一个丈夫,一个度对另一个量,本来是很完美的一个句子,可经过上千年的以讹传讹,竟成了“无毒不丈夫”这句现在我们 挂在嘴边的口头禅。

这句话的整个演变过程,我宁可相信是无意的,否则也太缺德了,这不故意往咱男人身上抹黑么?但就是这无意的一个讹传,却也给我们带来了些说大不大,说小不 小的影响,我们都知道心理学上有个说法叫先入为主,潜移默化。无毒不丈夫,我们天天在耳濡目染这个被篡改了的男人形象之际,心里的价值观人生观,难免也会 受到些不良影响,天天看着电视里奸人怂恿主角干坏事的时候都用这句:“干吧!无毒不丈夫!”然后主角想想也对,于是五指并拢手掌上举,狠狠地做一个切的动 作:“无毒不丈夫,干!”你能说同样作为一个男人,这东西看久了你的思维能不收到一丁点儿的影响么?关于这种语言的影响力量,我再举个例子,比如隔壁顶撞 了我一下,这时候我朋友张三来了:用的是原版的好话劝我:“老话说,量小非君子,无度不丈夫,大如啊你是个男人,就别跟他一般计较了。”张三这样说,我这 个大丈夫当然再拉不下面子去计较这种小事,可如果另一种情况,张三来和我这么说:“这老话怎么说的?无毒不丈夫!大如,你是男人,不能怂啊!给你刀,去做 了他!” 看看,我听到他这话,除了接过刀速度冲出去乱砍以证明自己是个男人之外,还真没什么好办法,你说对不对?

无毒不丈夫

原句:量小非君子,无度不丈夫。

歪曲程度:9

反面影响:5

4、唯女子与小人难养也。

原句:唯女子与小人难养也,近之则不孙,远之则怨。——————《论语·阳货》

现今女权主义抬头,孔老夫子的这一句话便立时变成了女权精英批判者们群起而攻之的绝好靶子,看看,这就是你们中国男人歧视咱女性的最初起源,孔夫子这老混 蛋啊!害我们女性被压迫了几千年啊几千年,好不容易翻身做主人哪,我们要顶上半边天再抢他们的半边~~天!一时间,群情激愤,凶狠异常,热闹非凡。但各位 姐姐们阿姨们姑奶奶们,且听如月影说两句话,你们把这罪过都推到孔老人家身上,却是大大地冤枉了他了。

先根据当年老孔的处境,提出一个疑问:“孔老先生当时,为什么要说出“唯女子与小人难养也”这样的话?任何人说话都不会是无缘无故的,当然,除了疯子,而 我们的孔老先生应该不是疯子吧?而且这位孔老先生受《诗经》的影响很深,他说:“诗三百,一言以蔽之,思无邪”,他认为《诗经》是一部伟大的著作,而我们 再来看看这部孔子都很推崇的巨著,里边倒有很大一部分歌颂了女子的活泼美丽,大方善良,歌颂了当时男女平等的浪漫爱情氛围,事实也是这样,在春秋时代,男 女间是相当平等的,而孔夫子本人更是曾反复多次以诗经里的“妻子好合,如鼓瑟琴”来表达了自己对婚姻和女子的平等看待观点。所以,说孔子歧视妇女,不仅和 孔子的思想不符,更与当时的民间社会整个大环境对不上号,因此这个说法,实在是大大地有待商榷。

所以我们就要看看,孔子当初是在什么一种环境下说出“唯女子与小人难养也”这句话的?这话又是对谁说的?他一宗师级别的身份,不可能在路边想着想着突然心 情烦躁就开骂一八杆子打不着的妇女同志吧?在《史记·孔子世家》里,提到了孔子之前的卫国之行,孔子“居卫月余,灵公与夫人同车,宦者雍渠参乘出,使孔子 为次乘,招摇市过之。孔子曰:‘吾未见好德如好色者也。’于是丑之,去卫。”我来大致翻译一下这段话,当代全国教育劳模孔老先生受卫国国君的邀请,来到了 卫国参观学习休养,但在这期间,孔老先生突然发现自己被涮了,人家根本是拿他的身份来炫耀自己抬高自己而已,并不是真正支持他来这教化卫国民众的,尤其是 那个卫灵公的老婆,为了抬高自己的身望,公开炫耀,贬低了孔子,孔老先生那个郁闷啊,你卫灵公到底是喜欢德才多些,还是喜欢女色多些?在你心里我和你老婆 哪个重要?干醋自己吃完,依然没人鸟他,孔子怒了,说:“吾未见好德如好色者也!丢!此处不留爷,自有留爷处!GO,GO,GO!”收拾行李就离开了卫 国,离开之后,心情平复了,想起卫国公老婆那种仗着得宠,骄横跋扈乱政扰民的烂事儿,就发了感慨:“唯女子与小人难养也!近之则不孙,远之则怨。”

你看,知道了这些历史背景和人生经历,孔子这话就很好理解了。我们知道,他骂的人是那种“被养”的女人和小人,女子还好说,可想想什么人才能养小人?君主 啊!再看看孔子的卫国之行,一切都明白了,他这话断不是发神经突然开骂起包括自己老妈在内的所有女人,而是有一个特指的对象,这个对象,就是卫灵公那位老 婆南子,就是那些“近之则不孙,远之则怨”的宫廷女权,近之则不孙,远之则怨,这后一句话怎么解释呢?就是说你作为一个君主,对那些后宫的女人和没什么本 事的拍马小人太亲近了,她们就会得意忘形,忘了自己的身份,开始用你的权力胡做非为,而你疏远她们吧,她们又要埋怨,总之是非常麻烦。此前没见过什么宫廷 里女人之间的斗争的孔子说出这话是可以理解的,他的担心也不是没有道理,孔子之前,妲己误国,烽火戏诸侯,这些事例还少吗?孔子之后,宦官小人当道,皇后 外戚乱政的桥段更是屡屡上演,不可枚数。所以我们的女性同胞们,你们要清楚,孔子当时没发神经把你们全天下的女人不分青红皂白地乱骂一通,别再憋屈他老人 家了~~

最后一个问题,那么是谁误传了这句话,让我们可爱的女性同胞被压迫了几千年之久呢?俗话说冤有头,债有主,如月影要帮孔老夫子平反,自然也要再帮你们找到 一个真正的罪魁祸首,让你们发泄出那几千年积下的怨恨(怎么说着说着象鬼片了-_-!),好了,拉回正题,西汉的时候有一位所谓的“大儒”董仲舒,此人大 力主张“夫为妻纲”,就是这个家伙,借孔子的一句话断章取义,给广大的中华妇女头上戴上了千年的枷锁。看看这家伙在《基义》一书里提出的“三纲”:“君臣 父子夫妻之义,皆与诸阴阳之道。君为阳,臣为阴;父为阳,子为阴;夫为阳,妻为阴。王道之三纲,可求于天。”他这东西就是一为讨好历任统治者的马屁之作。 “君为臣纲”,为历代皇帝所接受,渐渐形成了封建统治的一套准则,而“夫为妻纲”,则为历代男人所推崇。这“纲”是什么意思?君为臣纲,则君要臣死,臣不 得不死!知道这个“纲”的厉害了吧?你想想,各位苦命的女子没嫁人前都一可人的窈窕淑女,本来身份平等,嫁了人,就得时刻提心吊胆地按着老公的这个“纲” 过日子,这三纲五常,束缚了中国多少年,害了多少代人啊!

唯女子与小人难养也。

原句:唯女子与小人难养也,近之则不孙,远之则怨。

歪曲程度:6

反面影响:9

5、吾生也有涯,而知也无涯。

原句:吾生也有涯,而知也无涯,以有涯随无涯,殆已 ——————《庄子·养生主》

这句话是庄子说的,八卦一下,庄子此人,实在是如月影非常喜欢的一个人物,他的思想和性情,都非常十分很特别对我胃口,什么大家不爱听这些?那算了,本来 想抖点猛料让大家深入了解一下我这个好同志的……好了好了别扔鸡蛋,我说正事还不行吗?好,先来看看,“吾生也有涯,而知也无涯”,这句话我们在什么地方 见得最多呢?第一,是图书馆,第二,是全国各个小学的后墙上,按照现在人们的普遍理解,这句话实在是学习励志类的不二明言警句,生也有涯,知也无涯,多崇 高的目标啊,这比什么孔老夫子的“学而时习之不亦乐乎”都来得有气势多了,古往今来,不知道多少学子在这句话的激励下凿壁偷光闻鸡起舞奋发图强追求上进读 那些永远也读不完的书,动力啊,偶像啊,庄子七老八十还能说出这么振奋人心的话,咱年轻的小辈正当青春,怎么能输给他老人家?不狠狠地读书怎么对得起他老 人家?

但真相说出来,往往会让人哭笑不得,庄子的这句话其实是这样说的,“吾生也有涯,而知也无涯,以有涯随无涯,殆已。”我庄子的生命是有限的,但我面对的知 识是无限的,要我以本来有限的生命,去追求那种永远看不到边的尽头,你当我是SB吗?这样会搞死自己的捏~~庄子是一个追崇顺其自然,清净无为的洒脱人 物,他认为人吃个饭,饱了就行,没什么必要追求奢华,穿个衣,别冻着就行,实在不需与什么人攀比。同样,学问也是如此,学够了就行,学以致用,学问学来就 是为了用,你一个人再牛B,还能全部用到这世间所有的学问?既然不能用到,那你老学老学把自己整个生命都拿来学这是干啥呢?时间都被你拿来学习了,还怎么 有时间把学到的东西拿来用呢?这不就跟吃饭是为了炫耀穿衣是为了攀比的人一样,完全本末倒置了吗?所以他老人家就在《养生主》一书中给后世陷入这个怪圈的 书呆子们提了个醒,你们这样苦学盲学乱学通学,对身体不好滴,会搞死自己滴~~

当然,庄子的这句被人误解的话,其实并没有以上那些例子引起的反面作用那么大,读书是必须的,掌握一定的知识也是必须的,但咱们要记得自己把握好,有个 度。你就算用半辈子武装得自己学富五车,却发现很多知识你根本用不上,这不浪费了么?庄子从来都不认为一个人能比自然更大,这是他所有的话中唯一的主题思 想,实际上,就算我们拿现在的世界观来衡量一部《庄子》,仍能发现他的学说里,有许多是符合辨证唯物主义思想的。可叹的是,就是这么一位崇尚自然的思想 家,他一句劝解读书人适可而止循序渐进的话却被一些叫嚷着“人定胜天”的人当成了激励年轻人拼命读书的名言来供着,科举改成了高考,八股改成了应试教育, 于是大学生一年比一年多,可素质却一年比一年低下,最后整黄了吧?你看现在大学文凭都和废纸没什么两样了,这帮人还不醒悟,还是继续读,读完大学读硕士, 读完硕士读博士,读完博士读博士后……读完出来一看,嘿,好象我已经老了捏,很多知识也用不着捏,这不自己跟自己过不去么?最后再说一句私人的牢骚话,最 近我去图书馆,总看见一帮老头老太太天天在那侯着,一见有啥免费的学习班就往里钻,也根本不管别人老师是教着什么,各位老爷爷老奶奶们,听我这个后辈说句 话,您们这不瞎捣蛋么?赶时髦啊?摆个性哪?想让我们称赞下您啊?还是真打算活到老学到老啊?自个儿细细思量一下有什么意义么?能不能腾些地方给些真正需 要的人进去?M的连“量子力学基础浅谈”都有街道的老大妈在里边占着位置,我真是无语了……

吾生也有涯,而知也无涯。

原句:吾生也有涯,而知也无涯,以有涯随无涯,殆已

歪曲程度:8

反面影响:3

6、相濡以沫

原句:相濡以沫,不如相忘于江湖——————《庄子·大宗师》

说点轻松点的吧。

沿着伟大的思想家庄老爷子的足迹,我们再来看看另外一条咱们耳熟能详的名句:“相濡以沫”。

说起这句话,其实大有来头,我想大家都听过现在流行的一个词吧?江湖,这个“江湖”是从哪儿出来的呢?很多人以为最初是古龙小说里的一句“人在江湖,身不 由己”,其实不然,江湖这个词最早的出处,便是在庄子说“相濡以沫”的这句话中。在《大宗师》篇中,庄子给我们讲了这么一个小故事:“泉涸,鱼相与处于 陆,相呴以湿,相濡以沫,不如相忘于江湖。”他说的是有一天,一眼泉水干了,两条小鱼被困在了一个小水洼,为了生存下去,它们彼此从嘴中吐出泡泡,用自己 的湿气来湿润对方的身体,互相扶持,互相依赖。但,与其在死亡边缘才这样互相扶持,还不如大家找到一条水路,开开心心地回到广阔的江河湖海,回到各自的天 地,彼此相忘,自由自在。

我们口口声声说的“江湖”就是这么来的,没想到吧?做下小广告哈,欢迎观看点评在下拙作:小说《书江湖》,不是什么特别牛B的书,主角比佐罗牛B一点而已,现正联系出版或许不日上市,先搜索来看一下也可以~~

恩,恩,回来,相濡以沫,多美的情景,虽然这并不是爱情最理想的状态。当年街道居委会的老大妈就算再没文化,这句话肯定是会说的,在我们的父辈那个婚姻靠 组织介绍的年代,这句话支撑了多少性格各异,却本没有多少感情基础的夫妻一直走到了今天,相濡以沫,多好的一个榜样啊,只是当年没曾想,只是当年不知道, 既然需要相濡以沫才能支撑,为什么却不干脆洒脱地放手,把自己,也把对方放开去找各自的幸福,去找各自的江湖呢?

相濡以沫,这句话的全部意思,又有多少人知道呢?

我有个大学的同学,是个陕西的女孩子,她在上学时找了个陕西的男朋友,她把自己的一切都给了他,当然包括了身体,可是那个懒惰的男朋友对她很不好,常打她 骂她象佣人一样地指使她,却又根本离不开她,我们惊奇的是,她竟然一直默默忍受了下来,一忍就是四年,我们忍不住问她,你们过得这么辛苦这么难受,为什么 还要在一起呢?她却这样回答:“嫁鸡随鸡,嫁狗随狗,虽然在一起不是很快乐,但这不就是相濡以沫吗?”

我无言,这能算是相濡以沫吗?为什么明明外边有更大的江湖,更宽广的天地,为什么明明知道知道自己有更好的未来,却要把双方都绑在一起,不开心地继续过下 去呢?我们都身处一个传统思维占据非常强势地位的社会,一句相濡以沫,不知道让多少爱情做了这种传统思维的牺牲品。其实想一想,如果自己都不开心,别人的 称赞又能怎么样?如果自己能找到属于自己的真正天地,别人的指责又能怎么样?唉,说大了,有点没边没际,父母也教育过我劝合不劝分的道理,这话题也到此为 止吧,劝合不劝分,相濡以沫啊,原来我也不能免俗。

只是叹息一声,我们都没曾想到,除了一句相濡以沫,原来后边,还可以相忘于江湖。

相濡以沫

原句:相濡以沫,不如相忘于江湖

歪曲程度:--

反面影响:--

7:天地不仁,以万物为刍狗

原句:天地不仁,以万物为刍狗,圣人不仁,以百姓为刍狗——————《道德经》

要说起这句话,大半的愤青都会告诉你,这话的意思是说:“天地残暴不仁,把万物都当成低贱的猪狗来看待,而那些高高在上的所谓圣人们也没两样,还不是把我 们老百姓也当成猪狗不如的东西!”标准的无政府主义宣言,标准的对社会不满。这句话在各种愤青的文章中,在当前下三流的网络YY小说里那是随处可见,主角 通常是弱小无助,饱受压迫和不公,于是有一天突然醒悟,大喊一声“天地不仁,以万物为刍狗!”立时或悟道飞升,或肉身成佛,或从一个人人可以欺负的小瘪三 变成一方霸主,等等等等,不一而足……

基本上,这些孩子的思维都可以总结为一种抑郁太久的被压迫感大爆发,就好象连老天都欠了他们个十万八万似的。可是呢?另一方面这帮无政府主义的家伙又没胆 子喊出什么“王侯将相宁有种乎”之类更牛B的话,更不敢扯出个大旗子大叫“苍天已死黄天当立!”最后,只好喊一喊这句“天地不仁,以万物为刍狗”,以表达 一种受到不公平待遇的憋屈。说实话,其实我挺同情这些人的,无政府主义没什么了不起,一个人在学生时代没有经历过无政府主义的阶段,基本上可以被认为没有 青春,我也经历过那种思想特别冲动觉得这世界上谁都跟自己过不去的时代,不同的是现在我知道了怨天尤人一点用都没有,社会是不公平,社会就是这么吊不公 平,如果你觉得社会不公平,你只有自己努力去改变这一切。

但就算我非常理解他们的青春年少,我还是有必要得跟这些后辈们说一句,你们这句话,其实恰好用错了。

天地不仁,以万物为刍狗,这根本不是你们从字面上理解的,说天地残暴不仁,把世间万物都看成猪狗,圣人不仁,以百姓为猪狗,也根本不是你们想的那样说所谓 高高在上的统治者们,把百姓看得低微卑贱。其实这句话的真正意思是说,天地不情感用事,对万物一视同仁,圣人不情感用事,对百姓一视同仁。你们推崇的这句 话,它的原意中根本没有你们所需要的压迫与歧视,却恰恰相反,它说的是一个公平的道理,我们所有的人,所有的众生在天地的眼中,都是平等的,为什么现在你 啃着干面包,别人却吃着海鲜大餐?孩子,在大叫不公平之前,为什么你不想想你是否和他流过一样的汗水?如果想不通,也行,那就别想了,为什么你不尝试通过 自己的努力,来稍微扭转一下这样的“不公”?只是大叫着不公平大叫着没天理大叫着等着天上掉个馅饼下来补偿你的委屈你的遗憾你正损失着的一去不复返的青春 年华,有用吗?

天地不仁,以万物为刍狗。

这一篇是写给那些迷茫孩子的,如果你理解错了这句话,你会陷入自己的监狱,不能自拔。如果你知道这句话的真正意思,我恭喜你,孩子,这时你才真正长大。

星期四, 十一月 01, 2007

squid filedescriptors 问题处理

最近,squid系统中的一台机器的硬盘坏了一块,所以对将squid系统切到了被分际上运行,刚开始很好,不久之后备份机的所有网络端口决绝响应!
现象描述如下,网络通,可ping到备份机,服务端口通过Telnet可以脸上,但是不响应任何输入!在运行日志中发现了如下信息!
WARNING! Your cache is running out of filedescriptors

由于主机与备份机软件系统相同,硬件配置基本相同,所以并未对这个WARNING多做关注,重新启动备份机后继续运行,不久之后又出现了上面的日志!

Google之后,初步判断这个状态与系统的工作不正常是有关联的,文件描述符被用尽了,所以不能在打开文件了(Socket与fd)是俩回事,所以可能Socket连上,但是无法响应!

处理这个问题的办法也很简单,在保证程序正确的情况下,可以通过增大系统支持的文件描述符个数来解决!

1修改系统的最大的file descriptors数

# ulimit -SHn 2048
# vi /usr/include/bits/types.h
将#define __FD_SETSIZE 1024改成#define __FD_SETSIZE 2048
然后重新编译你的squid
然后把ulimit -SHn 2048这行放到你的squid的启动脚本的最前面

vi /usr/include/bits/type.h (to change __FD_SETSIZE)

编译完后记得把types.h里的2048改回去

星期六, 十月 27, 2007

[Django]Windows下Django配置Apache示范设置

[Django]Windows下Django配置Apache示范设置
Version
Date
Creator
Description
1.0.0.1
2006-11-20
郑昀
草稿

继续阅读之前,我们假设您熟悉以下知识:
n Python
n Django
n Apache
如果不熟悉这些知识点,可以看本文最后资源列表中的文章。
本文讨论了在Windows环境下,将Django配置到Apache Web Server时所遇到的问题,以及最终解决的示范步骤。

您可以遵循后文描述的配置步骤,在此之前,我们先描述两个常见的错误现象。
[常见错误现象1]
关键词: client denied by server configuration。
表象: 访问了http://localhost/mysite/ 后,假如发现图片没有加载,或者css没有应用上,并且httpd.conf文件中Location的配置绝对路径肯定没错。

解释:
第一, 首先检查httpd.conf配置Alias的配置,
看看Alias设置的路径是否正确,
Alias /site_media c:/django/myproject/media
请保证您附加的这个路径肯定是你的图片或者css存放的路径。
其次,请检查您的django项目myproject目录下的settings.py,保证MEDIA_ROOT、STATIC_PATH、TEMPLATE_DIRS这三个参数指向的绝对路径正确无误。
最后,如果上面的参数都没错,却还是不行。那么请您检查Apache的日志文件
Apache2.2\logs\error.log
如果您发现有这样的错误提示:
错误日志
[Mon Nov 20 17:27:08 2006] [notice] Child 4172: Starting thread to listen on port 80.
[Mon Nov 20 17:27:08 2006] [error] [client 127.0.0.1] client denied by server configuration: c:/Django/myproject/media/css/global.css, referer: http://localhost:80/mysite/
那么说明是因为对这些资源文件的访问被拒绝了。
此时,请您浏览 http://localhost/site_media/css/global.css ,如果遇到了HTTP 403错误,就说明是权限问题。
此时,请到httpd.conf,增加如下配置来允许静态资源文件夹被访问:
增加的配置行
# 对需要访问的区域,可以增加正确的Directory块
# 否则会得到这样的错误:client denied by server configuration: c:/Django/myproject/media/css/global.css, referer: http:/ /localhost:80/mysite/

Order Deny,Allow
Allow from all

重启Apache服务。

[常见错误现象2]
关键词: EnvironmentError: Could not import settings。
表象: 访问了http://localhost/mysite/ 后,直接页面报告如下错误:
页面错误输出
1. Mod_python error: “PythonHandler django.core.handlers.modpython”
Traceback (most recent call last):
File “C:\Python24\Lib\site-packages\mod_python\apache.py”, line 299, in HandlerDispatchresult = object(req)
File “c:\django_src\django\core\handlers\modpython.py”, line 163, in handlerreturn ModPythonHandler()(req)
File “c:\django_src\django\core\handlers\modpython.py”, line 125, in __call__if settings.ENABLE_PSYCO:
File “c:\django_src\django\conf\__init__.py”, line 27, in __getattr__self._import_settings()
File “c:\django_src\django\conf\__init__.py”, line 54, in _import_settingsself._target = Settings(settings_module)
File “c:\django_src\django\conf\__init__.py”, line 82, in __init__raise EnvironmentError, “Could not import settings ‘%s’ (Is it on sys.path? Does it have syntax errors?): %s” % (self.SETTINGS_MODULE, e)
EnvironmentError: Could not import settings ‘myproject.settings’ (Is it on sys.path? Does it have syntax errors?): No module named myproject.settings

这是开始配置django+apache最容易遇到的问题,:D。

解释:
这是因为apache在系统目录下找不到myproject/settings.py文件。
首先检查PythonPath设置的路径是否正确:
PythonPath "sys.path+['c:/django']"
注意,这个'c:/django'路径实际是我们的项目路径c:/django/myproject的上一级目录!不要写错了。
增加的配置行
# mysite目录路径: c:/django/myproject,
# 但是对于PythonPath,必须设置成这个目录的上一级目录!
# this site url:http://localhost:80/mysite/

SetHandler python-program
PythonPath "sys.path+['c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On


配置Django到Apache的步骤:
如何在Windows环境下安装Apache和mod_Python, 这篇Blog解释得很明白,我下面的这些步骤得到了验证。1:从 http://httpd.apache.org/来获取apache_2.2.3-win32-x86-no_ssl.msi这个安装文件;运行这个msi即可顺利安装Apache。
2:
网络上有很多说可以利用Apache和mod_python源代码来编译安装mod_python的,但是如果你仅仅想快速安装,那么请从
http://www.apache.org/dist/httpd/modpython/win/3.2.10/
直接下载
mod_python-3.2.10.win32-py2.4-apache2.2.exe
文件,运行这个exe即可顺利把mod_python安装到Python2.4以及Apache2.2;
由于GFW的封锁,可能您无法访问apache网站,那么可以从这里下载:
http://www.cnblogs.com/Files/zhengyun_ustc/mod_python-3.2.10.win32-py2.4-apache2.2.rar
3:
我们用
Python django-admin.py startproject myproject
命令,在C盘的django目录下创建了一个Django项目myproject。我们把它引用的图片文件和css文件等静态资源都放在myproject文件夹下的media目录中。
此时,将myproject目录下的settings.py文件中的这三个参数修改一下,主要是为了从相对路径变成绝对路径:
修改的配置行
# Django settings for myproject project.
'''
将相对路径改为绝对路径。主要有:
MEDIA_ROOT
TEMPLATE_DIRS
STATIC_PATH
'''
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = 'c:/django/myproject'
STATIC_PATH = 'c:/django/myproject/media'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates".
# Always use forward slashes, even on Windows.
'c:/django/myproject/templates',
)
切记切记,一定要保证这三个参数是绝对路径。
4:
配置Apache的httpd.conf配置文件:
首先,在“Dynamic Shared Object (DSO) Support”的配置下增加一行
LoadModule python_module modules/mod_python.so
这个必须手动添加。
5:
我们列出此时Apache所需要的参数分别为:
项目名:myporject
试图访问的URL为:http://localhost/mysite/
静态资源文件的存放目录:c:/django/myproject/media
项目文件夹路径:c:/django/myproject
好了,此时你就应该在httpd.conf文件的最后附加这段配置,以便让Apache知道到哪里去定位myproject/settings.py文件:
增加的配置行
# mysite目录路径: c:/django/myproject,
# 但是对于PythonPath,必须设置成这个目录的上一级目录!
# this site url:http://localhost:80/mysite/

SetHandler python-program
PythonPath "sys.path+['c:/django']"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonInterpreter mysite
PythonDebug On

对于上面的配置,Limodou注释道:“上面 PythonPath 主要是将 myproject的目录加入到 sys.path ,以便 Django 可以找到。需要使用绝对路径。
SetEvn 中设置的 DJANGO_SETTINGS_MODULE 就对应于你的 项目名.配置文件。因此为了能导入 项目名.配置文件,就需要前面的 PythonPath 的设置。
PythonDebug 和 PythonAutoReload 建议在生产时设为 Off 。”
为了让图片、css、script能够被Apache成功加载,还需要在httpd.conf最后附加这段配置:
增加的配置行
#Alias /site_media 是用来将 myproject的静态文件设置一个 URL 访问的别名。
Alias /site_media c:/django/myproject/media

SetHandler None


#Alias /media 是将 Django Admin 的静态文件设置一个 URL 的访问别名。
Alias /media c:/Django-0.95/django/contrib/admin/media

SetHandler None


# file types we want to serve statically
# case insensative match

SetHandler None


Limodou在Step by step中特地说“同时可以注意到 settings 我改为了 settings_apache 了。一方面将要把其中的内容有关相对路径的东西改为绝对路径,另一方面我还想保持现在的 settings.py 。”这也是一个很好的做法。
最后,修改MaxRequestsPerChild为1,这是一个可选项。Limodou是这么说的“同时如果你不想每次重启Apache 来进行测试,可以将: MaxRequestsPerChild 0. 改为: MaxRequestsPerChild 1

重启Apache服务。
6:
浏览 http://localhost/mysite/ 即可。

[参考资料]
1:《How to use Django with mod_python》Django官方文档
2:《HOWTO: Django on Windows》这篇blog给了我很大的帮助
3:《Django Step by Step (十二)》limodou的帮助文档4:《如何安装 Django

星期二, 十月 23, 2007

情爱的,你终于回来了,等你等得好辛苦!

情爱的,你终于回来了,等你等得好辛苦!
可你的兄弟 page 什么时候回来啊!