局部变量与全局变量_Local variable and Global variable

有几个问题:

1.局部变量和全局变量存在于内存的哪个区域?

2.局部变量和全局变量在什么时候被初始化?

3.局部变量真的比全局变量更加好用吗?

4.java与javascript上局部变量与全局变量有什么区别?

下面是个人的研究结果…

1.局部变量和全局变量存在于内存的哪个区域?

java全局变量和静态变量存储在堆里的静态存储区里;而局部变量存在于栈里。JavaScript没有资料特别提到,而其似乎也类似java:

局部变量: 栈区

局部静态变量:静态区

全局变量: 静态区的常量区

全局静态变量:静态区

注:java内存分为:stack segment 、heap segment、code segment 、data segment(静态区)

code segment即方法区:

方法区存放装载的类数据信息包括:

(1):基本信息:

1)每个类的全限定名

2)每个类的直接超类的全限定名(可约束类型转换)

3)该类是类还是接口

4)该类型的访问修饰符

5)直接超接口的全限定名的有序列表

(2):每个已装载类的详细信息

Java 栈内存以帧的形式存放本地方法的调用状态(包括方法调用的参数,局部变量,中间结果等)。每调用一个方法就将对应该方法的方法帧压入Java 栈,成为当前方法帧。当调用结束(返回)时,就弹出该帧。

全局变量和静态变量的区别:

全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变 量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

而javascript和java有许多类似的地方,原始类型的引用被存放在栈中,如Undefined ,Null ,Bollean ,String,而对其他对象等的引用则存放到堆内存中。

而其中有个很大的区别就是java和js在同名变量的使用上存在区别:

js:

var a = 100;

function testResult(){

var b = 2 * a;//函数范围内不会自动查找全局变量

var a = 200;

var c = a / 2;//调用新声明的局部变量a

alert(b);//结果为NaN

alert(c);//结果为100

}

java:

int a = 100;

public int testResult() {

int b = 2 * a;//使用全局变量a

System.out.println(b);//结果为200

int a = 200;

int c = a / 2;//使用已经声明的

System.out.println(c);//结果为100

return c;

}

2.局部变量和全局变量在什么时候被初始化?

java中静态变量在类加载之前进行初始化,而类属性变量(类中的全局变量),在类实例被创建进行初始化,而方法中的局部变量则在此时进行初始化,不同的是必须明确进行赋值,jvm不会对其进行默认赋值。

js在html页面被加载的同时被加载,其执行环境被创建,环境中的全局变量被初始化,若没有进行赋值则给其设置默认值undefined,局部函数里面同样进行这种处理。不同的是:java会要求局部变量设置初始值,而js则无此要求。

3.局部变量真的比全局变量更加好用吗?

几乎所有的文章都在说一句话,局部变量访问速度比全局变量快?具体原因很少有人问及。我来举个例子细说一下:

var a = 3;

function test(){

var b = a;

alert(b); //结果为undefined

var a = 5;

alert(a);//结果为5

}

细想一下b根本无法被访问,何来访问速度快慢之说?再看:

var a = 3;

function test2(){

var b = 5;

var c = a+1;

var d = b+1;

alert(c);//结果为4

alert(d);//结果为6

}

此时d的运算速度快于c,这也许是访问快慢的关键所在。

**

4.java与javascript上局部变量与全局变量有什么区别?**

在java中全局变量有整个环境范围内与类范围内的区别,整个环境范围的变量用静态变量来实现。而js中全局变量则是该页面window对象下的环境变量,无法跨页面共享。

局部变量则类似,唯一区别是java强制要求赋值,而js不要求。

java中的数据和对象的存储机制的一点理解

《think in java》讲到我们的java中创建的数据和对象存放的位置,具体如下:

(1) 寄存器。 即cpu内部,无法控制。CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。

(2) 堆栈。(RAM)这个应该类似与数据结构的栈,可以实现快速存取,这里存放对象实例的句柄,以及基本类型的变量(,int, short, long, byte, float, double, boolean, char),且栈数据可以共享。

(3) 堆。(RAM)运行时数据区,动态分配内存空间,用于存放new 创建的java对象实例。

(4) 静态存储。这儿的“静态”(Static)静态变量必定存放在此区域,且在程序运行结束,由java自动回收(其在类加载时进行初始化,且所有对象实例进 行共享使用)。另一个是全局变量,C/C++中似乎它们在同一个内存区域,但java中全局变量似乎在堆栈中,具体待求证?

(5) 常数存储。常数值通常直接置于程序代码内部。(ROM)。程序结束后由系统释放 ?

(6) 非RAM存储。书中讲到的“流式对象”和“固定对象”。前者是服务器之间数据传递,后者属于将数据对象存储到硬盘中。
示例:
public class Test {

//–栈–栈
//这里的3在栈里面被共享
int a = 3;

//–栈–栈
int b = 3;

//——栈——栈
String hello = “hello”;

//—-栈–堆
Pager p = new Pager();

//堆(静态存储空间?)
static int c;

//ROM
static final int NUMBER = 0;
}

java中的句柄与对象_Handler and object in java

java中的句柄和c++中的句柄在作用上我认为完全相同:引用对象的唯一标识,或者说是一个标识符,是拿来标识对象或者项目的。而在c++当中似乎讲到 句柄是一种指向指针的指针。而java中已经没有”指针”这个概念?

java中,人们更倾向与将句柄认为是一个对对象的”引用”,当然更可以把它类比”指针”,事实上《think in java》里面就是这么讲的,深入理解起来的话,这样讲也没有问题,但深入理解起来的话就有点让人模糊了。什么是引用?怎么实现的?

这里我借用c++里面的思维很容易进行理解:

句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象

实际中的代码也可以看出这一点:

Pager a = new Pager();
Pager b;
System.out.println(new Pager());
System.out.println(a);

结果:
com.webmachine.model.Pager@5224ee
com.webmachine.model.Pager@f6a746
可以看出这两行打印出了对象的地址,不同的是一个使用的是对象句柄。 所以这句代码确切的解释应该是:
Pager a//创建句柄
Pager a = //句柄引用
new Pager();//创建对象实例
Pager a = new Pager();//句柄引用对象实例

由此我认为《think in java》中讲到句柄操控对象(C++中我不能确定),这个说法非常不确切。应该强调的是 句柄操控对象实例,简而言之:对象被创建,实例被引用。

java中的上下文与javascript中的上下文分析_Context in java And javascript

context一词在计算机术语中被意为上下文,但我觉得要理解它还不如用其本来的意义:背景, 环境, (事情发生的)背景。因为就上下文这个词很难将事实准确的描述,下面是我对其在java和javascript中的一点分析。

在java中Context是一个接口,他表示一个命名环境,并由一组名字到对象的绑定组成,它包含方法检查并更新这些绑定。原文如下:
This interface represents a naming context, which consists of a set of name-to-object bindings. It contains methods for examining and updating these bindings.
原文链接:http://download.oracle.com/javase/1.4.2/docs/api/javax/naming/Context.html
或则说用其来构造一个应用运行的环境,有了环境,程序才能在环境中运作。

而servlet中的context则是另一个说法:

ServletContext接口定义了一个Servlet环境对象,这个对象定义了一个在Servlet引擎上的Servlet的视图(奇怪的说法?)。 通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个 Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果Servlet引擎支持虚拟主机,每个虚拟主机有一个Servlet环境。一个Servlet环境不能在虚拟主机之间共享。 Servlet引擎能够允许一个Servlet环境有它自己的活动范围。 例如,一个Servlet环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getContext方法的调用会返回 /bank的Servlet环境。

javascript 中的上下文,则说法更让我迷惑。

1.javascript这种脚本语言执行的时候都有一个全局上下文对象,而浏览器里面javascript的全局上下文就是window,所有没有指定目标的定义都会定义在window的属性上。
2.上下文对象指的就是this对象。它是一个只能读取而不能直接赋值的对象(就是你只能对this拥有的属性和方法赋值)。
由第一条分析,上下文则是环境,js得以运行的环境。而第二条则更像是一个属性?还是一个局部(div等)的环境?

ECMA文档里面有个Execution Contexts,我觉得它更确切的说是执行环境:
当控制转交到ECMAScript执行代码,控制进入到一个执行环境(上下文)。活动(生效)的执行环境逻辑上来自一个栈.顶端的执行环境在这个逻辑栈是 运行中的执行环境,一个新的执行环境被创建当控制从可执行代码中转移。其与临时运行的执行环境关联到的可执行代码将不和这个执行上下文关联.新的执行上下 文将被推入到栈并称为运行中的执行上下文。原文:
When control is transferred to ECMAScript executable code, control is entering an execution context. Active execution contexts logically form a stack. The top execution context on this logical stack is the running execution context. A new execution context is created whenever control is transferred from the executable code associated with the currently running execution context to executable code that is not associated with that execution context. The newly created execution context is pushed onto the stack and becomes the running execution context.

所以:java中的context更多指的是应用运行环境,而javascript中则表示脚本执行的一个环境?

Id与class的渲染效率对比_which one is more efficient id or class

国外有篇文章叫《Efficiently Rendering CSS》里面讲到ID选择器是最有效率的,我不这样认为,某些方面,id与class在渲染效率上不相上下,所以没有到必须的时候,个人建议使用class作为选择器,具体可以看下面的效率测试。

首先讲几个前提:
--------------------------------------------
css渲染分三种情况
1.首次加载渲染
2.css和html调用缓存渲染
3.html文件调用缓存渲染

渲染的顺序
ff,chrome,safari,opera 最新版本的浏览器是在加载的同时进行css样式的渲染和展现(或者说是同步进行)。
而ie 8 是在文档加载完成后展现,而在渲染过程中是无法见到网页展现的

渲染效率与什么有关?
1.css选择器的查询定位效率
2.浏览器的渲染模式和算法
3.要进行渲染内容的大小

测试:

--------------------------------------------
OS :win xp
硬件:内存 4G,CPU 酷睿4核
web容器:tomcat 6.0

浏览器 :ff 3.6

说明:
1.为使得结果更加客观真实,html文档包含各种标签元素
2.样式用在了class元素上和id的元素上
3.id选择器和class选择器的渲染测试,每一项测试30次,取均值

html文件
html files.rar (9.25 KB)

结果对比:

序号

选择器

首次载入(s)

刷新页面(s)

修改属性值后刷新(s)

选择器

首次载入(s)

刷新页面(s)

修改属性值后刷新 (s)

1.

.box

4.55

4.38

4.77

#wrap

4.55

5.02

4.48

2.

4.54

4.4

4.74

4.49

4.34

4.55

30.

4.52

4.32

4.53

4.56

4.35

4.5

均值

4.627

4.503

4.839

4.534

4.403

4.441



结论:
--------------------------------------------
就整个文档的首次载入和刷新的渲染效率来看,id比class快0.1s左右,可以说不相上下。
在修改css属性值后刷新,id的速度比class快0.4s作用
若:
修改background-color值后刷新用时-刷新页面用时 = 这个属性的渲染用时
则:
class选择器属性渲染用时为 4.839s-4.503s = 0.436s
id选择器属性渲染用时为 4.441s-4.403s = 0.038s
即:
id选择器属性渲染 比 class 选择器属性渲染 快约 0.4s
所以:id选择器的效率和class选择器相比是很微小的,可以认为两者不相上下

CSS 面向对象结构设计_CSS Object Oriented Structure Design

看过国外和国内的一些面向对象的css文章,他们借用js或php实现了继承,重用。这样做到底对我们工作的简化,效率的提高有多少好处我不得而知。

而我现在做的是用现有的css实现面向对象的结构,并且借鉴J2EE 的mvc架构实现css的高度复用,快速开发和简便维护,以下是面向对象结构的简要介绍和代码实现。

简介

在日常的开发中总有重复的代码要写,熟悉了自然就快了,当然工作质量肯定能保证,但每天写这些重复的代码多少有点无味。css可以面向对象吗?不可以。所以很多人用javascript来辅助实现,能不使用js来实现吗,我想试一试。之所以不能达到大规模的重用,我认为是css的class粒度不够细,就像下面这行代码,我敢保证一个页面最多只能用一次:
#banner #nav li a{ height:92px; width:142px; text-align:center; display:block; background:url(../images/link_common_bg.png) repeat-x 0 top; text-decoration:none; color:#666;
font:bold 1.5em/100px arial,verdana; color:#666; }

而里面的许多属性,我敢保证你使用了千万次:
text-align:center; display:block;text-decoration:none;font-weight: normal;
为什么不把使用了千万次的单个属性单独写成一个类,以便重复调用?换句话说,就是让这些单一的属性成为一个个的小”积木块”,需要的时候拿来自由组合。例如font属性font-family富于多变,而font-weight的属性值永远只有那几种。甚至是font-size属性,也有一个常用值:font-size:12px;这些常用值都可以被写成一个单独对象。
并且我在页面也加入了page通用的对象如banner,sidebar等等,加入它们是因为可以利用css同名类属性合并的特性,这样这真正的项目代码中页面对象里面的样式属性可以顺利被继承或重写(这一点和java的面向对象很类似)。
在页面中标签的class类个数会较多,但刚好页面可以使用一个java的自定义标签来将每个细粒度的类进行配置,这刚好实现了页面的简便维护和低耦合。

css面向对象的结构

[caption id=”” align=”alignnone” width=”600”]css 面向对象结构设计图 css 面向对象结构设计图[/caption]

对java mvc结构的引用

[caption id=”” align=”alignnone” width=”600”]mvc结构的应用 mvc结构的应用[/caption]

1. 现有框架解决了什么问题,缺点是什么?

样式重设,IE bug处理,缺点是没有进行对象结构扩展,实现最大程度的复用。

2. 我所面临的问题?

不断重复类似功能的代码,并且面向结构,复用度太低,应该在功能上进行完全的分离。

3. 我要实现的目标?

90%以上css代码的重用,面向对象结构,加入细粒度对象和布局对象,加入CSS交互控制模块和css插件模块。

4. 框架的优点?

多浏览器兼容,遵循web标准,代码量少,结构清晰,快速开发,高度复用,维护简便,易于理解使用。

5. 框架带来的问题?

Html页面过多的class元素,因为放弃多级选择器,导致原本不使用class的元素使用class。

6. 框架如何实现高度复用和简便维护?

  1. 加入大量的原子对象,以进行自由的重用。
  2. 增加页面常用对象,以便在项目代码中进行重写。
  3. 使用java taglib来维护class数量过多的页面标签,方便后期扩展和维护(并且taglib很好的解决了Html页面过多的class元素的问题)。
  4. 在元素的命名等方面进行约束,避免后期维护困难。

命名规则的约束:

ID用来作js控制
.c_title 下划线表示js控制的css元素
.css3_round css3和下划线一起表示css3对象
.image-1 中杠表示jquery插件的控制对象

如何实现:

首先需要一套css reset代码,yahoo css reset和blueprint都是不错的选择。

然后新建一个css文件,在其中将通用css对象进行创建
例如:rain.css

/**

Atomic Css Objects

/
/
font
free properties 用于表现的css属性,富于变化,不作设定
–font-family
–font-size
–font
*/
.fontNormal{ font-style:normal;}
.fontItalic{ font-style:italic;}
.fontOblique{ font-style:oblique;}

/**

Page Layout Css Objects

/
/
– container object use –*/
.container{ width:1000px;}

/– banner.css – banner object and sub-objects 这些页面布局常用class可以被定义,易于重写–/
.banner{ margin-bottom:10px; background:#F2F2F2;}
.logo{ width:200px; padding:20px 0 0; margin:0;}

/– ———-project code 用于实际项目代码对page object对象进行重写———- –/
input.text, input.title {width:400px;}
.text_shadow{ text-shadow: 1px 1px 3px rgba(50, 50, 50, 0.3);}
body{ background:url(../images/top_bg.png) repeat-x 0 0;}

再者就是页面的应用了,例如home.html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=”http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<!– Framework CSS –>
<link rel=”stylesheet” href=”css/blueprint/screen.css” type=”text/css” media=”screen, projection”/>
<!–[if lte IE 8]><link rel=”stylesheet” href=”css/blueprint/ie.css” type=”text/css” media=”screen, projection”><![endif]–>
<link rel=”stylesheet” href=”css/rain.css” type=”text/css” media=”screen, projection”/>

</head>
<body>
<div class=”container”>
<div class=”banner”>
<h1 class=”logo displayBlock overflowHide”>…</h1>
</div>
</div>
</body>
</html>

很明显可以看出class类的引用会随着样式的复杂化而越来越多,在web交流会上的朋友提出了一个问题:怎样保证样式的变更而页面不需要修改?

这正是使用java taglib来维护class数量过多的页面标签的原因。在java web项目中,可以将csstl.jar拷贝到lib文件夹下,在src文件夹下新建css.properties文件,所以最后home.jsp页面会是这样:

<%@ page contentType=”text/html; charset=utf-8” language=”java” errorPage=””%>
<%@ taglib uri=”csstags” prefix=”s”%>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=”http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<!– Framework CSS –>
<link rel=”stylesheet” href=”css/blueprint/screen.css” type=”text/css” media=”screen, projection”/>
<!–[if lte IE 8]><link rel=”stylesheet” href=”css/blueprint/ie.css” type=”text/css” media=”screen, projection”><![endif]–>
<link rel=”stylesheet” href=”css/rain.css” type=”text/css” media=”screen, projection”/>
</head>
<body>
<div>
<div>
<h1color: rgb(128, 0, 0);”><s:cssunit cssunit=”logo”/>”>…</h1>
</div>
</div>
</body>
</html>

而css.properties文件中则写入要加载的css类:
logo = logo displayBlock overflowHide

CSS面向对象结构的实现:
www.webdevelopmentmachine.com/resources.html#cssframework

火狐firefox 3.x下margin-top无效的解决方法_How to solve margin-top not work bug in firefox 3

经常会出现的一个ff bug,方法也有很多
这个一行代码解决:
display:inline-block;
缺点:
老版本浏览器不支持,不过也无所谓,主要是ff的bug,ff支持就可以了
Unsupported value: ‘inline-block’
Affects: Firefox 1.5; Internet Explorer 6.0, 7.0; Internet Explorer for Macintosh 5.2; Opera 8.0, 9.0; Safari 2.0

seam2问题汇总

EntityMaganer 注入失效
http://www.javaeye.com/topic/88345

2.jboss链接数的问题
INFO [CachedConnectionManager] Closing a connection for you. Please close them yourself: org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@1c0f6d9
java.lang.Throwable: STACKTRACE
http://xumiao.javaeye.com/blog/488000

http://forums.sun.com/thread.jspa?threadID=737400

http://issues.liferay.com/browse/LPS-405

3.
14:39:32,448 ERROR [SchemaUpdate] could not complete schema update
java.sql.SQLException: You cannot set autocommit during a managed transaction!

<property name=”hibernate.hbm2ddl.auto” value=”update” />作怪
如果没有此方面的需求建议set value=”none”.

其它几个参数的意思:

validate 加载hibernate时,验证创建数据库表结构

create 每次加载hibernate,重新创建数据库表结构
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构

4.Caused by: javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57fe0b:b20:4c08b00e:64 status: ActionStatus.ABORT_ONLY >

部分代码有异常未被捕获,导致程序出错
It turned out that this is not a hibernate or jboss exception at all. The actual cause of this was a NullPointerException somewhere in the flow of the application. This caused the transaction to end and re-enter a loop when the transaction was not active and this was thrown. So if you ever get this exception I suggest you put some break points in your code and see where it fails. It’s likely that there is an unchecked exception thrown somewhere in your programme.

5.Unable to query database - QuerySyntaxException: (object) is not mapped
used the fully qualified name/使用完整的类名:com.XX.entity.类

6.javax.ejb.EJBException: java.lang.IllegalArgumentException: Unknown entity
在persistence.xml 文件加入类全路径<class>org.domain.ctiproxy.entity.ContactosUteis</class>
http://seamframework.org/Community/JavalangIllegalArgumentExceptionUnknownEntity

7.javax.persistence.TransactionRequiredException: no transaction is in progress

5月29日web交流会的收获及我的经验分享

先说收获:
1.龙钢同学讲到的,设计稿版本控制的一个好的方法
designer在新稿出来后用邮件抄送到个人开发人员的邮箱,保证psd文件是最新版本。

2.导航栏的hover效果处理
关于ie6在其他元素不支持hover事件的问题,有人建议用js处理这个功能,但Along建议只针对ie6写js,使用<!–[if IE 6]>…<![endif]–> 进行注释,我比较赞同,毕竟以后维护起来很方便。

3.Niel对outline属性的讲解
这个是轮廓的样式我很少用到,但很不错,以后可以用到开发中
w3school里面的介绍
http://www.w3school.com.cn/css/pr_outline-style.asp

我的ppt里面的一点补充
结构的分离

CSS文件与页面分离

通用JavaScript脚本和JavaScript框架与页面分离
一个页面有三种脚本文件,通用脚本,js框架文件,操作部分动态代码的脚本。
前两种文件与页面分离

后端标签语言只作数据展现使用

框架的集成
CSS使用blueprint 等框架
http://www.blueprintcss.org/
各人的喜好不同,css框架也可以自己去写,但在一个框架之上进行修整和扩展也是一个不错的选择,并且时间久了,个人的css库也就成形了,自然开发就会高效很多。

JavaScript 使用Jquery 及其扩展框架

后端标签语言使用jstl,JSF等
在java里面最多的是用jstl和el表达式,自己正在使用jsf。

如何分割与合并
CSS根据作用区域和功能模块进行注释

JS代码按照功能模块注释

与动态部分交互js脚本写在页面末端

样例:
<%@ page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8”%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=”http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link type=”image/x-icon” rel=”shortcut icon” href=”images/favicon.ico” />
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8” />&#160;

<!– Framework CSS –>
<link type=”text/css” rel=”stylesheet” href=”css/blueprint/screen.css” media=”screen, projection” />
<link type=”text/css” rel=”stylesheet” href=”css/blueprint/print.css”&#160; media=”print” />
<link type=”text/css” rel=”stylesheet” href=”css/common.css” />

<!–[if lte IE 8]><link rel=”stylesheet” href=”css/blueprint/ie.css” type=”text/css” media=”screen, projection”/><![endif]–>
<!–[if IE 6]>
<script type=”text/javascript” src=”js/DD_belatedPNG_0.0.8a-min.js”></script>
<script type=”text/javascript”>
/ string argument can be any CSS selector and img elements/
DD_belatedPNG.fix(‘#playnow,#gamelist,.browse’);&#160;
</script>
<![endif]–>
</head>

<body>
<div id=”container”>
结构代码。。。
</div>

<script type=”text/javascript” src=”js/jquery-1.4.2.min.js”></script>
<script type=”text/javascript” src=”js/jquery.tools.min.js”></script>
<script type=”text/javascript” src=”js/common-slide.js”></script>
<script type=”text/javascript”>
$(function() {
操作后台数据的js代码。。。
});
</script>
</body>
</html>

严格的标准

用最简单(合适)的代码兼容最多的浏览器
小志同学认为简单应改为合适,我100%同意,并且css代码应当简单且合适,不是么。

对Html和css进行严格验证(html validator,css validator)

先标准再IE

与后端的集成

与功能的妥协

与框架的妥协

尽量高的效率

例如:本来合并在一起的图片被分成若干张,本来一次请求变成多次请求,后端标签语言在页面运行后html和css验证无法通过等等,万事难做到完美,但尽量做到最好吧。^_^

JAVA中获取相对路径、绝对路径总结_转载

我在csdn上的提问:http://topic.csdn.net/u/20100427/16/b5fc390a-016f-4703-9b22-5e49666265a7.html
1.基本概念的理解

绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也 代表了一个
URL绝对路径。

相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
Servlet 中,”/“代表Web应用的跟目录。和物理路径的相对表示。例如:”./“ 代表当前目录,
“../“代表上级目录。这种类似的表示,也是属于相 对路径。

另外关于URI,URL,URN等内容,请参考RFC相关文档标准。

RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
(http://www.ietf.org/rfc/rfc2396.txt)

2.关于JSP/Servlet中的相对路径和绝对路径。

2.1服务器端的地址

服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
(不同于html和javascript中的相对 地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

其用到的地方有:
forward:servlet中的 request.getRequestDispatcher(address);这个address是
在服务器端解析的,所以,你要 forward到a.jsp应该这么写:
request.getRequestDispatcher(“/user/a.jsp”)这个/相对于 当前的web应用webapp,
其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。
sendRedirect:在jsp中<%response.sendRedirect(“/rtccp/user /a.jsp”);%>

2.22、客户端的地址

所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/) 的,
而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
Html中的form表单的 action属性的地址应该是相对于服务器根目录(http://192.168.0.1/) 的,
所以,如果提交到a.jsp为:action=”/webapp/user/a.jsp”或action=”& lt;%=request.getContextPath()%>”/user/a.jsp;
提交到servlet为 actiom=”/webapp/handleservlet”
Javascript也是在客户端解析的,所以其相对路径和form表 单一样。

因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%& gt;,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽量避免使用类似”.”,”./“,”../../“等类似的相对该文件位置的 相对路径,这样
当文件移动时,很容易出问题。

3. JSP/Servlet中获得当前应用的相对路径和绝对路径
3.1 JSP中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI()
文 件的绝对路径  :application.getRealPath(request.getRequestURI());
当前web应 用的绝对路径 :application.getRealPath(“/“);
取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

3.2 Servlet中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路 径:request.getServletPath();
文件的绝对路径 :request.getSession().getServletContext().getRealPath
(request.getRequestURI())
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath(“/“);
(ServletContext对象获得几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)

4.java 的Class中获得相对路径,绝对路径的方法
4.1 单独的Java类中获得绝对路径
根据java.io.File的Doc文挡,可知:
默认情况下new File(“/“)代表的目录为:System.getProperty(“user.dir”)。
一下程序获得执行类的当前路径
package org.cheng.file;
import java.io.File;

public class FileTest {
public static void main(String[] args) throws Exception {

System.out.println(Thread.currentThread().getContextClassLoader().getResource(“”));

System.out.println(FileTest.class.getClassLoader().getResource(“”));

System.out.println(ClassLoader.getSystemResource(“”));
System.out.println(FileTest.class.getResource(“”));
System.out.println(FileTest.class.getResource(“/“)); //Class文件所在路径
System.out.println(new File(“/“).getAbsolutePath());
System.out.println(System.getProperty(“user.dir”));
}
}

4.2服务器中的Java类获得当前路径(来自网络)
(1).Weblogic

WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:\bea \weblogic700…..
那么,你的文件根路径就是c:.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使 用绝对路径:
比如将你的参数文件放在c:\yourconfig\yourconf.properties,
直接使用 new FileInputStream(“yourconfig/yourconf.properties”);
b.使用相对路径:
相对路径的 根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

在yourwebapp\yourconfig\yourconf.properties,
这样使用:
new FileInputStream(“./yourconfig/yourconf.properties”);
这两种方式均可,自己选择。

(2).Tomcat

在类中输出System.getProperty(“user.dir”);显示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File(“a.htm”);
这个a.htm在resin的安装目录下

(4).如何读相对路径哪?

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是”/filename”,这 里的/代表web

发布根路径下WEB-INF/classes

默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)
5.1 采用Spring的DI机制获得文件,避免硬编码。
参考下面的连接内容:
http://www.javajia.net/viewtopic.php?p=90213&
5.2 配置文件的读取
参考下面的连接内容:
http://dev.csdn.net/develop/article/39/39681.shtm
5.3 通过虚拟路径或相对路径读取一个xml文件,避免硬编码
参考下面的连接内容:
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

6.Java 中文件的常用操作(复制,移动,删除,创建等)(来自网络)
常用 java File 操作类
http://www.easydone.cn/014/200604022353065155.htm

Java 文件操作大全(JSP中)
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

java文件操作详解(Java中文网)
http://www.51cto.com/html/2005/1108/10947.htm

JAVA 如何创建\删除\修改\复制目录及文件
http://www.gamvan.com/developer/java/2005/2/264.html

总结:
通过上面内容的使用,可以解决在Web应用服务 器端,移动文件,查找文件,复制
删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。
建议参考URI,的RFC标准文挡。 同时对Java.io.File. Java.net.URI.等内容了解透彻
对其他方面的理解可以更加深入和透彻。

原文 :http://ajava.org/course/java/14394.html