Grails
Grails Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成,同时还可以加入脚本编制语言的灵活性和动态性。学习完 Grails 之后,您将彻底改变看待 Web 开发的方式。
Grails Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成,同时还可以加入脚本编制语言的灵活性和动态性。学习完 Grails 之后,您将彻底改变看待 Web 开发的方式。
MySQL 索引 - 显示索引信息 SHOW INDEX FROM table_name; SHOW keys FROM table_name; - create index CREATE INDEX indexName ON mytable(username(length)); - 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 ALTER TABLE tbl_name ADD PRIMARY KEY (column_list); - 这条语句创建索引的值必须是唯一的 (除了NULL外,NULL可能会出现多次) 。 ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): - 添加普通索引,索引值可出现多次。 ALTER TABLE tbl_name ADD INDEX index_name (column_list): - 该语句指定了索引为 FULLTEXT ,用于全文索引。 ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): ALTER TABLE testalter_tbl DROP PRIMARY KEY; ALTER TABLE testalter_tbl DROP INDEX c; SHOW INDEX FROM table_name; ...
innodb_autoinc_lock_mode innodb_autoinc_lock_mode这个参数控制着在向有auto_increment 列的表插入数据时,相关锁的行为; 通过对它的设置可以达到性能与安全(主从的数据一致性)的平衡 【0】我们先对insert做一下分类 首先insert大致上可以分成三类: 1、simple insert 如insert into t(name) values(’test’) 2、bulk insert 如load data | insert into … select …. from …. 3、mixed insert 如insert into t(id,name) values(1,‘a’),(null,‘b’),(5,‘c’); 【1】innodb_autoinc_lock_mode 的说明 innodb_auto_lockmode有三个取值: 1、0 这个表示tradition 传统 2、1 这个表示consecutive 连续 3、2 这个表示interleaved 交错 【1.1】tradition(innodb_autoinc_lock_mode=0) 模式: 1、它提供了一个向后兼容的能力 2、在这一模式下,所有的insert语句(“insert like”) 都要在语句开始的时候得到一个 表级的auto_inc锁,在语句结束的时候才释放这把锁,注意呀,这里说的是语句级而不是事务级的, 一个事务可能包涵有一个或多个语句。 3、它能保证值分配的可预见性,与连续性,可重复性,这个也就保证了insert语句在复制到slave 的时候还能生成和master那边一样的值(它保证了基于语句复制的安全)。 4、由于在这种模式下auto_inc锁一直要保持到语句的结束,所以这个就影响到了并发的插入。 【1.2】consecutive(innodb_autoinc_lock_mode=1) 模式: 1、这一模式下去simple insert 做了优化,由于simple insert一次性插入值的个数可以立马得到 确定,所以mysql可以一次生成几个连续的值,用于这个insert语句;总的来说这个对复制也是安全的 (它保证了基于语句复制的安全) 2、这一模式也是mysql的默认模式,这个模式的好处是auto_inc锁不要一直保持到语句的结束,只要 语句得到了相应的值后就可以提前释放锁 【1.3】interleaved(innodb_autoinc_lock_mode=2) 模式 1、由于这个模式下已经没有了auto_inc锁,所以这个模式下的性能是最好的;但是它也有一个问题,就是 对于同一个语句来说它所得到的auto_incremant值可能不是连续的。 【2】如果你的二进制文件格式是mixed | row 那么这三个值中的任何一个对于你来说都是复制安全的。 ...
‘sql group by having’ http://www.cnblogs.com/wang-123/archive/2012/01/05/2312676.html sql中的group by 用法 Group By 语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)"。 -它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 -注意:group by 是先排序后分组; -举例子说明: 如果要用到group by 一般用到的就是"每这个字" 例如说明现在有一个这样的表: 每个部门有多少人 就要用到分组的技术 select DepartmentID as ‘部门名称’, COUNT(*) as ‘个数’ from BasicDepartment group by DepartmentID -这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID -DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; -如果不用count(*) 而用类似下面的语法 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID -将会出现错误 -消息 8120,级别 16,状态 1,第 1 行 -选择列表中的列 ‘BasicDepartment.DepartmentName’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 -这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面, -作为分组的依据;要么就要被包含在聚合函数中。 -出现的错误详解:咱们看看group by 的执行的过程,先执行select 的操作返回一个程序集, -然后去执行分组的操作,这时候他将根据group by 后面的字段 -进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。 ...
MySQL 横表和纵表转换 (1) 表tb1有如下数据: 姓名 语文 数学 物理 张三 68 89 99 李四 90 66 78 现在要求写出查询语句得到如下查询结果 name subject score 张三 语文 68 张三 数学 89 张三 物理 99 李四 语文 90 李四 数学 66 李四 物理 78 sql语句如下: select 姓名 as name,‘语文’ as subject,语文 as score from tb1 union select 姓名 as name,‘数学’ as subject,数学 as score from tb1 union select 姓名 as name,‘物理’ as subject,物理 as score from tb1 ...
MySQL if IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。 select *,if(sva=1,"男","女") as ssva from taname where sva != "" 作为表达式的if也可以用CASE when来实现: select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != '' 在第一个方案的返回结果中, value=compare-value 而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。 SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END as testCol -- 将输出one http://outofmemory.cn/code-snippet/1149/MySQL-if-case-statement-usage-summary
‘MySQL 字符串连接 CONCAT()’ MySQL> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' MySQL CONCAT () 函数用于将多个字符串连接成一个字符串 MySQL CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQL> SELECT CONCAT(‘My’, ‘S’, ‘QL’); -> ‘MySQL’ MySQL> SELECT CONCAT(‘My’, NULL, ‘QL’); -> NULL MySQL> SELECT CONCAT(14.3); -> ‘14.3′ MySQL CONCAT_WS(separator,str1,str2,…) CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 MySQL> SELECT CONCAT_WS(’,’,‘First name’,‘Second name’,‘Last Name’); -> ‘First name,Second name,Last Name’ ...
MySQL 里的IFNULL、NULLIF和ISNULL用法 今天用到了MySQL里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下: **MySQL中isnull,ifnull,nullif的用法如下: ** **isnull(expr) 的用法: ** 如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。 MySQL> select isnull(1+1); -> 0 MySQL> select isnull(1/0); -> 1 使用= 的null 值对比通常是错误的。 isnull() 函数同 is null比较操作符具有一些相同的特性。请参见有关is null 的说明。 **IFNULL(expr1,expr2)的用法: ** 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 MySQL> SELECT IFNULL(1,0); -> 1 MySQL> SELECT IFNULL(NULL,10); -> 10 MySQL> SELECT IFNULL(1/0,10); -> 10 MySQL> SELECT IFNULL(1/0,‘yes’); -> ‘yes’ IFNULL(expr1,expr2)的默认结果值为两个表达式中更加"通用"的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值: CREATE TABLE tmp SELECT IFNULL(1,’test’) AS test; ...
MySQL coalesce coalesce函数表示可以返回参数中的第一个非空表达式,当你有N个参数时选取第一个非空值 (从左到右) 。 实例一: select coalesce (null,“carrot”,“apple”) 返回结果: carrot 实例二: select coalesce(1,“carrot”,“apple”) 返回结果: 1 友情提示: coalesce里的参数如果是字符串的话,务必用单引号或者双引号廓起来; 这些语句可以直接在MySQL里运行。 http://hi.baidu.com/luoganet/item/7ec497dec10c88e2795daa1f
Navicat 一套适用于MySQL数据库系统地图形化数据库管理、报告以及监控的工具。新版本具有高性能的、具有商业智能的、强大的备份功能,此外还有许多的改进。含简体中文文件。 官方网站: www.navicat.com 官方下载地址: http://www.navicat.com/en/products/navicat_MySQL/MySQL_overview.html中文下载地址: http://down.chinaz.com/soft/22655.htm
内存数据库 内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。 内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其"主拷贝"或"工作版本"常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。 定义:设有数据库系统DBS,DB为DBS中的数据库,DBM(t)为在时刻t,DB在内存的数据集,DBM(t)属于DB。TS为DBS中所有可能的事务构成的集合。AT(t)为在时刻t处于活动状态的事务集,AT(t)属于TS。Dt(T)为事务T在时刻t所操作的数据集, Dt(T)属于DB。若在任意时刻t,均有: 任意T属于AT(t) Dt(T)属于DBM(t) 成立,则称DBS为一个内存数据库系统,简称为MMDBS;DB为一个内存数据库,简称为MMDB。 常见的例子有MySQL的MEMORY存储引擎、eXtremeDB、TT、FastDB、SQLite、Microsoft SQL Server Compact,Redis http://baike.baidu.com/view/1210875.htm
鱼骨图 鱼骨图是由日本管理大师石川馨先生所发明出来的,故又名石川图。鱼骨图是一种发现问题"根本原因"的方法,它也可以称之为"Ishikawa"或者"因果图"。其特点是简捷实用,深入直观。它看上去有些象鱼骨,问题或缺陷 (即后果) 标在"鱼头"外。在鱼骨上长出鱼刺,上面按出现机会多寡列出产生生产问题的可能原因。鱼骨图有助于说明各个原因之间如何相互影响。它也能表现出各个可能的原因是如何随时间而依次出现的。这有助于着手解决问题。 问题的特性总是受到一些因素的影响,我们通过头脑风暴法找出这些因素, 鱼骨图 鱼骨图 并将它们与特性值一起,按相互关联性整理而成的层次分明、条理清楚,并标出重要因素的图形就叫特性要因图、特性原因图。因其形状如鱼骨,所以又叫鱼骨图 (以下称鱼骨图) ,它是一种透过现象看本质的分析方法。 同时,鱼骨图也用在生产中,用来形象地表示生产车间的流程。鱼骨图也称为因果图、因果分析图或石川图 (根据最先提出这一工具的品质管理权威石川馨 (Kaoru Ishikawa译名) 的名字命名) 。它看上去有些象鱼骨,问题或缺陷 (即后果) 标在"鱼头"外。在鱼骨上长出鱼刺,上面按出现机会多寡列出产生生产问题的可能原因。
Tomcat 访问日志 http://hooray520.iteye.com/blog/1335156 Tomcat的访问日志是靠org.apache.catalina.valves.AccessLogValve来控制的,你可以修改$tomcat/conf/server.xml来启用它 ($tomcat是Tomcat安装的目录)。AccessLogValve默认应该是注释掉的,简单的将其注释去掉,然后重启Tomcat就可以了。 以下是Tomcat默认的配置: 引用 你可以设置日志保存的目录(directory),日志的文件名的前缀(prefix),后缀(suffix)和日志的具体格式。保存目录,文件名的前缀、后缀都很简单,一般默认设置也就可以了。resolveHost出于性能的考虑,一般也设为false. 但访问日志的格式(pattern)却有很多的选项供你选择。以下列出了一些基本的日志格式项: 引用 %a – 远程主机的IP (Remote IP address) %A – 本机IP (Local IP address) %b – 发送字节数,不包含HTTP头,0字节则显示 ‘-’ (Bytes sent, excluding HTTP headers, or ‘-’ if no bytes were sent) %B – 发送字节数,不包含HTTP头 (Bytes sent, excluding HTTP headers) %h – 远程主机名 (Remote host name) %H – 请求的具体协议,HTTP/1.0 或 HTTP/1.1 (Request protocol) %l – 远程用户名,始终为 ‘-’ (Remote logical username from identd (always returns ‘-’)) %m – 请求方式,GET, POST, PUT (Request method) %p – 本机端口 (Local port) %q – 查询串 (Query string (prepended with a ‘?’ if it exists, otherwise an empty string) %r – HTTP请求中的第一行 (First line of the request) %s – HTTP状态码 (HTTP status code of the response) %S – 用户会话ID (User session ID) %t – 访问日期和时间 (Date and time, in Common Log Format format) %u – 已经验证的远程用户 (Remote user that was authenticated %U – 请求的URL路径 (Requested URL path) %v – 本地服务器名 (Local server name) %D – 处理请求所耗费的毫秒数 (Time taken to process the request, in millis) %T – 处理请求所耗费的秒数 (Time taken to process the request, in seconds) 你可以用以上的任意组合来定制你的访问日志格式,也可以用下面两个别名common和combined来指定常用的日志格式: ...
ModelAndView http://itroop.iteye.com/blog/263845 的构造方法有7个。但是它们都是相通的。这里使用无参构造函数来举例说明如何构造ModelAndView 实例。 ModelAndView类别就如其名称所示,是代表了MVC Web程序中Model与View的对象,不过它只是方便您一次返回这两个对象的holder,Model与View两者仍是分离的概念。 最简单的ModelAndView是持有View的名称返回,之后View名称被view resolver,也就是实作org.springframework.web.servlet.View接口的实例解析,例如 InternalResourceView或JstlView等等: ModelAndView(String viewName) 如果您要返回Model对象,则可以使用Map来收集这些Model对象,然后设定给ModelAndView,使用下面这个版本的ModelAndView: ModelAndView(String viewName, Map model) Map对象中设定好key与value值,之后可以在视图中取出,如果您只是要返回一个Model对象,则可以使用下面这个ModelAndView版本: ModelAndView(String viewName, String modelName, Object modelObject) 藉由modelName,您可以在视图中取出Model并显示。 ModelAndView类别提供实作View接口的对象来作View的参数: ModelAndView(View view) ModelAndView(View view, Map model) ModelAndView(View view, String modelName, Object modelObject) 一个例子是org.springframework.web.servlet.view.RedirectView,ModelAndView预设是使 用forward来转发请求结果至视图,使用RedirectView的话,则会使用redirect将请求重导至视图,例如: … public ModelAndView handleRequest(….) … { …. return new ModelAndView(new RedirectView(this.getViewPage())); } …. 在这边,viewPage的地址是从服务器网页根目录开始指定,而不是Web应用程序的根目录,所以您的getViewPage()传回的地址必须像是 /springapp/pages/index.htm这样的地址,其中springapp是您的Web应用程序目录。 使用forward的话,网址列上并不会出现被转发的目标地址,而且forward是在Web应用程序之内进行,可以访问Web应用程序的隐藏目录,像是WEB-INF,然而forward只能在Web应用程序中进行,不能指定至其它的Web应用程序地址。 使用redirect的话,是要求客户端浏览器重新发出一个指定的请求地址,因此网址列上会出现被重导的目录地址,重导的请求是由浏览器发出,所以不能 访问Web应用程序中的隐藏目录,像是WEB-INF,然而重导是重新要求一个网页,所以可以指定至其它的Web应用程序地址。 DispatcherServlet会根据传回的ModelAndView来解析View名称,并处理给予的Model。View名称的解析是委托给实 作org.springframework.web.servlet.ViewResolver接口的实例,ViewResolver接口定义如下: public interface ViewResolver { public view resolveViewName(String, Locale locale) throws ServletException; } ViewResolver的一个实例是InternalResourceViewResolver,名称解析完之后,实际的View绘制与Model转 换处理是交给实作org.springframework.web.servlet.View的实例,View接口如下: public interface View { ...
OTF与TTF的区别 TTF 扩展名的 O 图标的表示 OpenType - TrueType 字体, 采用的是 TrueType 曲线, 不过支持 OpenType 的高级特性. TTF 扩展名的 T 图标的表示 TrueType 字体, 采用的是 TrueType 曲线, 不支持 OpenType 特性. OTF 扩展名的 O 图标的表示 OpenType - PostScript 字体, 采用的是 PostScript 曲线, 支持 OpenType 高级特性. OpenType 是 Microsoft 与 Adobe 共同制定的标准, 在此之前有两大字体格式: TrueType 和 Type 1, 两家合作制定出的 OpenType 将之前的两大格式都包含了进去, TrueType 进化成 OpenType - TrueType, 在原有基础上增加了 OpenType 高级特性支持, 扩展名不变 (TTF), 图标由 T 变为 O; Type 1 进化成 OpenType - PostScript, 在原有基础上增加了 OpenType 高级特性支持, 扩展名定位 OTF, 图标为 O. ...
AspectJ 编译时织入(Compile Time Weaving, CTW) 本文主要介绍 AspectJ 编译时织入 (Compile Time Weaving, CTW) 的技术,并附有详细示例代码。 AspectJ 是一个 AOP 的具体实现框架。AOP (Aspect Oriented Programming) 即面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 AspectJ不但可以通过预编译方式 (CTW) 和运行期动态代理的方式织入切面,还可以在载入 (Load Time Weaving, LTW) 时织入。 AspectJ 扩展了Java,定义了一些专门的AOP语法。官网上这样描述: a seamless aspect-oriented extension to the Java programming language Java platform compatible easy to learn and use 在网上,关于 Spring + AspectJ Annotation动态代理或者AspectJ 载入时织入 (Load Time Weaving, LTW) 的文章特别多 (其特点是: 前者需要用Java编写切面并加以注释,后者需要编写 aop.xml 文件并在启动 Java 时带上参数-javaagent) ,所以本文就不在涉及。 编译时织入是 AspectJ 的一个重要功能,因为 AspectJ 有一个专门的编译器用来生成遵守 Java 字节编码规范的 Class 文件。 ...
CSS布局 块级元素及内联元素 Block element 块级元素,顾名思义就是以块显示的元素,高度宽度都是可以设置的。、、 h1 等元素常常称为块级元素,这些元素显示为一块内容;Strong,span等元素称为行内元素,它们的内容显示在行中,即"行内框"。 (可以使用display=block将行内元素转换成块元素,display=none表示生成的元素根本没有框,也既不显示元素,不占用文档中的空间) 内联元素(inline element)一般都是基于语义级(semantic)的基本元素。内联元素只能容纳文本或者其他内联元素,常见内联元素 “a”。 任何不是块级元素的可见元素都是内联元素-《CSS权威指南》. 其表现的特性是"行布局"形式,这里的"行布局"的意思就是说其表现形式始终以行进行显示。 A: 行内就是在一行内的元素,只能放在行内;块级元素,就是一个四方块,可以放在页面上任何地方。 B: 说白了,行内元素就好像一个单词;块级元素就好像一个段落,如果不另加定义的话,它将独立一行出现。 C: 一般的块级元素诸如段落、标题...、列表, 、表格、表单<form>、DIV和BODY<body>等元素。而内联元素则如: 表单元素<input>、超级链接、图像<img>、 ........ D: 块级无素的显著特点是: 每个块级元素都是从一个新行开始显示,而且其后的无素也需另起一行进行显示。 E: 在CSS定义中属于一个行内元素,而是块级元素。 块级元素比较霸道,默认状态下每次都占据一整个行,后面的内容也必须再新起一行显示。当然非块级元素也可以通过css的display:block;将其更改成块级元素。此外还有个特殊的,float也具有此功能。 Inline element 内联元素 通俗点来说就是文本的显示方式,与块级元素相反,内联元素的高度宽度都是不可以设置的,其宽度就是自身文字或者图片的宽度。我们常用到的、、都属于内联元素。内联元素的显示特点就是像文本一样的显示,不会独自占据一个行。当然块级元素也能变成内联元素 (本文为转载,个人认为非绝对意义上的内联) ,那就是通过css的display:inline;和float来实现。 在《CSS权威指南》这样定义到,"任何不是块级元素的可见元素都是内联元素,其表现的特性是"行布局"形式。"我个人不太习惯"行布局"的说话,因为我认为块级元素从表现上更像"行"显示,而内联元素更像是"文本"的显示属性。这其中一点记住很关键,"内联元素的高度宽度都是不可以设置的,其宽度就是自身文字或者图片的宽度"。因为在你设置宽度高度大半天后没反应才发现,原来这只是个内联元素。 对于学过CSS的人来说一听就能明白。可对于新手来说不易理解,我主要对新手说通熟点吧! 用容器这一词会更容易形象理解它们的存在与用途,行内元素相当一个小容器,而相当于一个大容器,大容器当然可以放一个小容器了。就是小容器,这样一说你也许会在脑海中有一个初步的印象了吧,如果我们想在大容器中装一些清水。但我也想在里装一些墨水怎么办?很简单,我们把小容器拿出来装上墨水然后放入大容器里的清水中不就成了吗。 我在举个简单的一个实际例子吧: 比如 abcdefg 我想用CSS定义字母c的样式,因此我们就可以用到了。 abcdefg 块元素(block element)一般是其他元素的容器元素,块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P"。"form"这个块元素比较特殊,它只能用来容纳其他块元素。 如果没有css的作用,块元素会顺序以每次另起一行的方式一直往下排。而有了css以后,我们可以改变这种html的默认布局模式,把块元素摆放到你想要的位置上去。而不是每次都另起一行。需要指出的是,table标签也是块元素的一种,table based layout和css based layout从一般使用者 (不包括视力障碍者、盲人等) 的角度来看这两种布局,除了页面载入速度的差别外,没有其他的差别。但是如果普通使用者不经意点了查看页面源代码按钮后,两者所表现出来的差异就非常大了。基于良好重构理念设计的css布局页面源码,至少也能让没有web开发经验的普通使用者把内容快速的读懂。从这个角度来说,css layout code应该有更好的美学体验吧。 你能够把块容器元素div想象成一个个box,或者如果你玩过剪贴文载的话,那就更加容易理解了。我们先把需要的文章从各种报纸、杂志总剪 下来。每块剪下来的内容就是一个block。然后我们把这些纸块按照自己的排版意图,用胶水重新贴到一张空白的新纸上。这样就形成了你自己独特的文摘快报 了。作为一种技术的延伸,网页布局设计也遵循了同样的模式。. 块元素(block element)和内联元素(inline element)都是html规范中的概念。块元素和内联元素的基本差异是块元素一般都从新行开始。而当加入了css控制以后,块元素和内联元素的这种属性差异就不成为差异了。比如,我们完全可以把内联元素cite加上display:block这样的属性,让他也有每次都从新行开始的属性。 可变元素的基本概念就是他需要根据上下文关系确定该元素是块元素或者内联元素。可变元素还是属于上述两种元素类别,一旦上下文关系确定了他的类别,他就要遵循块元素或者内联元素的规则限制。大致的元素分类见全文。 ps:关于inline element的中文叫法,有多种内联元素、内嵌元素、行内元素、直进式元素。基本上没有统一的翻译,爱怎么叫怎么叫吧。另外提到内联元素,我们会想到有个display的属性是display:inline;这个属性能够修复著名的IE双倍浮动边界问题。 块元素(block element) address - 地址 ...
class.getName http://bbs.csdn.net/topics/70162498 java.lang.Object java.lang.Class String getName() Returns the name of the entity (class, interface, array class, primitive type, or void) represented by this Class object, as a String. java的类映射函数..用来得到类的具体名字 比如说1个类mypackage.MyClass MyClass.class.getName();就能得到mypackage.MyClass 在object里面这么用getClass().getName();
META-INF, MANIFEST.MF 做过 JAVA EE 开发的工程师应该都知道在 JAVA build 出来的 JAR 或者 WAR 的顶层目录下有个 META-INF 文件夹吧,可是有多少人能够清楚说出这个文件夹到底是做神马的? What is the purpose of META-INF? 恐怕不是都能说的清楚准确吧。 把这个问题抛出来,是因为我在公司的项目中发现 META-INF 这个文件夹被误用了,看来不是每个人都清楚 :) 所谓 META-INF, 说白了就是存放一些 meta information 相关的文件的这么一个文件夹, 一般来说尽量不要自己手工放置文件到这个文件夹。怎么理解这句话呢? 就是说这个文件夹应该被看作是 JAVA 工程的一个内部 META 目录,所以这个目录下的文件应该都是 build 工具来生成的。我们自己的文件应该直接放到根目录下或者其他的子目录中。 根据官方的 JAR file specification (http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html), 一个典型的 META-INF 目录下可能包含如下几种文件或者子目录: MANIFEST.MF: The manifest file that is used to define extension and package related data. INDEX.LIST x.SF x.DSA services/ 不过理想和现实总是有差距,现在即使一些著名的开源代码对 META-INF 的使用上都存在大的差异,类似 Apache CXF 中就有这样的Spring配置: ...
JavaEE Web 工程/项目 目录结构 Maven 标准目录结构 好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下: src/main/java Application/Library sources src/main/resources Application/Library resources src/main/webapp Web application sources src/test/java Test sources src/test/resources Test resources src/main/filters Resource filter files src/main/assembly Assembly descriptors src/main/config Configuration files src/main/scripts Application/Library scripts src/test/filters Test resource filter files src/site Site LICENSE.txt Project's license NOTICE.txt Notices and attributions required by libraries that the project depends on README.txt Project's readme 使用目录模板,可以使 pom.xml 更简洁。因为 Maven2 已经根据缺省目录,预定义了相关的动作,而无需人工的干预。以 resources 目录为例: ...