favicon

favicon 获取网站favicon http://www.google.com/s2/favicons?domain=google.com home.html 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>home page</title> </head> <body> home page </body> </html> 下面两行代码就可以告诉浏览器使用wangyi.ico 作为home.html的图标了: 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;文件重命名为 get-favicon.md;url 改为 get-favicon;旧 url 加入 aliases;categories 改为 Web 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 19196-03-19 · Updated 9096-10-09 · 1 min · 44 words · -

Java JSON 类库: Json-lib, Gson, Jackson, FastJson

4款json的java类库, FastJson JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。 下面介绍四款处理json的java类库: Json-lib、Gson、Jackson、Fastjson FastJson Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发。网址: https://github.com/alibaba/fastjson maven依赖配置: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.79</version> </dependency> 示例: public static String bean2Json(Object obj){ return JSON.toJSONString(obj); } VO vo = JSON.parseObject("...", VO.class); Json-lib JSON-lib is a java library for transforming beans, maps, collections, java arrays and XML to JSON and back again to beans and DynaBeans. 官网: http://json-lib.sourceforge.net/ ...

Created 31316-03-31 · Updated 9096-10-09 · 5 min · 957 words · -

SAX 解析和生成 XML 文档

SAX解析和生成XML文档 SAX解析和生成XML文档 分类: 【xml】 2013-09-24 22:37 2207人阅读 评论(6) 收藏 举报 生成解析xmljavasax 目录? 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/11990891 一、前言 SAX操作xml是基于事件来完成的,自己只负责调用解析的方法,然后具体解析操作都是交给DefaultHandler处理者来完成的,总的来说使用SAX解析和生成xml文档还是比较方便的 。 二、准备条件 因为SAX是jdk自带的解析方式,所以不用添加jar包引用。 三、使用SAX实战 解析xml文档 实现思路: <1>先由SAXParserFactory这个工厂的实例生产一个SAXParser解析器; <2>然后根据读取的xml路径,传递给SAXParser这个解析器,再调用parse()方法; <3>在parse()方法中需要传递DefaultHandler这个类的扩展类的实例,因为它才会真正去一步步去解析xml文档的; <4>在DefaultHandler扩展类中需要重写startDocument(),endDocument()等等方法,因为他们方法内部有返回的具体文档的结果。 具体代码如下: import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.DefaultHandler; /** * 使用SAX操作xml的简单例子 * @author Administrator * */ public class SAXOperateXmlDemo { public void parseXml01(){ String xmlPath = "D:\\project\\dynamicWeb\\src\\resource\\user01.xml"; String xmlName = xmlPath.substring(xmlPath.lastIndexOf("\\")); try { //获取SAX分析器的工厂实例,专门负责创建SAXParser分析器 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); //获取SAXParser分析器的实例 SAXParser saxParser = saxParserFactory.newSAXParser(); //和其他解析方式一样,也要间接通过InputStream输入流对象获取xml信息 //1、直接指定绝对路径获取文件输入流对象 //InputStream inputStream = new FileInputStream(xmlPath); //2、使用类的相对路径查找xml路径 //InputStream inputStream = this.getClass().getResourceAsStream(xmlName); //3、也可以指定路径完成InputStream输入流的实例化操作 InputStream inputStream = new FileInputStream(new File(xmlPath)); //4、使用InputSource输入源作为参数也可以转换xml //InputSource inputSource = new InputSource(inputStream); //解析xml文档 saxParser.parse(inputStream, new XmlSAXHandler01());//这里传递了自定义的XmlSAXHandler()管理者参数来解析xml,不像以前都是直接调用返回的Document对象 } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { SAXOperateXmlDemo demo = new SAXOperateXmlDemo(); demo.parseXml01(); } } /** * 解析SAX的处理者01 * @author Administrator * */ class XmlSAXHandler01 extends DefaultHandler { @Override public void startDocument() throws SAXException { System.out.println("-->startDocument() is invoked..."); super.startDocument(); } @Override public void endDocument() throws SAXException { System.out.println("-->endDocument() is invoked..."); super.endDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("--->startElement() is invoked..."); super.startElement(uri, localName, qName, attributes); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("--->endElement() is invoked..."); super.endElement(uri, localName, qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("---->characters() is invoked..."); super.characters(ch, start, length); } } 上面代码简单解析了一个xml,user01.xml文件的内容如下: ...

Created 1016-04-01 · Updated 9096-10-09 · 7 min · 1395 words · -

Jackson

Jackson Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文: http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。 一、准备工作 下载依赖库jar包 Jackson的jar all下载地址: http://jackson.codehaus.org/1.7.6/jackson-all-1.7.6.jar 然后在工程中导入这个jar包即可开始工作 官方示例: http://wiki.fasterxml.com/JacksonInFiveMinutes 因为下面的程序是用junit测试用例运行的,所以还得添加junit的jar包。版本是junit-4.2.8 如果你需要转换xml,那么还需要stax2-api.jar 测试类基本代码如下 package com.hoo.test; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.JsonNodeFactory; import org.codehaus.jackson.xml.XmlMapper; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hoo.entity.AccountBean; /** function:Jackson 将java对象转换成JSON字符串,也可以将JSON字符串转换成java对象 jar-lib-version: jackson-all-1.6.2 jettison-1.0.1 @author hoojo @createDate 2010-11-23 下午04:54:53 ...

Created 4046-04-04 · Updated 9096-10-09 · 9 min · 1878 words · -

JVM 内存调优, OutOfMemoryError, StackOverflowError

OutOfMemoryError, StackOverflowError 这是IGT笔试的题目,分别写出可以造成两种错误的代码。由于之前测试过HashMap的容量的时候出现过内存不足的错误,所以能写出来,但StackOverflowError没什么印象了。 回来查了下StackOverflowError的资料,在德问社区上有人发帖子java产生StackOverflowError的原因是什么?询问: 请问java.lang.StackOverflowError产生的原因有什么? 已知的有死循环,循环的嵌套层数达到了环境的设定值 谢谢 有人回复说: 死循环本身是不会StackOverflow的,只有无限递归的时候会出现。原则上循环嵌套次数本身是没有限制的,限制的是占用的栈空间,如果你的函数里定义了很多很多变量,栈空间就会用完得比较快。 还有人讲的更详细: JVM里会有两种StackOverflowError, 一种是对应JVM stack, 一种是对应Native Method stack. 我们一般说的都是JVM stack. 每一个JVM线程维护自己的JVM stack. JVM stack里面存放 JVM栈帧. 栈帧中存放 数据和中间结果(本地变量数组, 操作符栈, 和对runtime 常量池的引用). 这些数据都比较小(对象都在堆中, 栈帧仅存放对象引用), 所以想单纯通过 在栈帧中存放大数据的方法 去引入StackOverflowError, 基本是不现实的.一般都是因为方法调用嵌套层数过大. http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.2 JVM stack的大小是可以调节的, sun的windows jvm6 x64,jvm栈默认大小为1024k.可以通过-Xss1024k来调节. http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom 另外,在oracle的docsChapter 2. The Structure of the Java Virtual Machine中,有如下解释: Java Virtual Machine Stacks The following exceptional conditions are associated with Java Virtual Machine stacks: If the computation in a thread requires a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError. ...

Created 9096-04-09 · Updated 9096-10-09 · 2 min · 407 words · -

CSS 中加号、星号及其他符号的作用 (CSS Hack)

CSS中加号、星号及其他符号的作用 http://blog.sina.com.cn/s/blog_6790717801011dx8.html CSS中加号、星号及其他符号的作用 (2012-06-27 14:34:32)转载▼ 标签: 科技 css 浏览器 版本 it 首先,什么是CSS hack? 针对不同的浏览器写不同的CSS code的过程,就叫CSS hack! CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。 CSS Hack的原理是什么 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。 CSS Hack大致有3种表现形式,CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack,CSS Hack主要针对IE浏览器。 类内部Hack: 比如 IE6能识别下划线"“和星号” * “,IE7能识别星号” * “,但不能识别下划线”",而firefox两个都不能认识。 选择器Hack: 比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。 HTML头部引用(if IE)Hack: 针对所有IE: <!--[if IE]><!--您的代码--><![endif]-->,针对IE6及以下版本: <!--[if lt IE 7]><!--您的代码--><![endif]-->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。 书写顺序,一般是将识别能力强的浏览器的CSS写在后面。下面如何写里面说得更详细些。 如何写CSS Hack 比如要分辨IE6和firefox两种浏览器,可以这样写: <style> div{ background:green; *background:red; } </style> 在IE6中看到是红色的,在firefox中看到是绿色的。 上面的css在firefox中,它是认识不了后面的那个带星号的东西是什么的,于是将它过滤掉,不予理睬,解析得到的结果是:div{background:green},于是理所当然这个div的背景是绿色的。 在IE6中呢,它两个background都能识别出来,它解析得到的结果是:div{background:green;background:red;},于是根据优先级别,处在后面的red的优先级高,于是当然这个div的背景颜色就是红色的了。 在理想世界里,正确的CSS应该在任何支持CSS的浏览器里工作良好。不幸的是,我们并不是生活在理想的世界里,浏览器们布满了BUG和不一致。创建一个跨浏览器并且显示一致的页面,CSS开发者必须想尽办法。通过使用BUG和未实现的CSS,开发者就能够为不同的浏览器应用不同的规则。HACK和FILTER是开发者强有力的武器。了解各种常用的HACKS以及它们如何工作,是件重要的事,但什么时候用和什么时候不用它们,也是件同等重要的事情。 CSS filter或者hack是一种代码,用来根据浏览器类型,版本号显示或隐藏CSS标签。浏览器们对CSS行为有不同的解释,对W3C标准的支持程度也不相同。CSS 过滤器经常用于在多个浏览器中实现一致的布局外观,因为某些浏览器无法渲染。HACK (黑客) 这样的称呼多少有点消极,实质上属于个人对CSS代码非官方的修改,误导人们以为还有更好的方法达到目的,但其实我们没有,有的人喜欢用patch (补丁) 来称呼它,这样人们就能知道这本是浏览器造成的错误。 ...

Created 11116-04-11 · Updated 9096-10-09 · 3 min · 505 words · -

Java 反编译工具:jad、jd-gui

Java反编译, jad, jd-gui Jadclipse JadClipse是Jad的Eclipse插件 jad jad是一款使用非常广泛地Java反编译工具,上面这款Jadclipse就是基于jad的反编译插件,JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。 官方网站: http://varaneckas.com/jad/ JD-GUI JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。 官方网站: http://jd.benow.ca/ jdec http://jdec.sourceforge.net/ uuDeJava http://www.uuware.com/uudejava_cn.htm Minjava Java Decompiler http://jd.benow.ca/ 工具使用jad(还有joda,jd等工具) 使用jad反编译class文件,jad可以配置到eclipse中当做插件,直接下载jad的eclipse插件jar包,放在eclipse的plugin目录下即可。把下载的jad.exe放在JAVA_HOME的bin下。然后eclipse中点击class文件即可查看到源码。 使用其他工具,FrontEnd Plus集成了jad的java反编译工具,支持多个文件的反编译,也支持各种选项。 矫正反编译代码错误和奇怪代码 异常错误 反编译之后出入类似如下代码: DocumentException e; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; e.printStackTrace(); break MISSING_BLOCK_LABEL_67; e; 这种处理方式就是异常处理,反编译之后出现的这种情况,修改的时候使用try catch即可,其实完全可以将这块删除之后,然后eclipse会自动提示需要添加异常处理的模块,自动try catch即可。 语句标号 (goto) 这种情况常见于条件语句,即转化为if,else语句即可,这种比较容易判断。 i = 0; goto _L1 _L3: i++; _L1: if(i < 4) goto _L3; else goto_L2 ...

Created 11116-04-11 · Updated 9096-10-09 · 1 min · 198 words · -

APK 编译、反编译, AXMLPrinter2, smali, baksmali

apk 编译,反编译,AXMLPrinter2,smali,baksmali http://blog.csdn.net/android_tutor/article/details/5724435 1.AXMLPrinter2.jar 2.baksmali.jar 3.smali.jar 三、准备工作 为了方便起见,作者把AXMLPrinter2.jar, 还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示: 为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示: 四、开始拿来主义 1.用 AXMLPrinter2.jar查看apk中的布局xml文件: 将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等 工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦) 打开main.xml文件,内容如下(一堆天文): 这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令: java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示) 打开main.txt代码如下(是不是有个123了呵呵~): <?xml version="1.0" encoding="utf-8"?> <WebView android:id="@7F050000" android:layout_width="-1" android:layout_height="-2" > </WebView> </LinearLayout> 为了比对打开源程序中的main.xml代码如下(大家比对一下吧): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" <WebView android:id="@+id/apk_web" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout> 2.用baksmali.jar反编译classes.dex: 将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令: java -jar baksmali.jar -o classout/ classes.dex .(如下图所示:) 你将会发现在tools里多一个classout文件夹里面(我代码的包目录结构清晰可见呀),如下图所示: 从上面看出除了Android本身资源的类R开头的,我的源程序里只有一个ApkInstaller.java,完全吻合,真TMD的猥琐呵呵~ 下面我们看一下ApkInstaller.smali内容是什么,如以下代码: .class public Lcom/tutor/apkinstaller/ApkInstaller; .super Landroid/app/Activity; .source "ApkInstaller.java" # instance fields .field private apkWeb:Landroid/webkit/WebView; # direct methods .method public constructor <init>()V .registers 1 .prologue .line 8 invoke-direct {p0}, Landroid/app/Activity;-><init>()V return-void .end method # virtual methods .method public onCreate(Landroid/os/Bundle;)V .registers 5 .parameter "savedInstanceState" .prologue .line 13 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V .line 14 const/high16 v2, 0x7f03 invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V .line 15 const/high16 v2, 0x7f05 invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findViewById(I)Landroid/view/View; move-result-object v2 check-cast v2, Landroid/webkit/WebView; iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; .line 16 iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; invoke-virtual {v2}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v1 .line 17 .local v1, webSettings:Landroid/webkit/WebSettings; const/4 v2, 0x1 invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V .line 19 const-string v0, "http://frankiewei.net/apk/demos/main/index.html#home" .line 20 .local v0, apkUrl:Ljava/lang/String; iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; invoke-virtual {v2, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 21 return-void .end method 同样为了比对我们看一下ApkInstaller.java的源代码如下: ...

Created 14146-04-14 · Updated 9096-10-09 · 2 min · 269 words · -

Maven 中的 DependencyManagement 和 Dependencies

Maven中的DependencyManagement和Dependencies 这里介绍一个在父项目中的根结点中声明dependencyManagement和dependencies的区别 dependencyManagement Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让 所有在子项目中引用一个依赖而不用显式的列出版本号。Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用在这个dependencyManagement 元素中指定的版本号。 例如在父项目里: <dependencyManagement> <dependencies> <dependency> <groupId>MySQL</groupId> MySQL-connector-java</artifactId> <version>5.1.2</version> </dependency> ... <dependencies> </dependencyManagement> 然后在子项目里就可以添加MySQL-connector时可以不指定版本号,例如: <dependencies> <dependency> <groupId>MySQL</groupId> MySQL-connector-java</artifactId> </dependency> </dependencies> 这样做的好处就是: 如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。 dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。 dependencies 相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。 classifier 如果你要发布同样的代码,但是由于技术原因需要生成两个单独的构件,你就要使用一个分类器 (classifier) 。例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4 编译器,另一个使用Java 6 编译器,你就可以使用分类器 来生成两个单独的JAR构件,它们有同样的groupId:artifactId:version组合。如果你的项目使用本地扩展类库,你可以使用分类器为每一个目标平台生成一个构件。分类器常用于打包构件的源码,JavaDoc 或者二进制集合。 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;文件重命名为 maven-dependency-management.md;title 改为「Maven 中的 DependencyManagement 和 Dependencies」;url 改为 maven-dependency-management;旧 url 加入 aliases;categories 改为 Java 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 28286-04-28 · Updated 9096-10-09 · 1 min · 77 words · -

maven pom

maven pom 基本内容: POM包括了所有的项目信息。 maven 相关: pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素 groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为: /org/codehaus/mojo artifactId: 项目的通用名称 version:项目的版本 packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par classifier: 分类 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wiloon</groupId> wechat</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>wechat</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> compile plugin, war plugin, specify jdk version <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> </plugin> </plugins> </build> 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;categories 改为 Java 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 30306-04-30 · Updated 9096-10-09 · 1 min · 85 words · -

命令行创建多模块的 Maven 项目 (父模块, 子模块)

命令行 创建多模块的Maven项目(父模块,子模块) 我们都知道,我们常常将一个复杂的java应用拆分成多个java子应用。由于maven的出现,这种拆分就更加容易了,因为我们通过maven可以创建多个关联模块的项目 (Multiple Module Projects) 。由一个总的模块,下面包含多个子模块 (子模块还可以包含子模块) 。 一、通过在Maven命令行创建。 创建父模块 (总的POM) - cms-validator 使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator -DartifactId=cms-validator 创建一个maven项目,然后修改该项目的pom.xml文件,将package类型改为pom <packaging>pom</packaging> 并删除其中的src目录。 cd cms-validator 创建提供rest service的子模块: validator-rest 在父模块的目录下, 使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.rest -DartifactId=validator-rest 创建一个maven (子) 项目。 创建一个web子模块: validator-web 在父模块的目录下, mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.web -DartifactId=validator-web -DarchetypeArtifactId=maven-archetype-webapp 完成以上3步以后,会在总的pom.xml中已经自动加入: <modules> <module>validator-rest</module> <module>validator-web</module> </modules> 在各个子模块中也自动的加入了: <parent> <artifactId>cms-validator</artifactId> <groupId>com.ebay.tools.cms.validator</groupId> <version>1.0-SNAPSHOT</version> </parent> 由于默认情况下子模块继承了总POM的package(pom),这里需要修改子模块的pom的package类型。 validator-web模块覆盖为<packaging>war</packaging>, validator-rest模块修改为: <packaging>jar</packaging>。 对父模块的特别设置: 需要在上级模块中设置java编译的参数,现在eclipse一般都使用比较新的版本,默认jdk是1.6,而maven默认的Jdk版本很有可能还是1.4。 所以需要设置java编译参数。 <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> 如果web子模块需要wtp的支持,则可以在web模块的pom中设置wtp的支持,需要设置elcipse插件: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <configuration> <wtpmanifest>true</wtpmanifest> <wtpapplicationxml>true</wtpapplicationxml> <wtpversion>2.0</wtpversion> </configuration> </plugin> </plugins> </build> 生成eclipse项目: 在父模块的根目录下,执行命令: ...

Created 6066-05-06 · Updated 9096-10-09 · 1 min · 137 words · -

MyBatis 实体属性与表字段名不一致

MyBatis_当实体属性与表字段名不一致 http://m.blog.csdn.net/blog/wuqinfei_cs/12873135 映射 /* <!-- 将表字段与实体属性一一对应 --> <resultMap type="com.hehe.mybatis.domain.User" id="userMap"> <id column="id" property="id"/> <result column="name" property="username"/> <result column="address" property="uaddress"/> </resultMap> <select id="selectUserById" parameterType="string" resultMap="userMap"> select * from user where id = #{id} </select> 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;文件重命名为 mybatis-result-map.md;title 改为「MyBatis 实体属性与表字段名不一致」;url 改为 mybatis-result-map;旧 url 加入 aliases;categories 改为 Java 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 7076-05-07 · Updated 9096-10-09 · 1 min · 59 words · -

maven setting, mirror, repository

maven setting, mirror, repository maven mirror, repository mirror和 repository 1 Repository (仓库) 1.1 Maven仓库主要有2种: remote repository: 相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository: 存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}.m2\repository目录 1.2 Remote Repository主要有3种: 中央仓库: http://repo1.maven.org/maven2/ 私服: 内网自建的maven repository,其URL是一个内部网址 其他公共仓库: 其他可以互联网公共访问maven repository,例如 jboss repository等 repository里存放的都是各种jar包和maven插件。当向仓库请求插件或依赖的时候,会先检查local repository,如果local repository有则直接返回,否则会向remote repository请求,并缓存到local repository。也可以把做的东西放到本地仓库,仅供本地使用;或上传到远程仓库,供大家使用。 2 Mirror mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。 2.1 没有配置mirror: 2.2 配置mirror: 此时,B Repository被称为A Repository的镜像。 如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都胡够从它的镜像中获取。 2.3 <mirrorOf></mirrorOf> <mirrorOf></mirrorOf>标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置: <mirrorOf>*</mirrorOf> 匹配所有远程仓库。 <mirrorOf>repo1,repo2</mirrorOf> 匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。 <mirrorOf>*,!repo1</mirrorOf> 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 3 Repository与Mirror 3.1 定义 其实,mirror表示的是两个Repository之间的关系,在maven配置文件 (setting.xml)里配置了<mirrors><mirror>……….</mirror></mirrors>,即定义了两个Repository之间的镜像关系。 3.2 目的 配置两个Repository之间的镜像关系,一般是出于访问速度和下载速度考虑。 例如, 有一个项目,需要在公司和住所都编码,并在项目pom.xml配置了A Maven库。在公司,是电信网络,访问A库很快,所以maven管理依赖和插件都从A库下载;在住所,是网通网络,访问A库很慢,但是访问B库很快。这时,在住所的setting.xml里,只要配置一下<mirrors><mirror>….</mirror></mirrors>,让B库成为A库的mirror,即可不用更改项目pom.xml里对于A库的相关配置。 ...

Created 18186-05-18 · Updated 9096-10-09 · 2 min · 234 words · -

Maven 构建之依赖传递

Maven构建之依赖传递 http://a123159521.iteye.com/blog/774322 博客分类: Maven mavenjunit项目管理配置管理Apache 如果断Maven的依赖构建必须每一个项目都指定,那配置是累死人了,比如A依赖了20个项目,B依赖A,那么还要添加20个项目,那就悲剧了,maven有依赖传递的功能。 Transitive Dependency (传递依赖) 你的项目依赖于A,A又依赖于B。你的项目是否要声明你依赖于B? Maven的回答是它帮你自动管理这种依赖的传递,你不需要声明你依赖于B,由Maven来做。 [版本还是要自己指定的.] Dependency Scope (依赖范围) 因此,Maven考虑了6中可能的scope供选择: compile: 默认的scope。编译、测试、打包全都需要。compile参与依赖传递,就是说,你的项目A依赖于B(依赖scope是compile),项目C依赖于你的项目A,那么C也就依赖于B。 provided: 表示JDK或者容器会在Runtime时提供这些(jar),如上面说到的servlet api。provided的东西在编译和测试时会用到,不参与传递依赖。 runtime: 表示编译时不需要,但测试和运行时需要,最终打包时会包含进去。 test: 只用于测试阶段 (测试的编译和测试的运行) ,典型的就是junit的jar。 system: 和provided类似,但要求jar是你的系统里已有的,不会在repository里找,如rt.jar,tools.jar这些。 import: 简单的说,你的项目的pom可以继承另一个项目的pom,从而继承了父项目的依赖关系,但是因为之后single inheritance的限制,所以创造了import,使得你可以"导入"或者说"继承"任何一到多个项目的依赖关系。 依赖管理(dependencyManagement) 实际的项目中,你会有一大把的Maven模块,而且你往往发现这些模块有很多依赖是完全项目的,A模块有个对spring的依赖,B模块也有,它们的依赖配置一模一样,同样的groupId, artifactId, version,或者还有exclusions, classifer。细心的分会发现这是一种重复,重复就意味着潜在的问题,Maven提供的dependencyManagement就是用来消除这种重复的。 为了实现项目间的依赖,一般情况下,web项目依赖于app项目,而app项目很可能依赖于其他的app项目,比如我建了一个util项目,app依赖于util,那么webapp也需要依赖于util,但是我不配置webapp依赖util,验证一下,会不会自动加载依赖包. util项目的构建请参照前讲,接下来看maven配置: util配置; <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="<http://maven.apache.org/POM/4.0.0> [http://maven.apache.org/xsd/maven-4.0.0.xsd](http://maven.apache.org/xsd/maven-4.0.0.xsd)" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> demo</artifactId> <groupId>com.test</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <groupId>com.test.util</groupId> util</artifactId> <version>1.0-SNAPSHOT</version> <name>util</name> <url><http://maven.apache.org>[/url](/url) <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project> app项目的maven配置: ...

Created 28286-05-28 · Updated 9096-10-09 · 2 min · 268 words · -

jpa annotation, 注解

jpa annotation, 注解 http://mzhj.iteye.com/blog/711685 @Embedded 你可以创建一个类被嵌套在实体类中,在这种情况下我们可以使用@Embedded注解。例如,在Hotel类中 可能会有一个Address。 Address是Hotel不可分割的一部分,没有ID, 并且不会被存储在分开的collection中。在这种情况下我们可以使用@Embedded注解 @Entity 标识这个pojo是一个jpa实体 Specifies that the class is an entity. This annotation is applied to the entity class. @Table (name= users ) //指定表名为users @Column @Column(name="DESC", nullable=false, length=512) 设置字段类型 通过@Column注解设置,包含的设置如下 .name: 字段名 .unique: 是否唯一 .nullable: 是否可以为空 .inserttable: 是否可以插入 .updateable: 是否可以更新 .columnDefinition: 定义建表时创建此列的DDL .secondaryTable: 从表名。如果此列不建在主表上 (默认建在主表) ,该属性定义该列所在从表的名字。 @Column(name = "user_code", nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,非空 private String userCode; @Column(name = "user_wages", nullable = true, precision=12, scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位小数,可以为空 private double wages; @Temporal(TemporalType.DATE)//设置为时间类型 private Date joinDate; @Id 设置主键 ...

Created 28286-05-28 · Updated 9096-10-09 · 3 min · 508 words · -

JPA 的 persistence.xml 文件

JPA的persistence.xml文件 Posted on 2012-05-24 12:27 CN.programmer.Luxh 阅读(7217) 评论(0) 编辑 收藏 persistence.xml文件必须定义在classpath路径下的META-INF文件夹中。 我们看看基于Hibernate提供的一个比较完整的JPA2.0的persistence.xml文件。 persistence.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 5 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 7 <!-必须要有name属性,不能为空 -> 8 <persistence-unit name="jpaPU" transaction-type="RESOURCE_LOCAL"> 9 <!-可选 -> 10 <provider>org.hibernate.ejb.HibernatePersistence</provider> 11 <!-可选 -> 12 <jta-data-source>java:/DefaultDS</jta-data-source> 13 <!-可选 -> 14 <mapping-file>ormap.xml</mapping-file> 15 <!-可选 -> 16 <jar-file>MyApp.jar</jar-file> 17 <!-可选 -> 18 <class>org.acme.Employee</class> 19 <!-可选 -> 20 <shared-cache-mode>ENABLE_SELECTOVE</shared-cache-mode> 21 <!-可选 -> 22 <validation-mode>CALLBACK</validation-mode> 24 <!-厂商的特定属性 -> 25 <properties> 26 <!-配置Hibernate方言 -> 27 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 28 <!-配置数据库驱动 -> 29 <property name="hibernate.connection.driver_class" value="com.MySQL.jdbc.Driver" /> 30 <!-配置数据库用户名 -> 31 <property name="hibernate.connection.username" value="root" /> 32 <!-配置数据库密码 -> 33 <property name="hibernate.connection.password" value="root" /> 34 <!-配置数据库url -> 35 <property name="hibernate.connection.url" value="jdbc:MySQL://localhost:3306/jpa?useUnicode=true&characterEncoding=UTF-8" /> 36 <!-设置外连接抓取树的最大深度 -> 37 <property name="hibernate.max_fetch_depth" value="3" /> 38 <!-自动输出schema创建DDL语句 -> 39 <property name="hibernate.hbm2ddl.auto" value="update" /> 40 </properties> 41 </persistence-unit> 43 </persistence> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 要注意使用的是2.0规范 ...

Created 29296-05-29 · Updated 9096-10-09 · 2 min · 225 words · -

Spring 生成 EntityManagerFactory 的三种方式

spring生成EntityManagerFactory的三种方式 1.LocalEntityManagerFactoryBean 只是简单环境中使用。它使用JPA PersistenceProvider自动检测机制( according to JPA’s Java SE bootstrapping ),并且大多数情况下,你只能定义一下persistence unit name 例如: <beans> <bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="myPersistenceUnit"/> </bean> </beans> 2.从JNDI获取EntityManagerFactory 这个选项是当你应用发布在javaee5的服务器中。你可以参阅自己应用服务器文档,如何发布一个自定义的JPA provider到你的应用服务器中。 例: <beans> <jee:jndi-lookup id="myEmf" jndi-name="persistence/myPersistenceUnit"/> </beans> 当javaee服务器启动时,会自动检测persistence units。实际上,是检测应用包中的META-INF/persistence.xml 文件和web.xml中的persistence-unit-ref,以及定义的environment naming。我理解就是JNDI的name。 一般应用情景是: 在META-INF/persistence.xml中 使用<jta-data-source>java:/ MySQLDS</jta-data-source> 获取容器发布的Datesource。 transactions是使用的javaee容器支持的JTA系统,例如tomcat中,可以这样 如果你的项目准备部署在tomcat上,要支持jta,则需把相关的包放在tomcat/lib包下 jndi配置,可以把jndi的配置放置在 tomcat/conf/Catalina/域名(如localhost)/项目名.xml 文件的Context节点下,如下: <Resource name="" auth="Container" type="javax.sql.DataSource" username="" password="" driveClassName="oracle.jdbc.driver.OracleDriver" url="" maxActive="45" maxIdle="25"/> jndi也可以配置在server.xml,context.xml中 2)jta UserTransaction配置 在server.xml文件GlobalNamingResources节点下配置如下: <!- Resource configuration for UserTransaction use JOTM -> <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction" factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/> 然后在 项目名.xml 文件的context节点下加: <ResourceLink name="UserTransaction" global="UserTransaction" type="javax.transaction.UserTransaction"/> SPRING 仅仅做的是是把EntityManagerFactory通过依赖注入到应用的object中。如果要管理事务,则使用JtaTransactionManager。 3.LocalContainerEntityManagerFactoryBean ...

Created 29296-05-29 · Updated 9096-10-09 · 2 min · 291 words · -

JPA JPQL

JPA JPQL http://flowercat.iteye.com/blog/667773 max result entityManager.createQuery(SQL_QUERY).setParameter(arg0,arg1).setMaxResults(10).getResultList(); JPQL就是一种查询语言,具有与 SQL 相 类似的特征, JPQL 是完全面向对象的,具备继承、多态和关联等特性,和hibernate HQL很相似。 查询语句的参数 JPQL 语句支持两种方式的参数定义方式 : 命名参数和位置参数 。 。在同一个查 询语句中只允许使用一种参数定义方式。 命令参数的格式为: " : + 参数 名" 例: Query query = em.createQuery(“select p from Person p where p.personid=:Id “); query.setParameter(“Id”,new Integer(1)); 位置参数的格式为” ?+ 位置编号” 例: Query query = em.createQuery(“select p from Person p where p.personid=?1 “); query.setParameter(1,new Integer(1)); 如果你需要传递 java.util.Date 或 java.util.Calendar 参数进一个参数查询 ,你需要使用一个特殊的 setParameter() 方法 ,相关的 setParameter 方法定义如下: public interface Query ...

Created 6066-06-06 · Updated 9096-10-09 · 8 min · 1526 words · -

CSS DIV 居中

CSS DIV居中 CSS 如何使DIV层水平居中 今天用CSS碰到个很棘手的问题,DIV本身没有定义自己居中的属性, 网上很多的方法都是介绍用上级的text-align: center然后嵌套一层DIV来解决问题. 可是事实上这样的方法科学吗? 经过网络搜索和亲自实验得出以下结论: 正确的也是对页面构造没有影响的设置如下: 对需要水平居中的DIV层添加以下属性: margin-left: auto; margin-right: auto; 经过这么一番设置问题似乎解决了,在FF中已经居中了,可是在IE中看竟然还是没有居中! 郁闷了一下午,就是找不出问题所在,还特地比较了网上的文章竟然一模一样. 问题到底出在哪里呢? 感谢网友乐天无用帮忙找出了这个邪门问题的原因. 原来是L-Blog默认没有在HTML前加上DTD,于是IE就以HTML而不是XHTML来解释文档. 问题并不在CSS而在XHTML网页本身. 需要加上这样的代码才能使得上述设置有效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 如果您希望更为严格的XHTML 1.0 Strict或者XHTML 1.1请查阅相关文档. 以上测试均基于Windows XP SP2版IE6和FireFox 1.0最终版. 如何使DIV居中 主要的样式定义如下: body {TEXT-ALIGN: center;} #center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; } 说明: 首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上"MARGIN-RIGHT: auto;MARGIN-LEFT: auto; " 需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,只 要在每个拆出的div里定义MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。 如何使图片在DIV 中垂直居中,用背景的方法。举例: body{BACKGROUND: url(http://www.w3cn.org/style/001/logo_w3cn_194x79.gif) #FFF no-repeat center;} 关键就是最后的center,这个参数定义图片的位置。还可以写成"top left"(左上角)或者"bottom right"等,也可以直接写数值"50 30" 如何使文本在DIV中垂直居中 如果是文字,便不能用背景方法,可以用增高行距的办法变通实现垂直居中,完整代码如下: <html> <head> <style> body{TEXT-ALIGN: center;} #center{ MARGIN-RIGHT: auto; MARGIN-LEFT: auto; height:200px; background:#F00; width:400px; vertical-align:middle; line-height:200px; } </style> </head> <body > test content </body> </html> 说明: ...

Created 25256-06-25 · Updated 9096-10-09 · 1 min · 168 words · -

javascript unit test

javascript unit test http://blog.sina.com.cn/s/blog_6768f2290100ubw5.html 最近由于工作和个人兴趣的关系,有幸研究了一下javascript的unit test,市面上常见且比较易用的javascript的unit test的framework有三个: jsunit, qunit和yuitest,虽然出处不同,但是本质上,使用方法都大同小异。 jsunit: http://www.jsunit.net/ 最早开发自2001年,是第一个实用的javascript的unit test framework (那时候TDD还远未流行) ,其完全遵循junit的xunit pattern, 有setup, teardown, 有testsuit概念,还有若干种assert方法,不过因为其诞生早,对非同步的ajax测试支持不够,因而有市场占有率渐低的趋势。 qunit: http://docs.jquery.com/Qunit 个人极其欣赏的一个framework,隶属于大名鼎鼎的jquery,但是又无需依赖于jquery的库可单独运行, 方法轻量易学,且具有异步测试的功能。可惜在公司没有被官方支持,只能自己玩。 yui test: http://developer.yahoo.com/yui/yuitest/ 著名的yahoo web js toolkit library中的ut子项目,使用方法和qunit极其相似,也具有异步测试功能,在本人公司被官方支持,最大的缺点是使用时要调用其他诸多的yui模块用来显示结果,不够独立。 以下以qunit为例子,介绍这些unit test framework的使用方法: 1 ) 下载qunit的测试驱动程序js文件和对应显示结果用的css文件 (分别为qunit.js 和qunit.css ) 2 ) 将这两个文件保存在某个目录,并在同一目录建立一个简单的html文件,包含该两个文件以及jquery.js 3 ) 将我们需要测试的js代码的文件也包含入该简单html中(该例中为mycode.js)。 4 ) 将我们要测试的js代码的依赖库也加入该html中(如ExtJS或者其他库) 5 ) 在html中添加script的测试代码 (test suit和assert部分) 6 ) 在浏览器中载入该html文件,页面会自动显示运行结果。 值得一提的是,网上有qunit-CLI的项目,其用rhino解释器来代替浏览器做unit test js的运行环境,提高了测试的效率,有兴趣的朋友可以去google搜索看看。 代码如下: mycode.js function (a, b) { return a + b; } test.html <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="qunit.js"></script> <!-- js to be tested --> <script type="text/javascript" src="mycode.js"></script> <!-- unit test part --> <script> $(document).ready(function(){ test("a basic test example", function() { var sum = add (1 + 1); equal( sum, "2", "We expect value to be 2" ); }); }); </script> </head> <body> QUnit example test markup, will be hidden </ 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 25256-08-25 · Updated 9096-10-09 · 1 min · 148 words · -