2011年11月

赶快来体验吧!
每个邀请码可以邀请一个用户,立刻邀请您的朋友来体验SEO建议吧!

ca1bc047db22ca8b
5f12f6d5574dbb9b
d2ef3ed6bf2cf9c0
3d310db4c12db978
70916186d1857297

本文英文原文来自REST with Java (JAX-RS) using Jersey - Tutorial

 

1. Rest ( representational state transfer)
1.1 概述
REST是一种基于HTTP协议的一种架构.在2000年被Roy Fielding提出
在REST风格的架构设计中,所有事物被看做是资源.一个资源能够通过
一个基本的http请求来获取.在REST架构的工程中,应该有一个server来提供访问资源,一个客户端来修改资源.每一个资源都能够被http请求来操作.每一个资源对应一个唯一的URI.

1.2 Http方法
在REST的架构设计中,一般有PUT,GET,POST,DELETE几种方法.

  1.     GET这个一般就是只能读取一个资源.而不能够修改它.
  2.     PUT会创建一个新的资源.必须是幂等的.
  3.     DELETE会移除资源.这个操作也会是幂等的.获取的结果都是一样的.
  4.     POST会创建一个新的或者更新一个已经存在的资源.

1.3 RESTFul web services
一个REST风格的web服务也就是基于一个HTTP方法和REST概念的方法.一般将会给这个服务定义一个基本的URI,还有MIME类型(支持xml,json,user-defined,...)还有就是所要采用的方法类型.

1.4 Java,REST和Jersey
java通过JAX-RS(The Java API for RESTful Web Services)来通过了标准的REST支持.它通过使用注解(annotations)来定义相关的类.
通过在web.xml中注册由Jersey提供的servlet,同时定义rest工程的路径,servlet的基本的URL是这样的:
http://your_domain:port/display-name/url-pattern/path_from_rest_class

这个servlet会分析过来的http请求,然后选择合适的类和方法来响应这个请求,选择的依据就是类和方法各自添加的注解.

在JAX-RS中最常见的注解是:

注解 描述
@PATH(your_path) Sets the path to base URL + /your_path. The base URL is based on your application name, the servlet and the URL pattern from the web.xml" configuration file.
@POST Indicates that the following method will answer to a HTTP POST request
@GET Indicates that the following method will answer to a HTTP GET request
@PUT Indicates that the following method will answer to a HTTP PUT request
@DELETE Indicates that the following method will answer to a HTTP DELETE request
@Produces( MediaType.TEXT_PLAIN [, more-types ] ) @Produces defines which MIME type is delivered by a method annotated with @GET. In the example text ("text/plain" ) is produced. Other examples would be "application/xml" or "application/json".
@Consumes( type [, more-types ] ) @Consumes defines which MIME type is consumed by this method.
@PathParam Used to inject values from the URL into a method parameter. This way you inject for example the ID of a resource into the method to get the correct object.

一个完整的路径来获取资源就是由基本URL加上在对应的类上@PATH注解中的路径.

http://your_domain:port/display-name/url-pattern/path_from_rest_class

Jersey就是这个的规范的参考实现.Jersey包括基本的REST服务端和客户端.核心的客户端能够提供测试以及用来和服务端通信的库. 一个REST的web程序是由数据类和服务构成的,这两个部分一般都是分开在两个包下存放.jersey的servlet是通过web.xml来找到对应的数据类.

对于网站的性能,对于网页的精致一定要有偏执的要求!不管现在是否和你有关,还是以后属于自己的网站一定要有这个精神才行.

高性能网站建设指南

今天我主要是把css的background-position给学习了下.其实在上面的《高性能网站建设指南》指南中就说了对于一个网页的渲染并不是常常所说的完全大部分的时间都花在了很数据库交互取得数据,而是由于一个浏览器载入一个页面需要下载很多的资源文件阻塞造成的,我没有做过测试.你管你信不信,我信.因为是大家.没有理由不信.当然并不是说写代码就不要太注意性能了,我们同样需要努力.所以我们的解决方案就是尽可能的减少浏览器请求的资源文件数量减少同时下载造成的阻塞.而对于图片的处理就是CSS Sprites .也就是把同一个页面的图片放在一张图片上,然后利用css来显示具体的图片在具体的位置;而这个时候就要用到background-position,而更多的在就要用到它的负值了.到底是什么作用呢?下面来看看:

background-position

 

在上面的图片中显示的是在一个div上设置背景图,而一般位置的计算就是从div的左上角(0,0)开始往右往下开始像素数递增.如果我们这个时候想要把图上的红点作为div左上角的开始,我们应该怎么办?很简答就是我们要把图片往左上移动.这个移动也就是要改变css中的background-position 的值,刚才我说了在往右下移动的时候像素数是递增的,所以往左上移动就得减了啊.这个时候就出现所谓的负值了.

.n_header_inner a.logo {
	background:url(/res/v3/img/logo.gif) 0 0 no-repeat;
	display:block;
	overflow:hidden;
	width:180px;
	height:80px; 
	text-indent:-999em;
	float:left;
}
.n_header_inner a.logo:hover {
	background-position:-50px -50px;
}

这样就能够把那个红点作为div的左上角起点了.原来一切都是这么有规则的.其实一切很简单,但是就看你到底想不想做到最好.

让我们开始学习怎么使用Django。这个是本次教程的第一部分,接下来会有2,34部分会不断为大家呈现。

首先,说明的是通过这个教程,我们将会带你以前建立一个民意测试投票的小web应用。这个应用主要包括2个部分:

  • 一个公共的前台页面能够让用户看见所有的民意测试以及能够给他们投票。
  • 一个后台的管理页面,让你能够添加修改和删除民意测试。

在这里,我们首先假设你已经安装好了Django,怎么知道Django已经正常运行了呢,就是我们之前说过的在python的交互平台你输入import django,然后不报错,那就说明成功了。或者接着你可以输入django.get_version()来看看到底你安装的是哪个版本.

阅读剩余部分

image

image

image

一大早起床去超市,看见很多老头老太太在哪里已经开始排队,我也也加入到这里。因为我要给爱人做美味的午餐。
今天的主题是萝卜。因为大家都说“冬天吃萝卜夏天吃姜一年不用开药方”。呵呵。
我去买了羊排和羊腿肉。不过再次感谢国家让我能够有这么贵的肉吃。
开工,做饭了。