51小记

  真是郁闷,好端端的一次旅行被一个傻逼司机给破坏了,本来是开往广州南站的车居然给开到天河客运站去了,一个在南一个在北,围着广州市转了个大圈。地图上显示深圳出来后上沈海高速一路北上飙到天河区,而不是向西转过虎门大桥至番禺。司机在被一车人痛骂后,却还不知道怎么去南站,只好叫辆的士在前面带路,才转回南站,本来两个小时的路程却白白坐了四个多小时,无奈连高铁也被耽搁了,只好改签到更晚的时间。这世道还真什么事都能发生。。伤不起呀。

  改签车票后有三个多小时的等待,只好在候车厅“练字”了。本想还能免费蹭到网上,这不最近三大运营商都在开展免费wlan上网活动,结果很是失望。虽然都能搜到信号,也没加密,但是电信和联通无法获取ip也收不到数据包,等同于连接不上了。移动虽能接入,但连接速率一直在1m左右徘徊,速度极其缓慢,好不容连接进去了却发现计费套餐不是免费的,按0.05每分钟扣,最后仔细一看,人家免费是针对全球通客户,你神州行一边凉快去,唉下线算了,咱伤不起。后来用迅雷离线实测下载速度仅仅10kb/s左右,还标称11m。换edge网络同样很慢,想上个qq也超时。

Ubuntu Natty主题T-Shirt

  上周六凌晨躺被窝里上twitter,发现Wow Ubuntu更新一篇文章关于ubuntu natty主题的T恤,详情在见这里!正好最近也在选衣服,于是半夜爬起来开电脑看了看,样式也还满意。图个新鲜,于是连夜在咖啡树那下了订单,直到前天才给我发货,今天终于到手了。感觉还不错,布料和做工还不错,不过细看logo图案印刷不是很精致,不过远看效果还是很漂亮。

  Ubuntu的开发代号一直遵循既定规律,那就是使用首字母相同的形容词加动物名词的双单词组合方式。Ubuntu 10.10的开发代号均以M开头(Maverick Meerkat),因此其下一代版本的名称就是以N开头。

  “Natty Narwhal”意为敏捷的独角鲸,独角鲸又名一角鲸,系一角鲸科其中一个属,而这个属只有这一个品种。雌性独角鲸的牙通常长在牙床,但雄性的左牙会生出来,变成一条长牙,可长达三米。

  一角鲸可能是世界上最神秘的动物之一,它们只生活在北极水域,速度极快,神出鬼没,又叫海洋独角兽。在中世纪,独角鲸的牙被当作独角兽的角远销欧洲和东亚。医生们相信把角磨成粉可治百病生。今天,人类对这个物种仍然知之甚少。

在Firefox 4中使用Live HTTP Headers

  在firefox中不得不装的两个插件,一个是firebug,另一个就是live http headers了,后者也是能查看http请求,虽然这功能firebug也有,但firebug只能查看,不能提交。web应用中两者互补,所向无敌。只可惜firefox 4不兼容,官方至今也没出更新,于是只能自己改改上了。

  首先到这里下载最新的version 0.16(右键另存为),将下载回的.xpi改名为.zip。解压后用文本编辑器打开install.rdf文件,找到

<em:maxVersion>3.6.*</em:maxVersion>

  改为

<em:maxVersion>4.0.*</em:maxVersion>

  保存后用zip格式压缩,注意保持目录结构一致,改回.xpi格式拖到firefox窗口上就可以安装了,完美运行。

image

注意:最新的0.17版已经可以兼容ff4了。

The version 0.17 is now available. It is compatible with Firefox 4.0 and Seamonkey 2.1.

Spring MVC – 高级 @RequestMapping 选项

  除了使用URL模板之外,@RequestMapping 注解也支持 Ant-style 风格的路径(例如:/myPath/*.do)。两种风格混合使用也是支持的(例如:/owners/*/pets/{petId})。

  如果路径没有明确指定映射,这时候就靠方法名来识别,依照 MethodNameResolver 类来处理(默认情况下是 InternalPathMethodNameResolver 类),这只适用于注解的路径不匹配请求的路径。换句话说,只用于减小其中一系列的匹配规则,不构成映射的首选。

  如果有一个没有指明映射路径的方法,那么同样所有的没有指明映射方法的请求都将调用它。如果有多个方法,也会依据方法名来选择。

  可以在请求路径中加入些参数来减小映射范围,例如加上"myParam=myValue"之类的参数(注:类似 struts 的method=methodName),这样请求就会映射到存在对应value参数的方法,例如:

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @RequestMapping(value = "/pets/{petId}", params="myParam=myValue") 
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted 
  } 
}

  "myParam" 这样的参数风格是支持的,当在请求中的参数中包含的时候(可以使用任何的值)。最后说下,"!myParam"参数风格指定了它不应该出现在请求路径中。

  同样的,请求头(header)也能用于减小映射路径范围。

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @RequestMapping(value = "/pets", method = RequestMethod.POST, headers="content-type=text/*") 
  public void addPet(Pet pet, @PathVariable String ownerId) {    
    // implementation omitted 
  } 
}

  在上面的例子中,addPet() 方法只在 content-type 匹配 text/* 才会被调用,例如:text/xml。

  原文:link

Spring MVC – URI Templates

  在spring mvc中通过url路径来访问控制器中的方法,可以在用@RequestMapping注解的路径中使用URI模板。使用@PathVariable注解来指明方法中的参数应该对应URI模板中的变量,如下例子:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
  Owner owner = ownerService.findOwner(ownerId);  
  model.addAttribute("owner", owner);  
  return "displayOwner"; 
}

  URI模板”/owners/{ownerId}”指定了变量名为ownerId。当方法被请求的时候ownerId的值会被赋值为请求的URI,比如一个请求为/owners/fred,那么方法中的ownerId参数会赋值为fred。必须保证参数名和URI模板变量名一致才能自动赋值,想自定义参数变量需要在@PathVariable注解中加入参数,如下:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
  // implementation omitted
}

  当然,也可以使用多个@PathVariable来绑定多个URI模板变量,如下:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
  Owner owner = ownerService.findOwner(ownderId);  
  Pet pet = owner.getPet(petId);  
  model.addAttribute("pet", pet);  
  return "displayPet"; 
}

  下面的代码展示使用变量作为相对路径,当请求为/owners/42/pets/21,会调用findPet()方法。

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
  @RequestMapping("/pets/{petId}")
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    
    // implementation omitted
  }
}

  @PathVariable和方法中的参数可以是任何简单数据类型,例如:int,long,Date,等等。spring会自动转换,如果不匹配则抛出TypeMismatchException。

  原文:link