java如何写接⼝给别⼈调⽤
计算机语⾔分类有很多,如C、C++、C#、Java、Php、Python等等,她们有各⾃的特性及擅长的领域,但她们各⾃⼜不是全能的。在⼀个稍微⼤型⼀点的项⽬都会⽤到多种语⾔共同完成,那么这些编程语⾔如何进⾏通信呢。什么意思呢,就是⽐如说我Java写的⼀个⽅法,其他编程语⾔要怎么去调⽤呢?这就是本⽂要探讨的问题了。
⼀般来说,⽅法层⾯的编程语⾔通信⽤的是⽹络接⼝形式,只暴露出形参和结果供别⼈调⽤。接⼝⼀般分为接⼝定义者和接⼝调⽤者,定义者可以规定接收参数的类型及返回形式,⽽接⼝定义者则只能完全按照接⼝定义者规定的参数进⾏访问。就叫是我们所说的webService(⽹络服务)。
以前的做法是利⽤XML作接⼝格式定义,然后通过Http做通讯和请求,如⼤名⿍⿍的SOAP,其实现在也是的,只不过现在流⾏RestFul风格的Rest接⼝形式,但⽤的还是
XML+HTTP,那这两者有啥区别呢?最⼤的区别就是SOAP返回的主要是XML格式,有时还需要附带⼀些辅助⽂件,⽽Rest则还可以返回JSON类型的字符串,减少了很多繁乱的XML 标签。本⽂就以Java为例,⽤她写⼀个接⼝,并让其他⼈去调⽤,以此来简单展⽰接⼝调⽤是怎么样⼀个过程。
步骤:谦让的近义词
1、本机装有Java JDK运⾏环境及编程IDE(如Myeclip)
2、建⽴⼀个maven项⽬,⽤以下载jar包,项⽬结构如下:
l⽂件内容如下:
冷静下来1<project xmlns="maven.apache/POM/4.0.0" xmlns:xsi="www.w3/2001/XMLSchema-instance"
2 xsi:schemaLocation="maven.apache/POM/4.0.0 maven.apache/maven-v4_0_0.xsd">俊杰廉悍
3 <modelVersion>4.0.0</modelVersion>
4 <groupId>ws</groupId>
5 <artifactId>restful</artifactId>
6 <packaging>war</packaging>
7 <version>0.0.1-SNAPSHOT</version>
8 <name>restful-rver</name>
9 <url>maven.apache</url>
10 <properties>
11 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12 <jery.version>2.6</jery.version>
13 <jery-spring.version>2.23.1</jery-spring.version>
石榴吃法14 <spring.version>4.2.7.RELEASE</spring.version>
15 <rvlet-api-version>3.1.0</rvlet-api-version>
16 <logback.version>1.1.1</logback.version>
17 <jcloverslf4j.version>1.7.6</jcloverslf4j.version>
18 </properties>
19 <dependencies>
20 <dependency>
21 <groupId>junit</groupId>
22 <artifactId>junit</artifactId>
23 <version>3.8.1</version>
24 <scope>test</scope>
24 <scope>test</scope>
25 </dependency>
26
27 <dependency>
28 <groupId>org.</groupId>
29 <artifactId>jery-spring3</artifactId>
30 <version>${jery-spring.version}</version>
31 <exclusions>
32 <exclusion>
33 <groupId>org.springframework</groupId>
34 <artifactId>spring-core</artifactId>
35 </exclusion>
36 <exclusion>
37 <groupId>org.springframework</groupId>
38 <artifactId>spring-web</artifactId>
39 </exclusion>
40 <exclusion>
41 <groupId>org.springframework</groupId>
42 <artifactId>spring-beans</artifactId>
43 </exclusion>
44 </exclusions>
45 </dependency>
46
47 <dependency>
48 <groupId>org.ainers</groupId>
49 <artifactId>jery-container-rvlet</artifactId>
50 <version>${jery-spring.version}</version>自强名言
51 </dependency>
52 <dependency>
53 <groupId>org.ainers</groupId>
54 <artifactId>jery-container-rvlet-core</artifactId>
55 <version>${jery-spring.version}</version>
56 </dependency>
57
58 <dependency>
59 <groupId>org.dia</groupId>
60 <artifactId>jery-media-json-jackson</artifactId>
61 <version>${jery.version}</version>
62 </dependency>
63 <dependency>
64 <groupId>org.dia</groupId>
65 <artifactId>jery-media-multipart</artifactId>
66 <version>${jery.version}</version>
67 </dependency>
68 <dependency>
69 <groupId>org.</groupId>
70 <artifactId>jery-entity-filtering</artifactId>
71 <version>${jery.version}</version>
72 </dependency>
73
74 <!-- Spring4.2 dependencies -->
75 <dependency>
76 <groupId>org.springframework</groupId>
77 <artifactId>spring-core</artifactId>
78 <version>${spring.version}</version>
79 </dependency>
80
81 <dependency>
82 <groupId>org.springframework</groupId>
83 <artifactId>spring-context</artifactId>
84 <version>${spring.version}</version>
85 </dependency>
86
87 <dependency>
88 <groupId>org.springframework</groupId>
89 <artifactId>spring-web</artifactId>
89 <artifactId>spring-web</artifactId>
90 <version>${spring.version}</version>
91 </dependency>
92
93 <dependency>
94 <groupId>org.springframework</groupId>
95 <artifactId>spring-jdbc</artifactId>
96 <version>${spring.version}</version>
97 </dependency>
98
99 <dependency>
100 <groupId>org.springframework</groupId>
101 <artifactId>spring-tx</artifactId>
喜迎十九作文102 <version>${spring.version}</version>
103 </dependency>
104 <dependency>
105 <groupId>org.springframework</groupId>
106 <artifactId>spring-test</artifactId>
107 <version>${spring.version}</version>
108 <scope>test</scope>放假作文
109 </dependency>
110
111 <dependency>
112 <groupId>javax.rvlet</groupId>
113 <artifactId>javax.rvlet-api</artifactId>
114 <version>${rvlet-api-version}</version>
115 <scope>provided</scope>
116 </dependency>
117
118 <!-- Logback dependencies -->
119 <dependency>
120 <groupId>ch.qos.logback</groupId>
121 <artifactId>logback-classic</artifactId>
122 <version>${logback.version}</version>
123 </dependency>
124 <dependency>
125 <groupId>org.slf4j</groupId>
126 <artifactId>jcl-over-slf4j</artifactId>
127 <version>${jcloverslf4j.version}</version>
128 </dependency>
129
130 </dependencies>
131 <build>
132 <finalName>restful</finalName>
133 </build>
134</project>
l内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="www.springframework/schema/beans"
3 xmlns:xsi="www.w3/2001/XMLSchema-instance"
4 xmlns:context="www.springframework/schema/context"
5 xmlns:tx="www.springframework/schema/tx"
6 xsi:schemaLocation="www.springframework/schema/beans www.springframework/schema/beans/spring-beans.xsd
7 www.springframework/schema/context www.springframework/schema/context/spring-context-4.1.xsd">
8
9 <context:component-scan ba-package="com.kendy.*"></context:component-scan>
10</beans>
l则主要配置采⽤的容器、⽇志管理及拦截器,拦截器可以实现到达请求郑涛之前进⾏⾝份认证,踢除没有访问资格的请求,⽽rest项⽬⼀般是⽤Jery容器。配置如下:
(kendy只是我的英⽂名,你们可以⾃⼰定义路径)
1<?xml version="1.0" encoding="UTF-8"?>
2<web-app xmlns:javaee="/xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-app_2_5.xsd">
3 <display-name></display-name>
4 <context-param>
5 <param-name>contextConfigLocation</param-name>
6 <param-value>l</param-value>
7 </context-param>
8 <listener>
9 <listener-class>
10 org.t.ContextLoaderListener
11 </listener-class>
12 </listener>
13 <rvlet>
14 <rvlet-name>jery-rlvet</rvlet-name>
15 <rvlet-class>
16 org.glassfish.jery.rvlet.ServletContainer
17 </rvlet-class>
18 <init-param>
19 <param-name>javax.ws.rs.Application</param-name>
20 <param-value>com.kendy.filter.RestJaxRsApplication</param-value>
21 </init-param>
22 <load-on-startup>1</load-on-startup>
23 </rvlet>
24 <rvlet-mapping>
25 <rvlet-name>jery-rlvet</rvlet-name>
26 <url-pattern>/*</url-pattern>
27 </rvlet-mapping>
28</web-app>
6 拦截器如下:
1import java.io.IOException;
2import java.io.InputStream;
3import java.util.List;
4import java.util.Map.Entry;
5
6import javax.ws.rs.WebApplicationException;
7import javax.ainer.ContainerRequestContext;
8import javax.ainer.ContainerRequestFilter;
9import javax.MultivaluedMap;
10import javax.Respon.Status;
11import javax.Provider;
12
13/**
14 * 拦截请求
15 */
16@Provider
17public class MyFilter implements ContainerRequestFilter {
18
19 @Override
20 public void filter(ContainerRequestContext context) throws IOException { 21
22 //打印出所有请求头
23 MultivaluedMap<String, String> map = Headers();
24 for(Entry<String, List<String>> entry : Set()){
25 String key = Key();
对话的英语26 List<String> valueList = Value();
27 String values = String();
28 System.out.println(key + ":"+values.substring(1,values.length()-1));
29 }
7 注册Jery容器所要管理的类