idea下用maven建立並搭建dubbox微服務環境專案(五)—綜合整理及總結
阿新 • • 發佈:2018-12-28
第四篇連結地址:https://blog.csdn.net/gaofengyan/article/details/85252856
今天將之前幾天做的全部串聯了起來,然後把訂單再寫一個來測試,做個總結,就差不多了。
在資料庫增加模擬資料:
新建OrderMapper.java介面:
package cn.kgc1803.smbms_user_provider.dao; import cn.kgc1803.smbms_common.pojo.Order; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface OrderMapper { /** * 查詢訂單 * @param ownerUserId * @return */ @Select("SELECT o.ID,o.OWNERUSERID,o.PRODUCTNAME,o.PRICE,o.AMOUNT\n" + "FROM smbms_order AS o \t\n" + "WHERE ownerUserId =#{ownerUserId}") @Results(id = "orderMap",value = { @Result(property = "id",column = "ID",javaType = Integer.class), @Result(property = "ownerUserId",column = "OWNERUSERID",javaType = Integer.class), @Result(property = "productName",column = "PRODUCTNAME",javaType = String.class), @Result(property = "price",column = "PRICE",javaType = Double.class), @Result(property = "amount",column = "AMOUNT",javaType = Integer.class) }) List<Order> getOrderList(Integer ownerUserId); }
修改OrderServiceImpl.java實現類:
package cn.kgc1803.smbms_user_provider.service; import cn.kgc1803.smbms_common.pojo.Order; import cn.kgc1803.smbms_common.service.OrderService; import cn.kgc1803.smbms_user_provider.dao.OrderMapper; import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType; import javax.annotation.Resource; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import java.util.ArrayList; import java.util.List; //@Produces設定輸出結果集的 資料型別 @Path("/order") @Produces(ContentType.APPLICATION_JSON_UTF_8) public class OrderServiceImpl implements OrderService { @Resource private OrderMapper orderMapper; //@Path訪問路徑 //@GET請求方式 @Path("/orderlist/{ownerUserId}") @GET public List<Order> findList(@PathParam("ownerUserId")Integer ownerUserId) { return orderMapper.getOrderList(ownerUserId); } }
OrderController.java控制層修改,增加引數:
package cn.kgc1803.smbms_user_consume.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; @Controller @RequestMapping("/order") public class OrderController { @RequestMapping("/orderlist.html") public void getOrderListJson(HttpServletResponse response,Integer ownerUserId){ response.setCharacterEncoding("UTF-8");//字元編碼處理 try { //請求輸出流 OutputStream out = response.getOutputStream(); //獲取遠端的dubbo rest資料 //請求地址 URL url = new URL("http://localhost:20888/order/orderlist/"+ownerUserId); //建立連線 URLConnection conn = url.openConnection(); //輸入流,獲取請求結果集對應的輸入流 InputStream in = conn.getInputStream(); //以陣列方式讀取資料 byte[] buf = new byte[1024]; int len = in.read(buf); while (len != -1){ //讀完為止 //迴圈讀取檔案內容 out.write(buf,0,len); len = in.read(buf); } } catch (IOException e) { e.printStackTrace(); } } }
這裡我把jQuery的版本更換了jquery-3.3.1.js,index.jsp頁面做以下修改:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2018/12/24
Time: 15:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首頁</title>
</head>
<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/jquery-3.3.1.js"></script>
<%--<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/order.js"></script>--%>
<script type="text/javascript">
function textId() {
var ownerUserId=$("#textId").val();
$.post("http://localhost:8081/order/orderlist.html","ownerUserId="+ownerUserId,returnText);
}
function returnText(orderList) {
var order= $.parseJSON(orderList);/*parseJSON函式將後端傳回來的字串轉化成物件,以便遍歷*/
var ul=$('ul');
$.each(order,function (index,item) {
ul.append('<li>'+item.id+" "+item.ownerUserId+" "+item.productName+" "+item.price+" "+item.amount+'</li>');
});
}
</script>
<body>
登陸成功,歡迎你:${session_user.userName}<br>
請輸入需要查的編號:<input type="text" id="textId">
<input type="button" value="提交" onclick="textId()"><br>
訂單列表:
<ul>
</ul>
</body>
</html>
簡述以上執行過程:前端登陸進入首頁後,在查詢蘭輸入訂單擁有者(引數:ownerUserId):
請輸入需要查的編號:<input type="text" id="textId">;
post提交後:
$.post("http://localhost:8081/order/orderlist.html","ownerUserId="+ownerUserId,returnText);
引數傳遞到後臺
public void getOrderListJson(HttpServletResponse response,Integer ownerUserId)
執行此方法
URL url = new URL("http://localhost:20888/order/orderlist/"+ownerUserId);
方法執行結束將資料返回給頁面顯示,前端通過回撥函式將後端傳回來的字串資料轉化成json物件,迴圈輸出:
var order= $.parseJSON(orderList);/*parseJSON函式將後端傳回來的字串轉化成物件,以便遍歷*/
$.each(order,function (index,item) {
ul.append('<li>'+item.id+" "+item.ownerUserId+" "+item.productName+" "+item.price+" "+item.amount+'</li>');
});
測試:
登陸頁面:
進入首頁輸入訂單號:
提交後查詢結果:
這個專案環境搭建到此就算結束了,過程還是有很多沒有做到最優的,後續可能還有很多需要補充的。先到此吧,今天還要做個spring boot搭建單體SSM框架環境的基礎。
2018-12-27更新:
採用之前的 js 與jsp分離的方式動態獲取,是將user物件儲存到session作用域,並在訂單查詢的時候將session儲存的user物件的id 取出來傳值獲取order訂單內容,具體注意細節如下:
OrderServiceImpl.java 類增加spring的註解@Service,這個註解的內容跟dubbo_user_provider.xml配置檔案釋出服務的ref物件一致。
package cn.kgc1803.smbms_user_provider.service;
import cn.kgc1803.smbms_common.pojo.Order;
import cn.kgc1803.smbms_common.service.OrderService;
import cn.kgc1803.smbms_user_provider.dao.OrderMapper;
import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import java.util.List;
//@Produces設定輸出結果集的 資料型別
@Path("/order")
@Produces(ContentType.APPLICATION_JSON_UTF_8)
@Service("orderService")
public class OrderServiceImpl implements OrderService {
@Resource
private OrderMapper orderMapper;
//@Path訪問路徑
//@GET請求方式
@Path("/orderlist/{id}")
@GET
public List<Order> findList(@PathParam("id")Integer id) {
return orderMapper.getOrderList(id);
}
}
OrderController.java 類的修改:
package cn.kgc1803.smbms_user_consume.controller;
import cn.kgc1803.smbms_common.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
@Controller
@RequestMapping("/order")
public class OrderController {
@RequestMapping("/orderlist.html")
public void getOrderListJson(HttpServletResponse response, HttpSession session){
response.setCharacterEncoding("UTF-8");//字元編碼處理
User user= (User) session.getAttribute("session_user");
try {
//請求輸出流
OutputStream out = response.getOutputStream();
//獲取遠端的dubbo rest資料
//請求地址
URL url = new URL("http://localhost:20888/order/orderlist/"+user.getId());
//建立連線
URLConnection conn = url.openConnection();
//輸入流,獲取請求結果集對應的輸入流
InputStream in = conn.getInputStream();
//以陣列方式讀取資料
byte[] buf = new byte[1024];
int len = in.read(buf);
while (len != -1){ //讀完為止
//迴圈讀取檔案內容
out.write(buf,0,len);
len = in.read(buf);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
index.jsp 修改:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2018/12/24
Time: 15:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首頁</title>
</head>
<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/order.js"></script>
<body>
登陸成功,歡迎你:${session_user.userName}<br>
訂單列表:
<ul>
</ul>
</body>
</html>
order.js:
$(function () {
$.ajax({
url:"http://localhost:8081/order/orderlist.html",
dataType:"json",
success:function (orderList) {
var ul=$('ul');
$.each(orderList,function (index,item) {
ul.append('<li>'+item.id+" "+item.ownerUserId+" "+item.productName+" "+item.price+" "+item.amount+'</li>');
});
}
});
});
好了,以上的修改經過測試沒有問題了,這幾天的搭配專案環境對初學來說也不容易了,按照這幾天的步驟來做就可以繼續寫業務程式碼了。