目前的webservice风格,rest应该是其中一种 还有种就是soap,rest是轻量级的,越来越流行。下面举一个简单例子说明下rest的用法。

1. 准备ws的jar和spring的jar,如何要连接数据的话就自行准备这边就不提供了

下载jar地址:http://download.csdn.net/detail/taopeng_100/7827035

或者:http://pan.baidu.com/s/1qWVejtq

下载好jar之后将其放入lib下就可以了。

1. 创建个项目,名叫RestwsTest,配置spring配置文件spring-source.xml

spring-source.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://cxf.apache.org/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<context:annotation-config />
<context:component-scan base-package="com.*" />
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="restSample" class="com.hoo.service.RESTSampleSource" />
<jaxrs:server id="restServiceContainer" address="/rest">
<jaxrs:serviceBeans>
<bean class="com.tp.soft.web.ws.impl.LoginServiceImpl" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json" />
<entry key="" value="application/" />
</jaxrs:extensionMappings>
<jaxrs:languageMappings>
<entry key="en" value="en-gb"></entry>
</jaxrs:languageMappings>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
</jaxrs:providers>
</jaxrs:server>
</beans>

2. 配置web.xml文件

web.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>RestwsTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-source.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>

3. 编写接口LoginService

LoginService.java如下:

package com.tp.soft.web.ws;

import java.util.Map;
import javax.jws.WebService; @WebService
public interface LoginService {
public abstract Map<String, Object> doLogin(String username, String password);
}

4. 编写接口的实现类LoginServiceImpl

LoginServiceImpl.java如下:

package com.tp.soft.web.ws.impl;

import java.util.HashMap;
import java.util.Map; import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import com.tp.soft.web.ws.LoginService; @Path("/loginService")
public class LoginServiceImpl implements LoginService {
@POST
@Path(value = "/login")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, Object> doLogin(
@FormParam(value = "username") String username,
@FormParam(value = "password") String password) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("user", username + password);
return map;
}
}

此时可以在本地直接通过浏览器访问地址:http://localhost:8080/RestwsTest/ws/rest/loginService /login?username="zs"&password="123"

特别注意这边访问的是通过get的 如果要能访问就要将@POST改成@GET

4. 服务器写好了,下面就来写客服端的代码,客户端主要就是获取user对象的json,代码如下:

RestClient.java如下:

package com.tp.soft.client;

import java.io.IOException;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod; public class RestClient {
public static void main(String[] args) {
String url = "http://localhost:8080/RestwsTest/ws/rest/loginService/login";
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
NameValuePair[] data = { new NameValuePair("username", "zs"),
new NameValuePair("password", "123") };
method.setRequestBody(data);
try {
int statusCode = client.executeMethod(method);
if (statusCode == 200) {
String strJson = method.getResponseBodyAsString();
System.out.println(strJson);
// System.out.println(map.get("user").getUsername());
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

注意上面代码里面的PostMethod,在LoginServiceImpl里面的方法必须是@POST才可以,如果是@GET或者其他会报错的。

aaarticlea/png;base64,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" alt="" />

最新文章

  1. logstash file输入,无输出原因与解决办法
  2. socket - socketserver - start TCP server
  3. max min 与 min max 的差别
  4. Java for LeetCode 079 Word Search
  5. 面向初学者的 Windows 10 UWP 应用开发
  6. 在Windows下用Mingw 4.5.2编译X264
  7. 测试通过Word直接发布博文
  8. iOS 检测版本更新
  9. Linux学习方法之以始为终—Linux工作分类
  10. .net mvc4 从客户端中检测到有潜在危险的 Request.Form 值
  11. Sudoku Generator
  12. 3.Nginx常用功能介绍
  13. C++学习-3
  14. HBase源码实战:ImportTsv
  15. 占位符的使用和PreparedStatement接口使用:
  16. Wpf开源收集
  17. golang查看channel缓冲区的长度
  18. jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象
  19. 嵌入式开发之hi3519---spi nor flash启动
  20. PHP函数总结 (七)

热门文章

  1. CentOS远程系统管理之VNC
  2. 文件MD5查看器工具与源码实现及下载
  3. 如何让Windows程序只运行一个程序实例?
  4. Command Line-Version (SetACL.exe) – Syntax and Description
  5. 插件GsonFormat快速实现JavaBean
  6. c#不重复的排序方法
  7. php快速定位多维数组的深度
  8. javascript 之原型理解
  9. BUG Error:Execution failed for task &#39;:app:dexDebug&#39;.
  10. 深入理解shared pool共享池之library cache的library cache pin系列三