企业中代码维护
相信你写过大一点的项目的时候,各个目录下总是有各种各样的文件,实体类、业务层、控制返回层、数据库调用层…等等,这些文件如果很多,并且是多个模块之间,那就两个字,无解
既然它业务有很多种类型,分模块,我们代码也分模块就完事了
如何分模块
搜索模块 一个tomcat端口20001
购买模块 一个tomcat端口20002
用户模块 一个tomcat端口20003
我们概念上分了多个模块,实际如何体现?:

如何创建多模块?
很简单,但是这个问题可以拓展着说,所以请看我的另一篇:(暂未整理)
多个服务器之间数据传递
首先思考下,项目与项目之间有哪些除了技术以外的不同之处?
- 服务器
- 开发语言
- 操作系统
我们如何在接口的调用中做到无需考虑上面的兼容问题?
可以用 HttpClient 或者 RestTemplate
这两者的区别就是,httpclient是不属于spring维护的,所以用spring框架,导入相对麻烦。但是resttemplate,从名字就能看出来是spring系列的东西,没错,这个是spring集合好的工具,如果用这个将方便一些。
HttpClient:
get请求
预计效果:
通过代码的形式访问浏览器上的内容
具体实现:
pom:
1 2 3 4 5
| <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.4</version> </dependency>
|
HP01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| package com.http_client;
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;
import javax.swing.text.html.parser.Entity; import java.io.IOException;
public class HP01 { public static void main(String[] args) throws IOException {
CloseableHttpClient aDefault = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://lsbd.fun");
CloseableHttpResponse execute = aDefault.execute(httpGet);
System.out.println(execute.getStatusLine());
if (execute.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = execute.getEntity(); String s = EntityUtils.toString(entity, "utf-8"); System.out.println(s); } execute.close(); aDefault.close(); } }
|
运行效果:

上面的例子是get请求的但是没有参数,来个有参数的:
get请求带参数
预期效果:
通过java代码访问百度,并且通过向百度的搜索引擎传递参数,接收查询返回数据
具体实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package com.http_client;
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;
import java.io.IOException; import java.net.URI; import java.net.URISyntaxException;
public class HP02 { public static void main(String[] args) throws IOException, URISyntaxException {
CloseableHttpClient aDefault = HttpClients.createDefault();
URI build = new URIBuilder("http://www.baidu.com/s").setParameter("wd", "java").build();
HttpGet httpGet = new HttpGet(build);
CloseableHttpResponse execute = aDefault.execute(httpGet);
if (execute.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = execute.getEntity(); String s = EntityUtils.toString(entity, "utf-8"); System.out.println(s); } execute.close(); aDefault.close(); } }
|
运行效果:

post请求
预期效果:
发送post请求,使我们的请求被成功响应,因为正规的网站是不允许用技术直接将网站源码爬取下来的,所以我们要伪装起来才可以接收响应,也就是反爬虫
具体实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package com.http_client;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils;
public class DoPOST {
public static void main(String[] args) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://www.oschina.net/");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(content);
}
} finally {
if (response != null) {
response.close();
}
httpclient.close();
}
}
}
|
运行效果:

post带参数请求:
预期效果:
将自己封装好的实体类,通过我们的特殊实现提交到目标服务器上
具体实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| package com.http_client;
import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils;
import java.util.ArrayList; import java.util.List;
public class DoPOSTParam {
public static void main(String[] args) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://www.oschina.net/search");
List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
parameters.add(new BasicNameValuePair("scope", "project"));
parameters.add(new BasicNameValuePair("q", "java"));
parameters.add(new BasicNameValuePair("fromerr", "8bDnUWwC"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
httpPost.setEntity(formEntity);
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println(content);
}
} finally {
if (response != null) {
response.close();
}
httpclient.close();
}
}
}
|
运行效果:
