精华内容
下载资源
问答
  • 被别人远程调用和自己远程调用别人接口的理解:被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ ...

    被别人远程调用和自己远程调用别人接口的理解:

    被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。

    调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ HttpURLConnection等相关的方法。

    简单的一个接口实例:

    我使用的框架是Spring mvc

    被调用的接口方法:

    1/创建Response的工具类

    packagecom.gsww.sxzz.controller.service;importjava.io.IOException;importjavax.servlet.http.HttpServletResponse;/*** 接口json格式的工具帮助类

    *@authorGuoPC

    * @date 2017-05-31

    **/

    public classResponseUtils {/*** 响应的返回json的方法

    *@paramresponse

    *@paramtext*/

    public static voidrenderJson(HttpServletResponse response,String text)

    {

    render(response,"text/json;charset=UTF-8",text);

    }/*** 设置响应相关的Header信息

    *@paramresponse

    *@paramcontentType

    *@paramtext*/

    public static voidrender(HttpServletResponse response,String contentType,String text){//设置响应的头信息,具体请参考response对象

    response.setContentType(contentType);

    response.setCharacterEncoding("utf-8");

    response.setHeader("Pragma", "No-cache");

    response.setHeader("Cache-Control", "no-cache");

    response.setDateHeader("Expires", 0);try{

    response.getWriter().write(text);

    }catch(IOException e){

    }

    }

    }

    创建实际被调用的方法:

    /*** 单点登陆接口

    *@authorGuoPC

    *@date 2017-05-031*/@Controller

    @RequestMapping("/login")public classLoginService {/*** 单点登陆接口用于校验平台发送过来的校验码

    * 请求方式为HTTP POST

    * 返回为json格式数据

    *@paramuserCode 用户登录ID

    *@paramuserPwd 用户登录密码(32位MD5值)

    *@paramappCode 应用编码(由平台端统一生成)*/@RequestMapping(value="/loginService",method =RequestMethod.POST)public voidloginService(HttpServletRequest request,HttpServletResponse response){/*使用request获取参数*/String userCode=request.getParameter("userCode");

    String userPwd=request.getParameter("userPwd");

    String appCode=request.getParameter("appCode");//创建map

    Map map=new HashMap();

    JSONObject json=null;//判断参数是否传递

    if(userCode!=null && userPwd!=null && appCode!=null){if(userCode.equals("gyn") && userPwd.equals("gyn") && appCode.equals("1")){//校验成功返回成功的参数信息

    map.put("expires_in", "7200");

    map.put("access_token", "接口成功");//转换json

    json=JSONObject.fromObject(map);

    }else{//校验失败返回成功的参数信息

    map.put("expires_in", "7100");

    map.put("access_token", "接口失败");

    json=JSONObject.fromObject(map);

    }

    }else{//校验失败返回成功的参数信息

    map.put("expires_in", "7000");

    map.put("access_token", "存在为null的参数");

    json=JSONObject.fromObject(map);

    }//返回json数据

    ResponseUtils.renderJson(response, json.toString());

    }

    }

    因为使用的是POST请求,在流量其地址栏输入会出现如下信息。请求方法不正确。

    HTTP Status 405 - Request method 'GET' not supported

    type Status report

    message Request method 'GET' not supported

    description The specified HTTP method is not allowed for the requested resource.

    Apache Tomcat/8.5.9

    我们继续写请求的实例:

    /**

    * 单点登陆接口

    *

    * @author GuoPC

    * @date 2017-05-031

    */

    public class LoginService {

    public static void main(String[] args) throws IOException {

    //创建访问路径

    URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");

    //打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    //设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE */

    conn.setRequestMethod("POST");

    //将此 URLConnection 的 doInput 字段的值设置为指定的值。

    //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);

    //关键点:如果conn.setDoOutput(true)请求方法必须为POST

    //将此 URLConnection 的 doOutput 字段的值设置为指定的值。

    //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    conn.setDoOutput(true);

    conn.setInstanceFollowRedirects(true);

    /*conn.setRequestProperty("Accept", "application/json");*/

    /*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/

    conn.setRequestProperty("content-type", "text/json");

    conn.connect();

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();

    //获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=new InputStreamReader(is);

    BufferedReader br=new BufferedReader(isr);

    String line=null;

    //获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){

    System.out.println(line);

    }

    br.close();

    isr.close();

    is.close();

    }

    }

    测试结果:

    4b3f7582b37e18098e3e67756f757ab7.png

    在补充下GET方式的请求:

    /*** URL类封装的访问接口连接

    *@returnStringBuffer

    *@throwsIOException*/

    public StringBuffer sendURLPost() throwsIOException{//创建访问路径

    URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");//打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();//设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE*/conn.setRequestMethod("POST");//将此 URLConnection 的 doInput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);//关键点:如果conn.setDoOutput(true)请求方法必须为POST//将此 URLConnection 的 doOutput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    conn.setDoOutput(true);

    conn.setInstanceFollowRedirects(true);

    conn.setRequestProperty("Accept", "text/json");/*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/conn.setRequestProperty("content-type", "text/json");

    conn.connect();

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();//获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=newInputStreamReader(is);

    BufferedReader br=newBufferedReader(isr);

    String line=null;//创建返回对象,必须使用new创建对象初始化

    StringBuffer sb = newStringBuffer();//获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){//获取返回的值

    sb.append(line);

    }

    br.close();

    isr.close();

    is.close();returnsb;

    }/*** URL类封装的访问接口连接

    *@returnStringBuffer

    *@throwsIOException*/

    public StringBuffer sendURLGet() throwsIOException{//创建访问路径

    URL url=new URL(this.http+"://"+this.host+":"+this.port+"/"+this.url+"?"+this.params);//打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();//设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE*/conn.setRequestMethod("GET");//将此 URLConnection 的 doInput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);//关键点:如果conn.setDoOutput(true)请求方法必须为POST//将此 URLConnection 的 doOutput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    /*conn.setDoOutput(true);*/conn.setInstanceFollowRedirects(true);

    conn.setRequestProperty("Accept", "text/json");/*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/conn.setRequestProperty("content-type", "text/json");

    conn.connect();/*OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();*/

    //获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=newInputStreamReader(is);

    BufferedReader br=newBufferedReader(isr);

    String line=null;//创建返回对象,必须使用new创建对象初始化

    StringBuffer sb = newStringBuffer();//获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){//获取返回的值

    sb.append(line);

    }

    br.close();

    isr.close();

    is.close();returnsb;

    }

    使用get方式请求是不可设置下面选项为true:

    conn.setDoOutput(true);

    同样下面的对象也不可以使用

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();

    setDoOutput是设置请求的输出流为true。理解下get方式请求就明白了,get只是获取连接的数据信息,不需要像对方输出数据信息。只需要获取请求方的输入数据就可以了。

    Get方式的输出结果:

    0cd151578bf4548a7d2118e160d97938.png

    总结:

    此列接口的实际意义就是:Request和Response连个对象的使用,这部分要是学的够精通,作起来还是很好理解的,在基础一些就是使用到了Socket套接字的内容。URL和HttpURLConnection可能就是封装了Socket。

    这只是个人理解,如果有大牛看出错误,还请多多指点。

    展开全文
  • 被别人远程调用和自己远程调用别人接口的理解:被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ ...

    被别人远程调用和自己远程调用别人接口的理解:

    被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。

    调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ HttpURLConnection等相关的方法。

    简单的一个接口实例:

    我使用的框架是Spring mvc

    被调用的接口方法:

    1/创建Response的工具类

    packagecom.gsww.sxzz.controller.service;importjava.io.IOException;importjavax.servlet.http.HttpServletResponse;/*** 接口json格式的工具帮助类

    *@authorGuoPC

    * @date 2017-05-31

    **/

    public classResponseUtils {/*** 响应的返回json的方法

    *@paramresponse

    *@paramtext*/

    public static voidrenderJson(HttpServletResponse response,String text)

    {

    render(response,"text/json;charset=UTF-8",text);

    }/*** 设置响应相关的Header信息

    *@paramresponse

    *@paramcontentType

    *@paramtext*/

    public static voidrender(HttpServletResponse response,String contentType,String text){//设置响应的头信息,具体请参考response对象

    response.setContentType(contentType);

    response.setCharacterEncoding("utf-8");

    response.setHeader("Pragma", "No-cache");

    response.setHeader("Cache-Control", "no-cache");

    response.setDateHeader("Expires", 0);try{

    response.getWriter().write(text);

    }catch(IOException e){

    }

    }

    }

    创建实际被调用的方法:

    /*** 单点登陆接口

    *@authorGuoPC

    *@date 2017-05-031*/@Controller

    @RequestMapping("/login")public classLoginService {/*** 单点登陆接口用于校验平台发送过来的校验码

    * 请求方式为HTTP POST

    * 返回为json格式数据

    *@paramuserCode 用户登录ID

    *@paramuserPwd 用户登录密码(32位MD5值)

    *@paramappCode 应用编码(由平台端统一生成)*/@RequestMapping(value="/loginService",method =RequestMethod.POST)public voidloginService(HttpServletRequest request,HttpServletResponse response){/*使用request获取参数*/String userCode=request.getParameter("userCode");

    String userPwd=request.getParameter("userPwd");

    String appCode=request.getParameter("appCode");//创建map

    Map map=new HashMap();

    JSONObject json=null;//判断参数是否传递

    if(userCode!=null && userPwd!=null && appCode!=null){if(userCode.equals("gyn") && userPwd.equals("gyn") && appCode.equals("1")){//校验成功返回成功的参数信息

    map.put("expires_in", "7200");

    map.put("access_token", "接口成功");//转换json

    json=JSONObject.fromObject(map);

    }else{//校验失败返回成功的参数信息

    map.put("expires_in", "7100");

    map.put("access_token", "接口失败");

    json=JSONObject.fromObject(map);

    }

    }else{//校验失败返回成功的参数信息

    map.put("expires_in", "7000");

    map.put("access_token", "存在为null的参数");

    json=JSONObject.fromObject(map);

    }//返回json数据

    ResponseUtils.renderJson(response, json.toString());

    }

    }

    因为使用的是POST请求,在流量其地址栏输入会出现如下信息。请求方法不正确。

    HTTP Status 405 - Request method 'GET' not supported

    type Status report

    message Request method 'GET' not supported

    description The specified HTTP method is not allowed for the requested resource.

    Apache Tomcat/8.5.9

    我们继续写请求的实例:

    /**

    * 单点登陆接口

    *

    * @author GuoPC

    * @date 2017-05-031

    */

    public class LoginService {

    public static void main(String[] args) throws IOException {

    //创建访问路径

    URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");

    //打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    //设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE */

    conn.setRequestMethod("POST");

    //将此 URLConnection 的 doInput 字段的值设置为指定的值。

    //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);

    //关键点:如果conn.setDoOutput(true)请求方法必须为POST

    //将此 URLConnection 的 doOutput 字段的值设置为指定的值。

    //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    conn.setDoOutput(true);

    conn.setInstanceFollowRedirects(true);

    /*conn.setRequestProperty("Accept", "application/json");*/

    /*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/

    conn.setRequestProperty("content-type", "text/json");

    conn.connect();

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();

    //获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=new InputStreamReader(is);

    BufferedReader br=new BufferedReader(isr);

    String line=null;

    //获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){

    System.out.println(line);

    }

    br.close();

    isr.close();

    is.close();

    }

    }

    测试结果:

    4b3f7582b37e18098e3e67756f757ab7.png

    在补充下GET方式的请求:

    /*** URL类封装的访问接口连接

    *@returnStringBuffer

    *@throwsIOException*/

    public StringBuffer sendURLPost() throwsIOException{//创建访问路径

    URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");//打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();//设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE*/conn.setRequestMethod("POST");//将此 URLConnection 的 doInput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);//关键点:如果conn.setDoOutput(true)请求方法必须为POST//将此 URLConnection 的 doOutput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    conn.setDoOutput(true);

    conn.setInstanceFollowRedirects(true);

    conn.setRequestProperty("Accept", "text/json");/*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/conn.setRequestProperty("content-type", "text/json");

    conn.connect();

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();//获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=newInputStreamReader(is);

    BufferedReader br=newBufferedReader(isr);

    String line=null;//创建返回对象,必须使用new创建对象初始化

    StringBuffer sb = newStringBuffer();//获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){//获取返回的值

    sb.append(line);

    }

    br.close();

    isr.close();

    is.close();returnsb;

    }/*** URL类封装的访问接口连接

    *@returnStringBuffer

    *@throwsIOException*/

    public StringBuffer sendURLGet() throwsIOException{//创建访问路径

    URL url=new URL(this.http+"://"+this.host+":"+this.port+"/"+this.url+"?"+this.params);//打开访问路径

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();//设置访问的方式如下

    /*•GET 常用:在只是获取数据信息时使用

    •POST 常用:在需要传递信息时使用

    •HEAD

    •OPTIONS

    •PUT

    •DELETE

    •TRACE*/conn.setRequestMethod("GET");//将此 URLConnection 的 doInput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。

    conn.setDoInput(true);//关键点:如果conn.setDoOutput(true)请求方法必须为POST//将此 URLConnection 的 doOutput 字段的值设置为指定的值。//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。

    /*conn.setDoOutput(true);*/conn.setInstanceFollowRedirects(true);

    conn.setRequestProperty("Accept", "text/json");/*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。

    注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。

    参数:

    key - 用于识别请求的关键字(例如," accept")。

    value - 与该键关联的值。*/conn.setRequestProperty("content-type", "text/json");

    conn.connect();/*OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();*/

    //获取连接的输入流信息

    InputStream is=conn.getInputStream();

    InputStreamReader isr=newInputStreamReader(is);

    BufferedReader br=newBufferedReader(isr);

    String line=null;//创建返回对象,必须使用new创建对象初始化

    StringBuffer sb = newStringBuffer();//获取得到输入流,并打印到控制台

    while((line=br.readLine())!=null){//获取返回的值

    sb.append(line);

    }

    br.close();

    isr.close();

    is.close();returnsb;

    }

    使用get方式请求是不可设置下面选项为true:

    conn.setDoOutput(true);

    同样下面的对象也不可以使用

    OutputStream os=conn.getOutputStream();

    os.flush();

    os.close();

    setDoOutput是设置请求的输出流为true。理解下get方式请求就明白了,get只是获取连接的数据信息,不需要像对方输出数据信息。只需要获取请求方的输入数据就可以了。

    Get方式的输出结果:

    0cd151578bf4548a7d2118e160d97938.png

    总结:

    此列接口的实际意义就是:Request和Response连个对象的使用,这部分要是学的够精通,作起来还是很好理解的,在基础一些就是使用到了Socket套接字的内容。URL和HttpURLConnection可能就是封装了Socket。

    这只是个人理解,如果有大牛看出错误,还请多多指点。

    展开全文
  • 被别人远程调用和自己远程调用别人接口的理解: 被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。 调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ ...

    被别人远程调用和自己远程调用别人接口的理解:

    被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径。

    调用别人的接口:本质时一个Request请求,实际要使用到javax.net.*包里的URL/ HttpURLConnection等相关的方法。

    简单的一个接口实例:

    我使用的框架是Spring mvc

    被调用的接口方法:

    1/创建Response的工具类

    package com.gsww.sxzz.controller.service;
    
     
    
    import java.io.IOException;
    
     
    
    import javax.servlet.http.HttpServletResponse;
    
     
    
    /**
    
     * 接口json格式的工具帮助类
    
     * @author GuoPC
    
     * @date 2017-05-31
    
     *
    
     */
    
    public class ResponseUtils {
    
            
    
             /**
    
              * 响应的返回json的方法
    
              * @param response
    
              * @param text
    
              */
    
             public static void renderJson(HttpServletResponse response,String text)
    
             {
    
                      
    
                       render(response,"text/json;charset=UTF-8",text);
    
             }
    
             /**
    
              * 设置响应相关的Header信息
    
              * @param response
    
              * @param contentType
    
              * @param text
    
              */
    
             public static void render(HttpServletResponse response,String contentType,String text){
    
                       //设置响应的头信息,具体请参考response对象
    
                       response.setContentType(contentType);
    
                       response.setCharacterEncoding("utf-8");
    
                       response.setHeader("Pragma", "No-cache");
    
                       response.setHeader("Cache-Control", "no-cache");
    
                       response.setDateHeader("Expires", 0);
    
                      
    
                       try{
    
                                response.getWriter().write(text);
    
                       }catch(IOException e){
    
                               
    
                       }
    
             }
    
            
    
    }

     

     

    创建实际被调用的方法:

    /**
    
     * 单点登陆接口
    
     * @author GuoPC
    
     *@date 2017-05-031
    
     */
    
     
    
    @Controller
    
    @RequestMapping("/login")
    
    public class LoginService {
    
      
    
      
    
      
    
       /**
    
        * 单点登陆接口用于校验平台发送过来的校验码
    
        * 请求方式为HTTP POST
    
        * 返回为json格式数据
    
        * @param userCode 用户登录ID
    
        * @param userPwd 用户登录密码(32位MD5值)
    
        * @param appCode 应用编码(由平台端统一生成)
    
        */
    
       @RequestMapping(value="/loginService",method = RequestMethod.POST)
    
       public void loginService(HttpServletRequest request,HttpServletResponse response){
    
          /*使用request获取参数*/
    
          String userCode=request.getParameter("userCode");
    
          String userPwd=request.getParameter("userPwd");
    
          String appCode=request.getParameter("appCode");
    
          //创建map
    
                Map<String,String> map=new HashMap<String,String>();
    
                JSONObject  json=null;
    
          //判断参数是否传递
    
          if(userCode!=null && userPwd!=null && appCode!=null){
    
         
    
          if(userCode.equals("gyn") && userPwd.equals("gyn") && appCode.equals("1")){
    
         
    
             //校验成功返回成功的参数信息
    
             map.put("expires_in", "7200");
    
             map.put("access_token", "接口成功");
    
             //转换json
    
               json=JSONObject.fromObject(map);
    
            
    
          }else{
    
             //校验失败返回成功的参数信息
    
             map.put("expires_in", "7100");
    
             map.put("access_token", "接口失败");
    
               json=JSONObject.fromObject(map);
    
          }
    
          }else{
    
             //校验失败返回成功的参数信息
    
             map.put("expires_in", "7000");
    
             map.put("access_token", "存在为null的参数");
    
             json=JSONObject.fromObject(map);
    
          }
    
          //返回json数据
    
          ResponseUtils.renderJson(response, json.toString());
    
      
    
       }
    
    }

     

     

    因为使用的是POST请求,在流量其地址栏输入会出现如下信息。请求方法不正确。

    HTTP Status 405 - Request method 'GET' not supported

    type Status report

    message Request method 'GET' not supported

    description The specified HTTP method is not allowed for the requested resource.


    Apache Tomcat/8.5.9

    我们继续写请求的实例:

    /**
    
     * 单点登陆接口
    
     *
    
     * @author GuoPC
    
     * @date 2017-05-031
    
     */
    
     
    
    public class LoginService {
    
     
    
       public static void main(String[] args) throws IOException {  
    
          //创建访问路径
    
          URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");
    
          //打开访问路径
    
          HttpURLConnection conn=(HttpURLConnection)url.openConnection();
    
          //设置访问的方式如下
    
          /*•GET 常用:在只是获取数据信息时使用
    
          •POST 常用:在需要传递信息时使用
    
          •HEAD
    
          •OPTIONS
    
          •PUT
    
          •DELETE
    
          •TRACE */
    
          conn.setRequestMethod("POST");
    
          //将此 URLConnection 的 doInput 字段的值设置为指定的值。
    
          //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
    
          conn.setDoInput(true);
    
          //关键点:如果conn.setDoOutput(true)请求方法必须为POST
    
          //将此 URLConnection 的 doOutput 字段的值设置为指定的值。
    
          //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
    
          conn.setDoOutput(true);
    
          conn.setInstanceFollowRedirects(true);
    
          /*conn.setRequestProperty("Accept", "application/json");*/
    
          /*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。
    
          注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
    
     
    
          参数:
    
          key - 用于识别请求的关键字(例如," accept")。
    
          value - 与该键关联的值。*/
    
          conn.setRequestProperty("content-type", "text/json");
    
          conn.connect();
    
         
    
          OutputStream os=conn.getOutputStream();
    
         
    
          os.flush();
    
          os.close();
    
          //获取连接的输入流信息
    
          InputStream is=conn.getInputStream();
    
          InputStreamReader isr=new InputStreamReader(is);
    
          BufferedReader br=new BufferedReader(isr);
    
         
    
          String line=null;
    
          //获取得到输入流,并打印到控制台
    
          while((line=br.readLine())!=null){
    
             System.out.println(line);
    
          }
    
          br.close();
    
          isr.close();
    
          is.close();
    
         
    
       }
    
     
    
    }
    

      

     

    测试结果:

     

    在补充下GET方式的请求:

    /**
             * URL类封装的访问接口连接
             * @return StringBuffer
             * @throws IOException
             */
            public StringBuffer  sendURLPost() throws IOException{
                //创建访问路径
                URL url=new URL("http://127.0.0.1:8080/sxzz/login/loginService?userCode=gyn&userPwd=gyn&appCode=1");
                //打开访问路径
                HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                //设置访问的方式如下
                /*•GET 常用:在只是获取数据信息时使用
                •POST 常用:在需要传递信息时使用
                •HEAD 
                •OPTIONS 
                •PUT 
                •DELETE 
                •TRACE */
                conn.setRequestMethod("POST");
                //将此 URLConnection 的 doInput 字段的值设置为指定的值。
                //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
                conn.setDoInput(true);
                //关键点:如果conn.setDoOutput(true)请求方法必须为POST
                //将此 URLConnection 的 doOutput 字段的值设置为指定的值。
                //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
                conn.setDoOutput(true);
                conn.setInstanceFollowRedirects(true);
                conn.setRequestProperty("Accept", "text/json");
                /*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。
                注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
                参数:
                key - 用于识别请求的关键字(例如," accept")。
                value - 与该键关联的值。*/
                conn.setRequestProperty("content-type", "text/json");
                conn.connect();
                
                OutputStream os=conn.getOutputStream();
                
                os.flush();
                os.close();
                //获取连接的输入流信息
                InputStream is=conn.getInputStream();
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                
                String line=null;
                //创建返回对象,必须使用new创建对象初始化
                StringBuffer sb = new StringBuffer();
                //获取得到输入流,并打印到控制台
                while((line=br.readLine())!=null){
                    //获取返回的值
                    sb.append(line);
                }
                
                br.close();
                isr.close();
                is.close();
                return sb;
            }
            
            
            /**
             * URL类封装的访问接口连接
             * @return StringBuffer
             * @throws IOException
             */
            public StringBuffer  sendURLGet() throws IOException{
                //创建访问路径
                URL url=new URL(this.http+"://"+this.host+":"+this.port+"/"+this.url+"?"+this.params);
                //打开访问路径
                HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                //设置访问的方式如下
                /*•GET 常用:在只是获取数据信息时使用
                •POST 常用:在需要传递信息时使用
                •HEAD 
                •OPTIONS 
                •PUT 
                •DELETE 
                •TRACE */
                conn.setRequestMethod("GET");
                //将此 URLConnection 的 doInput 字段的值设置为指定的值。
                //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
                conn.setDoInput(true);
                //关键点:如果conn.setDoOutput(true)请求方法必须为POST
                //将此 URLConnection 的 doOutput 字段的值设置为指定的值。
                //URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
                /*conn.setDoOutput(true);*/
                conn.setInstanceFollowRedirects(true);
                conn.setRequestProperty("Accept", "text/json");
                /*设置一般请求属性。如果已存在具有该关键字的属性,则用新值改写其值。
                注:HTTP 要求所有能够合法拥有多个具有相同键的实例的请求属性,使用以逗号分隔的列表语法,这样可实现将多个属性添加到一个属性中。
                参数:
                key - 用于识别请求的关键字(例如," accept")。
                value - 与该键关联的值。*/
                conn.setRequestProperty("content-type", "text/json");
                conn.connect();
                
                /*OutputStream os=conn.getOutputStream();
                
                os.flush();
                os.close();*/
                
                //获取连接的输入流信息
                InputStream is=conn.getInputStream();
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                
                String line=null;
                //创建返回对象,必须使用new创建对象初始化
                StringBuffer sb = new StringBuffer();
                //获取得到输入流,并打印到控制台
                while((line=br.readLine())!=null){
                    //获取返回的值
                    sb.append(line);
                }
                
                br.close();
                isr.close();
                is.close();
                
                return sb;
            }

    使用get方式请求是不可设置下面选项为true:

    conn.setDoOutput(true);

    同样下面的对象也不可以使用

    OutputStream os=conn.getOutputStream();

             os.flush();

             os.close();

    setDoOutput是设置请求的输出流为true。理解下get方式请求就明白了,get只是获取连接的数据信息,不需要像对方输出数据信息。只需要获取请求方的输入数据就可以了。

    Get方式的输出结果:

    总结:

    此列接口的实际意义就是:Request和Response连个对象的使用,这部分要是学的够精通,作起来还是很好理解的,在基础一些就是使用到了Socket套接字的内容。URL和HttpURLConnection可能就是封装了Socket。

    这只是个人理解,如果有大牛看出错误,还请多多指点。

     

    转载于:https://www.cnblogs.com/gynbk/p/6925494.html

    展开全文
  • java.rmi包中提供了一个Remote接口,它是一个标记/标记接口,它与远程方法invocation...创建一个远程接口-创建一个接口,该接口扩展了属于该程序包的预定义接口Remote,或者使用需要进行远程处理的类来实现Remote...

    java.rmi包中提供了一个Remote接口,它是一个标记/标记接口,它与远程方法invocation(RMI)一起使用。

    RMI是一种允许驻留在一个系统(JVM)中的对象访问/调用在另一个JVM上运行的对象的机制。

    作为标记接口,要标记一个远程类的对象,您需要实现此接口。

    创建一个远程接口-创建一个接口,该接口扩展了属于该程序包的预定义接口Remote,或者使用需要进行远程处理的类来实现Remote接口。

    声明客户端可以在此接口中调用的所有业务方法。

    由于在远程调用期间可能会出现网络问题,因此可能会发生一个名为RemoteException的异常。丢它。

    示例import java.rmi.Remote;

    import java.rmi.RemoteException;

    //为我们的应用程序创建远程类

    public class RemoteExample implements Remote {

    }

    Or,

    import java.rmi.Remote;

    import java.rmi.RemoteException;

    //为我们的应用程序创建远程接口

    public interface Hello extends Remote {

    void printMsg() throws RemoteException;

    }

    展开全文
  • 凭借java跨平台优势,用EJB技术部署分布式系统可以不限于特定平台。EJB (EnterpriseJavaBean)是J2EE(javaEE)一部分,定义了一个用于开发基于组件企业多重应用程序标准。其特点包括网络服务支持和...
  • 既然这篇文章用的是nodejs和Java访问远程服务器的服务,那么咱们先用另一门编程语言,SAP的ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧。 这是我用ABAP编程语言实现服务的类:ZCL_DIS_HTTP_HANDLER ...
  • 本篇文章给大家带来内容是关于浅析nodejs和Java访问远程服务器服务,有一定参考价值,有需要朋友可以参考一下,希望对你有所帮助。既然这篇文章用是nodejs和Java访问远程服务器服务,那么咱们先用另一门...
  • Java中,只要一个extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定服务。JavaDoc描述: Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程1. RMI...
  • java代码里访问restful服务,可以使用apacheHttpClient。 同时在spring-data框架中提供RestTemplate可用于在应用中调用rest服务,它简化了与http服务通信方式,统一了RESTful标准,封装了http链接,只...
  • Java实现远程访问(RMI-Naming) 1,编写服务器端接口 新建项目:ITest,编写接口IServer ,有几点有求: (1)接口必须实现Remote (2)接口方法必须抛出异常RemoteException package cn.sun.server;...
  • JDK提供了供我们访问url获得数据的类,核心类主要是URL,URLConnection等(详见JDK API) 下面以XML形式实现两者通信 Servlet端发送信息: [code="java"] protected void doGet(HttpServletRequest req...
  • 现在最简单就是用eclipse把wsdl生成java客户端代码,然后直接调用1,直接AXIS调用远程的web service我觉得这种方法比较适合那些高手,他们能直接看懂XML格式WSDL文件,我自己是看不懂,尤其我不是专门搞这行,...
  • 创建远程接口远程接口中声明了可以被客户程序访问的远程方法。只要一个继承了java.rmi.Remote接口,该对象才能成为远程对象,对象中指定方法才能被远程调用。2.实现远程接口3.生成存根(Stub)这是运行前截图:A...
  • Java RMI远程对象调用

    2017-04-26 22:35:33
    RMI调用RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个extends了java.rmi.Remote接口,即可成为存在于服务器端远程对象,供客户端访问并提供一定...只有在“远程接口”(扩展 java.rmi.Remote
  • 将要上传文件添加到File数组中,map中还是put file package com.chuangqi.AAATest; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Console; import cn.hutool.http.Header; import ...
  • Spring提供用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时开发难度。目前,Spring提供对下面四种远程访问技术支持: 远程方法调用(RMI)。通过使用...
  • 然后a项目中某个功能需要调用b项目的接口去完成一些数据同步和查询,并且b项目中还要做到一个ip白名单限制,只有规定ip才能访问,所以需要在a项目中编写一个远程访问类,下面就采用了URLConnection和...
  • RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个extends了java.rmi.Remote接口,即可成为存在于服务器端远程对象,供客户端访问并...只有在“远程接口”(扩展 java.rmi.Remote 接口)中
  • Java中,只要一个extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定服务。JavaDoc描述:Remote接口用于标识其方法可以从非本地虚拟机上调用的接口。任何远程对象都...
  • RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个extends了java.rmi.Remote接口,即可成为存在于服务器端远程对象,供客户端访问并提供...只有在“远程接口”(扩展 java.rmi.Remote 接口)中指

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 474
精华内容 189
关键字:

java访问远程接口的类

java 订阅