http接口的提供与调用

一、提供接口
1.1 继承HttpServlet ,重写doGet、doPost方法

public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String content= request.getParameter("content");
        if (content== null || "".equals(content) || content.length() <= 0) {
            System.out.println("http call failed,参数content不能为空");
        } else {
            out.write(content);
            System.out.println("---http call success---");
        }
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        this.doGet(request, response);
    }
}

1.2 servlet映射
在web.xml中加入servlet配置

<servlet>
		<servlet-name>TestHTTPServer</servlet-name>
		<servlet-class>com.lbd99.wms.servlet.TestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>TestHTTPServer</servlet-name>
		<url-pattern>/httpServer</url-pattern>
	</servlet-mapping>

或者在TestServlet 上加上注解@WebServlet("/httpServer")
前提是web.xml中的metadata-complete=“false”,不然注解无法生效

1.3 测试
直接访问 http://localhost:8080/wms/httpServer/content=测试

1.4 在servlet中注入spring bean
servlet中无法直接通过@Autowired注入spring bean,可以通过如下方式
先定义一个基类

public class BaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
         public void init() throws ServletException {
                 super.init();
                 WebApplicationContextUtils
                         .getWebApplicationContext(getServletContext())
                         .getAutowireCapableBeanFactory().autowireBean(this);
             }
}

继承基类

@WebServlet("/httpServer")
public class TestServlet extends BaseServlet {
    private static final long serialVersionUID = 1L;

    @Autowired
    BusAsnServiceImpl busAsnService;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String asnId = request.getParameter("asnId");
        if (asnId == null || "".equals(asnId) || asnId.length() <= 0) {
            System.out.println("http call failed,参数asnId不能为空");
        } else {
            BusAsn busAsn = busAsnService.selectById(Integer.parseInt(asnId));
            String jsonStr = JSONObject.toJSONString(busAsn);
            out.write(jsonStr);
            System.out.println("---http call success---");
        }
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        this.doGet(request, response);
    }
}

二、调用接口
HttpUtil工具类

public class HttpUtil {
	
	private static Logger logger =  LoggerFactory.getLogger(HttpUtil.class);
	
	/**
	 * post请求
	 * @param url
	 * @param params
	 * @return
	 */
	public static String doPost(String url, Map<String,String> params) {
		String result = null;
		CloseableHttpClient httpclient = null;
		CloseableHttpResponse response = null;
		try {
			httpclient = HttpClients.createDefault();
			HttpPost httpPost = new HttpPost(url);
			List <NameValuePair> nvps = new ArrayList <NameValuePair>();
			params.forEach((key,value) -> {
				nvps.add(new BasicNameValuePair(key, value));
			});
			httpPost.setEntity(new UrlEncodedFormEntity(nvps,"utf-8"));
			response = httpclient.execute(httpPost);
			int stateCode = response.getStatusLine().getStatusCode();
			if (stateCode == 200) {
				result = EntityUtils.toString(response.getEntity(), "utf-8");
			} else {
				logger.error("请求接口{}异常,请求参数:{}",url,JSONObject.toJSONString(params));
			}
			//关闭httpclient
			response.close();
			httpclient.close();
		} catch(Exception e) {
			logger.error(e.getMessage(),e);
		} finally{
			try {
				if(response != null){
					response.close();
				}
				if(httpclient != null){
					httpclient.close();
				}
			} catch (Exception e) {
				logger.error(e.getMessage(),e);
			}
		}
		
		return result;
	}
	
	/**
	 * get请求
	 * @param url
	 * @return
	 */
	public static String doGet(String url) {
		String result = null;
		CloseableHttpClient httpclient = null;
		CloseableHttpResponse response = null;
		try {
			httpclient = HttpClients.createDefault();
			HttpGet httpGet = new HttpGet(url);
			response = httpclient.execute(httpGet);
			int stateCode = response.getStatusLine().getStatusCode();
			if (stateCode == 200) {
				result = EntityUtils.toString(response.getEntity(), "utf-8");
			} else {
				logger.error("请求接口{}异常!",url);
			}
			//关闭httpclient
			response.close();
			httpclient.close();
		} catch (Exception e) {
			logger.error(e.getMessage(),e);
		} finally{
			try {
				if(response != null){
					response.close();
				}
				if(httpclient != null){
					httpclient.close();
				}
			} catch (Exception e) {
				logger.error(e.getMessage(),e);
			}
		}
		return result;
	}
}

调用

@Test
    public void testHttp() {
        String url = "http://localhost:8080/wms/httpServer?asnId=13070";
        String result = HttpUtil.doGet(url);
        System.out.println(result);
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值