一、Jsonp的简介
1.什么是 JsonP?
Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。
2.什么是跨域?
示例跨域是指一个域(网站)下的文档或脚本试图去请求另一个域(网站)下的资源。
3. 什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。
- 非同源策略限制以下几种行为:
(1)Cookie、LocalStorage 和 IndexDB 无法读取;
(2) DOM 和 Js 对象无法获得;
(3)AJAX 请求不能发送;
-
常见跨域场景:
示例 - 跨域解决方案:
(1) 通过 jsonp 跨域
(2)document.domain + iframe 跨域
(3) location.hash + iframe
(4)window.name + iframe 跨域
(5) postMessage 跨域
(6)跨域资源共享(CORS)
(7)nginx 代理跨域
(8) nodejs 中间件代理跨域
(9) WebSocket 协议跨域
4.JsonP 优缺点:
优点:它不像 XMLHttpRequest 对象实现的 Ajax 请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都 可以运行,不需要 XMLHttpRequest 或ActiveX 的支持;并且在请求完毕后可以通过调用 callback 的方式回传结果。
缺点:它只支持 GET 请求而不支持 POST 等其它类型的 HTTP 请求;它
只支持跨域 HTTP 请求这种情况,不能解决不同域的两个页面之间如何进行 JavaScript 调用的问题。
二、JsonP 的使用
1.搭建跨域场景:
(1)创建两个 web 工程,名称为 jsonDemo1(8080)、jsonDemo2(9090)
(2)jsonDemo1 中提供一个 index.jsp。
(3)在 jsonDemo1 的 index.jsp 中通过 Jquery 的 Ajax 跨域请求 jsonDemo2
(4)jsonDemo2 中使用 springMVC 处理请求,返回一个 json 对象
(5)在 jsonDemo1 中将返回的结果插入到 index.jsp 中
-
Ajax 跨域请求时会出现异常:
异常
2.改变ajax请求方式:
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="/js/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function() {
$("#but").click(
function() {
$.get("/user/show", function(data) {
var str = "";
for (i = 0; i < data.length; i++) {
str += data[i].userid + " " + data[i].username
+ " " + data[i].userage + " | ";
}
$("#sp").html(str);
});
})
})
</script>
</head>
<body>
<span style="font-size: 20px" id="sp"></span>
<br />
<p>
<input type="button" value="查看" id="but" />
</p>
</body>
- 修改POM文件:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>9090</port>
</configuration>
</plugin>
</plugins>
</build>
3.改变请求的Controller:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/show")
@ResponseBody
public Object userShow(String callback) {
Users users = new Users(01,"张三",20);
Users users2 = new Users(02, "李四", 18);
Users users3 = new Users(03, "admin", 22);
List<Users> list = new ArrayList<>();
list.add(users);
list.add(users2);
list.add(users3);
// String json = JsonUtils.objectToJson(list);
// return callback+"("+json+")";
//json转换
MappingJacksonValue mjv = new MappingJacksonValue(list);
mjv.setJsonpFunction(callback);
return mjv;
}
-
效果:
8080
9090
三、HttpClient 简介
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。
四、HttpClient 应用
1. 发送 GET 请求:
1.1不带参数的:
- 修改POM文件:
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
- 编写测试代码:
private static void doGet() throws Exception {
// 创建HttpClient对象
CloseableHttpClient client = HttpClients.createDefault();
// 创建get请求对象,请求中输入url
HttpGet httpGet = new HttpGet("http://www.jd.com");
// 发送请求,返回响应
CloseableHttpResponse execute = client.execute(httpGet);
// 处理响应
// 获取响应的状态码
int code = execute.getStatusLine().getStatusCode();
// 获取响应内容
HttpEntity entity = execute.getEntity();
String str = EntityUtils.toString(entity, "utf-8");
System.out.println(code);
System.out.println(str);
// 关闭连接
client.close();
}
1.2带参数:
/**
* 带参数
*
* @throws URISyntaxException
* @throws IOException
* @throws ClientProtocolException
*/
private static void doGet02() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
// 创建一个封装URI对象。在该对象中可以带请求参数
URIBuilder uri = new URIBuilder("https://www.sogou.com");
uri.addParameter("query", "java");
// 创建一个get请求对象
HttpGet httpGet = new HttpGet(uri.build());
// 发送请求,返回响应
CloseableHttpResponse execute = client.execute(httpGet);
// 处理响应
// 获取响应的状态码
int code = execute.getStatusLine().getStatusCode();
// 获取响应内容
HttpEntity entity = execute.getEntity();
String str = EntityUtils.toString(entity, "utf-8");
System.out.println(code);
System.out.println(str);
//关闭连接
client.close();
}
- 测试:
public static void main(String[] args) throws Exception {
// TestHttpClient.doGet();
TestHttpClient.doGet02();
}
2.发送post请求:
2.1不带参数:
/**
* 不带参的post请求
*
* @throws Exception
*/
private static void doPost() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/test/post");
CloseableHttpResponse execute = client.execute(httpPost);
// 处理响应
// 获取响应的状态码
int code = execute.getStatusLine().getStatusCode();
System.out.println(code);
// 获取响应的内容
HttpEntity entity = execute.getEntity();
String str = EntityUtils.toString(entity, "utf-8");
System.out.println(str);
// 关闭连接
client.close();
}
2.2带参数:
/**
* 带参的post请求
*
* @throws Exception
*/
private static void doPost02() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/test/post/param");
// 给定参数
ArrayList<BasicNameValuePair> list = new ArrayList<>();
list.add(new BasicNameValuePair("name", "张三"));
list.add(new BasicNameValuePair("pwd", "zhangsan"));
// 将参数做字符串的转换
StringEntity entiry = new UrlEncodedFormEntity(list, "utf-8");
// 向请求中绑定参数
httpPost.setEntity(entiry);
// 处理响应
CloseableHttpResponse execute = client.execute(httpPost);
// 获取响应的状态码
int code = execute.getStatusLine().getStatusCode();
System.out.println(code);
// 获取响应的内容
HttpEntity entity = execute.getEntity();
String str = EntityUtils.toString(entity, "utf-8");
System.out.println(str);
// 关闭连接
client.close();
}
2.3带参json:
/**
* 带参json的post请求
* @throws Exception
*/
private static void doPost03() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost:8080/test/post/josn");
String json = "{\"username\":\"张三\",\"userpwd\":\"zhangsan\"}";
StringEntity entity = new StringEntity(json,ContentType.APPLICATION_JSON);
// 向请求中绑定参数
httpPost.setEntity(entity);
// 处理响应
CloseableHttpResponse execute = client.execute(httpPost);
// 获取响应的状态码
int code = execute.getStatusLine().getStatusCode();
System.out.println(code);
// 获取响应的内容
HttpEntity en = execute.getEntity();
String str = EntityUtils.toString(en, "utf-8");
System.out.println(str);
// 关闭连接
client.close();
}
2.4使用HttpClient 自定义工具类:
public class HttpClientUtil {
public static String doGet(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
String resultString = "";
CloseableHttpResponse response = null;
try {
// 创建uri
URIBuilder builder = new URIBuilder(url);
if (param != null) {
for (String key : param.keySet()) {
builder.addParameter(key, param.get(key));
}
}
URI uri = builder.build();
// 创建http GET请求
HttpGet httpGet = new HttpGet(uri);
// 执行请求
response = httpclient.execute(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
public static String doGet(String url) {
return doGet(url, null);
}
public static String doPost(String url, Map<String, String> param) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建参数列表
if (param != null) {
List<NameValuePair> paramList = new ArrayList<>();
for (String key : param.keySet()) {
paramList.add(new BasicNameValuePair(key, param.get(key)));
}
// 模拟表单
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");
httpPost.setEntity(entity);
}
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
public static String doPost(String url) {
return doPost(url, null);
}
public static String doPostJson(String url, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
}
- 测试工具类:
/**
* 测试工具类
*/
private static void httpClientUtilTest() {
String url = "http://localhost:8080/test/post/param";
HashMap<String, String> map = new HashMap<>();
map.put("name", "李四");
map.put("pwd", "lisi");
String result = HttpClientUtil.doPost(url, map);
System.out.println(result);
}
3.实战案例:
3.1需求:
(1)采用 SOA 架构项目
(2) 使用 HttpClient 调用服务
(3) 完成用户的添加与查询
-
项目架构:
示例 - 数据库:
CREATE TABLE `tb_item` (
`id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',
`title` varchar(100) NOT NULL COMMENT '商品标题',
`sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',
`price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
`num` int(10) NOT NULL COMMENT '库存数量',
`barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
`image` varchar(500) DEFAULT NULL COMMENT '商品图片',
`cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',
`created` datetime NOT NULL COMMENT '创建时间',
`updated` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `cid` (`cid`),
KEY `status` (`status`),
KEY `updated` (`updated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
3.2创建commons项目:
示例- 修改POM文件:
<dependencies>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
3.3创建 service 项目:
示例- 修改POM文件:
<dependencies>
<dependency>
<groupId>com.zlw</groupId>
<artifactId>13-httpCommens</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<!-- tomcat插件,由于子项目不一定每个都是web项目,所以该插件只是声明,并未开启 -->
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
3.4创建client项目:
示例- 修改POM文件:
<dependencies>
<dependency>
<groupId>com.zlw</groupId>
<artifactId>13-httpCommens</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<!-- tomcat插件,由于子项目不一定每个都是web项目,所以该插件只是声明,并未开启 -->
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8081</port>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
4.请求处理的项目:
- 修改POM文件:
<dependencies>
<dependency>
<groupId>com.zlw</groupId>
<artifactId>13-httpCommens</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<!-- tomcat插件,由于子项目不一定每个都是web项目,所以该插件只是声明,并未开启 -->
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
- mapper:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlw.mapper.UserMapper">
<insert id="insertUser" parameterType="com.zlw.pojo.Users">
insert into users(username,userage) values(#{username},#{userage})
</insert>
<select id="findAllUser" resultType="com.zlw.pojo.Users">
select *from users
</select>
<select id="findById" resultType="com.zlw.pojo.Users">
select *from users where userid=#{0}
</select>
</mapper>
- service:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(Users users) {
userMapper.insertUser(users);
}
@Override
public List<Users> findAll() {
return userMapper.findAllUser();
}
}
- Controller:
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("addUser")
@ResponseBody
public Object addUser(@RequestBody Users users) {
HashMap<String, Integer> map = new HashMap<>();
try {
this.userService.addUser(users);
map.put("code", 200);
} catch (Exception e) {
e.printStackTrace();
map.put("code", 500);
}
return map;
}
@RequestMapping("findAll")
@ResponseBody
public Object findAll() {
return this.userService.findAll();
}
}
5.实现业务:
5.1添加用户:
- JSP页面:
<body>
<form action="/user/addUser" method="post">
<p>
用户名:<input type="text" name="username" />
</p>
<p>
年龄:<input type="text" name="userage" />
</p>
<p>
<input type="submit" value="添加" />
</p>
</form>
<p>
<a href="/user/findUser/">查询</a>
</p>
</body>
- Controller:
@Autowired
private UserService userService;
@RequestMapping("addUser")
public String addUser(Users user) {
this.userService.addUser(user);
return "ok";
}
- service:
@Override
public void addUser(Users users) {
String json = JsonUtils.objectToJson(users);
String doPostJson = HttpClientUtil.doPostJson("http://localhost:8080/user/addUser", json);
Map<String,Integer> map = JsonUtils.jsonToPojo(doPostJson, Map.class);
Integer integer = map.get("code");
if (integer == 500) {
System.out.println("出错了!");
}else {
System.out.println("添加成功!");
}
}
5.2查询用户:
- jsp页面:
<body>
<table border="1px" align="center" width="400">
<tr>
<td>ID</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<c:forEach items="${list }" var="user">
<tr>
<td>${user.userid }</td>
<td>${user.username }</td>
<td>${user.userage}</td>
</tr>
</c:forEach>
</table>
</body>
- Controller:
@RequestMapping("findUser")
private String findAll(Model model) {
List<Users> list = this.userService.findAll();
model.addAttribute("list",list);
return "showUser";
}
- service:
@Override
public List<Users> findAll() {
String doPost = HttpClientUtil.doPost("http://localhost:8080/user/findAll");
List<Users> list = JsonUtils.jsonToList(doPost, Users.class);
return list;
}
5.3实现效果:
示例示例
网友评论