一、提供接口
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);
}