Rest-based webservice and rest-based webservice
To learn about the app, I learned webservice by myself today. rest should be one of the other types, namely soap. Now let's take a rest demo first.
Prepare ws jar and spring jar. If you want to connect the data, you have to prepare the data here.
Download jar: http://download.csdn.net/detail/taopeng_100/7827035
After downloading the jar file, put it in lib to configure it.
Create a project named wsTest
First configure the spring config file spring-source.xml Code as follows:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/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" 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.tp.soft.web.*" /> <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" /> <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="xml" value="application/xml" /> </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>
Configure in web. xml with the following code:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>webService</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-source.xml</param-value> </context-param> <servlet> <display-name>CXFServlet</display-name> <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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
Then the interface is written.
package com.tp.soft.web.ws;import java.util.Map;import javax.jws.WebService;@WebServicepublic interface LoginService { public abstract Map<String, Object> doLogin(String username, String password);}
The implementation class implements a simple json code for passing in the account password and returning an account password object:
package com.tp.soft.web.ws.impl;import java.util.HashMap;import java.util.Map;import javax.ws.rs.FormParam;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;import com.tp.soft.web.common.entity.Result;import com.tp.soft.web.entity.User;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) { Result result = new Result(); if(username.equals("zs") && password.equals("123")){ User user = new User(); user.setUsername(username); user.setPassword(password); Map<String, Object> map = new HashMap<String, Object>(); map.put("user", user); result.setMap(map); return map; } return null; }}
At this point you can access the address directly through the browser: http://xxx.xxx.xx.x: 8081/wsTest/ws/rest/loginService/login? Username = "zs" & password = "123" Special Note: If you access the service through get, change @ POST to @ GET if you want to access the service.
After the server is ready, the following code is written for the customer service. The client mainly obtains the json of the user object, and the code is as follows:
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;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.reflect.TypeToken;public class A { public static void main(String[] args) { String url = "http://122.226.178.54:8081/wsTest1/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); Gson gson = new GsonBuilder().create(); Map<String, User> map = gson.fromJson(strJson, new TypeToken<Map<String, User>>(){}.getType()); System.out.println(map.get("user").getUsername()); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
Run the command to view the result.
What is the best way to develop a WebService server in java? What are the differences between different technologies?
In the project, we use the cxf method to implement webService. There are three ways to implement webService.
Axis2 -- Xfire -- cxf
Why is it necessary to use cxf to implement webService? It is because cxf is an upgraded version of xfire and is applicable to java,
Xfire/cxf features higher performance than axis2 and easier integration with spring, while axis2 supports more languages with lower performance than cxf, therefore, cxf is used to transmit data between two projects. To ensure the Security of webservice, we adopt the WS-Security standard-based Security verification (using the CXF callback function ).
How does java write the webservice server?
Java Web services are divided into SOAP-based and REST-based. The following is a SOAP-based example. Only Versions later than JDK6u4 can be compiled.
First, compile a Web Service interface:
@ WebService @ SOAPBinding (style = Style. RPC) public interface TimeServer {@ WebMethod String getTimeAsString (); @ WebMethod long getTimeAsElapsed ();} Then write the Web Service implementation:
Import java. util. date; import javax. jws. webService; @ WebService (endpointInterface = "test. timeServer ") public class TimeServerImpl implements TimeServer {public String getTimeAsString () {return new Date (). toString ();} public long getTimeAsElapsed () {return new Date (). getTime () ;}} finally starts the Web Service:
Public class TimeServerPublisher {public static void main (String [] args) {Endpoint. publish ("127.0.0.1: 9876/ts", new TimeServerImpl ());}}
If it starts normally, you can access 127.0.0.1: 9876/ts in a browser? The wsdl file of the Web Service is displayed.