javascript
Spring Boot入门(9)网页版计算器
介紹
??在寫了前八篇Spring Boot項目的介紹文章后,我們已經初步熟悉了利用Spring Boot來做Web應用和數據庫的使用方法了,但是這些僅僅是官方介紹的一個例子而已。
??本次分享將介紹筆者自己的一個項目:網頁版計算器,以這兩篇博客為基礎: Java之調用Python代碼 和 Spring Boot入門(6)前端接受后臺傳參。因為在Java中并沒有類似于Python的eval()函數的功能,所以,為了避免自己寫一個計算數學表達式的java代碼,我們的解決方法是:用Java調用Python代碼來實現。
??話不多說,直接上項目!
項目
??網頁版計算器的整個項目結構如下圖:
??Expression.java為實體類,用于頁面中表單提交的數學表達式的處理,其代碼如下: package com.hello.operation.Controller;public class Expression {private String expr;public String getExpr() {return expr;}public void setExpr(String expr) {this.expr = expr;}}
??控制器文件ExpressionController.java的代碼如下:
package com.hello.operation.Controller;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping;import java.util.Map; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStreamReader;@Controllerpublic class ExpressionController {@GetMapping("/mathoper")public String greetingForm(Model model) {model.addAttribute("expression", new Expression());return "operation";}@PostMapping("/mathoper")public String greetingSubmit(@ModelAttribute Expression expression, Map<String, Object> map) throws Exception {System.out.println(expression.getExpr());// 定義傳入shell腳本的參數,將參數放入字符串數組里String expr = expression.getExpr();String file_path = "D://eval.py";String command = String.format("python %s %s", file_path, expr);// 執行CMD命令System.out.println("\nExecuting python script file now ......");Process pcs = Runtime.getRuntime().exec(command);pcs.waitFor();// 定義shell返回值String result = null;// 獲取shell返回流BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());// 字符流轉換字節流BufferedReader br = new BufferedReader(new InputStreamReader(in));// 這里也可以輸出文本日志String lineStr = null;while ((lineStr = br.readLine()) != null) {result = lineStr;}// 關閉輸入流br.close();in.close();System.out.println(result);if(result.indexOf("Error") == -1)map.put("answer", "The answer is "+result);elsemap.put("answer", "<mark>"+result+"</mark>");return "operation";}}在該代碼中,調用了D盤下的eval.py來處理網頁表達提交的數學表達式。Java提供的runtime環境可以運行eval.py文件,并獲取CMD中的輸出結果,即為計算結果,并將其通過Map方式返回前端。eval.py的代碼如下:
import sys import mathoper = sys.argv[1]try:print(eval(oper)) except Exception as e:print('Error: ', end='')print(e)代碼處理十分簡潔,并引入math模塊,可以處理復雜的數學運算。
??接著是視圖文件operation.html,其代碼如下:
??整個項目的結構就是這樣。
運行及測試
??啟動Spring Boot項目,并在瀏覽器中輸入http://localhost:8080/mathoper ,頁面顯示如下:
??在輸入框中輸入(1+2)*3/4,點擊“Show Answer”按鈕,結果如下:
??當然也可以處理更加復雜的數學表達式,但是要符合Python的語法,如下圖:
??當我們表達式出錯時,也會提出Python的錯誤處理情況,如下圖:
結束語
??本次項目的Github地址為: https://github.com/percent4/MathOperation , 歡迎大家參考~~接下來還會繼續更新更多關于Spring Boot方面的內容,歡迎大家交流~
總結
以上是生活随笔為你收集整理的Spring Boot入门(9)网页版计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 印度孟买机器人餐厅_印度孟买自动化展:该
- 下一篇: nacos 公共_SpringCloud