2017年1月22日 星期日

JAVA-Spring MVC 入門初體驗 ( 三 )_註記

上一篇提到:JAVA-Spring MVC 入門初體驗 ( 二 )_說明

此篇提到的是:註記
不僅簡化許多功能
更能重於開發



以下整理出比較常用幾點

@Controllel將此 Controller 註冊到 Spring MVC 內
@RequestMapping指定處理哪些 URL 請求
@RequestBody可讀取 Request 數據
@ResponeseBody可返回 ResponeseBody 參數
@ModelAttribute讀取模型化數據
@RequestParam讀取請求參數的變數
@PathVariable
@ExceptionHandler
@ControllerAdvice


2017年1月21日 星期六

JAVA-Spring MVC 入門初體驗 ( 二 )_說明

這章節我們延續上一章節:JAVA-Spring MVC 入門初體驗 ( 一 )_流程
我們既然這樣分類
一定有他的用意

以下說明可以配合上章節的流程圖

首先

Web.xml
1 . 最主要是用來攔截、過濾 URL 帶來的資料
2 . 遇到以上狀態要就往指定目錄 ( mvc-config.xml ) 處理
3 . 定義初始歡迎頁面、如果遇到  404 狀態要顯示的頁面

Mvc-config.xml
1 . 整合所有專案資源,包括:Controller、JSP...等。
2 . MVC 註記功能設定

Controller.java
1 . 配置 URL 所要做的動作,比如:讀取輸入資料並反饋...等

View.jsp
1 . 將一些預載設定放置的靜態網頁

將以上做一的簡單的整理
1 . Web.xml 先收到請求,然後交給 Mvc-config.xml 處理
2 . 接下來都是由 Mvc-config.xml 進行中控
3 . 並且在 Controller.java 設定的內容
4 . 如果有調用到 Jsp ,則會去指定目錄下找指定的檔案


參考資料: Spring MVC 配置文件 web.xml文件详解
歡迎轉載,請註明出處。

JAVA-Spring MVC 入門初體驗 ( 一 )_流程

Spring mvc 是一種架構

能夠更確實分類您要的應用
我們就拿生活中的例子比喻 :
衣物就歸放於衣櫥內
鞋子就歸放於鞋櫃內
工具就歸放於工具箱內

所以在寫程式時,都一定有它的功能
我們就照他的功能去擺放對應的位子
如果我們需要啥麼物件、資料...等
我們只需要做呼叫的動作
所有的事情都能幫我們解決了

首先我們先來分析專案底下基本常用架構
以下分析圖表為這篇要講的主題
所以一次不會講解太多
避免一下子介紹太多導致無法吸收














所以依照上方圖表我們自己創立一個全新專案



















1 . 記得添加 Pom.xml 檔案( 導入要的 Jar 超級方便 )
     通常接下來只需點選完成
     不需要做額外的設定

















2 . 添加 Controller.java 到 src 底下
     目前不需要任何的內容
     ( 如果不清楚怎麼放,可以參考下圖 )

3 . 在 WebContent/WEB-INF/
     添加 web.xml & mvc-config.xml & jsp folder
     方法如下

















這樣是不是如我們第一章圖表一樣的流程~

參考資料 : 史上最全最强SpringMVC详细示例实战教程
參考資料 : 使用Spring JDBCTemplate简化JDBC的操作

2017年1月14日 星期六

JAVA-JSP 頁面資料利用 Ajax 傳送至 Controller

How send data to controller by ajax ?
如果在做網頁開發時
我們一定聽過 Ajax 這好用的工具
更是前後端保持暢通的橋樑

但是我們要如何將資料整理後並將資料傳送至 Controller

首先 , 使用的方法有 :
1 . 傳統字串資料傳送
2 . JSON

一 . 傳統字串資料傳送

先在 Jsp 內匯入 JQuery 套件
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

並且在 Ajax 的 data 放置參數
格式為 :
"key1=value1&key2=value2......"
中間分隔用 & 串接

$.ajax({
    type : "post",
    url : "http://localhost:8080/MyProject/query",
    data: "id=1969&name=John", // 資料是用 & 做串接
    success : function(response) {
        alert('Success');
    },
    error : function() {
        alert('fail');
    }
});

最後在 HelloController.java 接收從 Jsp 傳來的參數
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping(value = "/query") // 對應的連結
    @ResponseBody // 有回應
    public String query(@RequestParam(value="id") Integer id, 
                        @RequestParam(value="name") String name) {
        // 上方欄位說明
        // RequestParam 代表回應的參數
        // value 代表對應的 Key
        // 最後宣告參數型別

        System.out.println("query");
        System.out.println("" + id);  
        System.out.println("" + name);  
        return "searchUser";
    }
    
}

結果如下 :

query
1969
John


參考資料:Spring mvc系列六之 ajax运用(基于json格式)
參考資料:SpringMVC注解@RequestParam全面解析
參考資料:jQuery send string as POST parameters
參考資料:Ajax传值与接收值
歡迎轉載 , 請註明出處 . 

2017年1月8日 星期日

JAVA-四捨五入處理

想必各位一定遇到很多有關計算的問題
這篇提供一些有關四捨五入的計算方式

記住 : 整數的型別是無法得到小數點後的數

首先 , 如何產生包含小數參數
我們先以相同的型別計算
int a = 70;
int b = 3;
System.out.println("int 兩數相除 : " + a/b);

long d = 70;
long e = 3;
System.out.println("long 兩數相除 : " + d/e);

float g = 70;
float h = 3;
System.out.println("float 兩數相除 : " + g/h);

System.out.println("int/float 兩數相除 : " + a/h);
System.out.println("float/int 兩數相除 : " + g/b);

-------------------------------------------------

int 兩數相除 : 23
long 兩數相除 : 23
float 兩數相除 : 23.333334
int/float 兩數相除 : 23.333334
float/int 兩數相除 : 23.333334

因為整數型別無法取到小數點後的值
所以我們要先做轉型才有辦法取到小數點後的數值
int a = 70;
int b = 3;
System.out.println("int 兩數相除後轉 float : " + (float)a/b);

------------------------------------------------------------

int 兩數相除後轉 float : 23.333334

最後 , 既然取得到帶有小數的參數了
我們要如何轉成特訂位數和四捨五入 ?
int a = 70;
int b = 3;
// 官方網站 : https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html
double j = new BigDecimal((double)a/b).setScale(2, RoundingMode.HALF_UP).doubleValue();
System.out.println("BigDecimal 四捨五入後取小數第二位 : " + j);

DecimalFormat decimalFormat =new DecimalFormat("#.00");
System.out.println("將參數直接轉換格式 : " + decimalFormat.format(j));

---------------------------------------------------------------------

BigDecimal 四捨五入後取小數第二位 : 23.33 // 可轉二捨五入
將參數直接轉換格式 : 23.33
上方的 BitDecimal 官方文件 : 連結
以上有很多的方法可用

參考資料 : java提高篇(三)-----java的四捨五入
歡迎轉載 , 請註明出處 .

2017年1月2日 星期一

JSP-JSTL 與 JSP 與 Servlet 結合

JDBC 其實有一點像是 EL

首先下載 JSTL.jar 放在 Project/WebContent/WEB-INF/lib 底下

接下來在新增一個繼承 HttpServlet 的 Class
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloEveryone")
public class HelloEveryone extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 字串
        String strData = "這是字串資料第一筆";
        // List
        List<String> listData = new ArrayList<String>();
        listData.add("這是List第一筆數");
        listData.add("這是List第二筆數");
        listData.add("這是List第三筆數");
        // Map
        Map<String, String> mapData = new HashMap<String, String>();
        mapData.put("First", "這是Map第一筆");
        mapData.put("Second", "這是Map第二筆");

        request.setAttribute("Date_1", strData);
        request.setAttribute("Date_2", listData);
        request.setAttribute("Date_3", mapData);

        String uri = "/jsp/HelloEveryone.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(uri);
        dispatcher.forward(request, response);

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse respone)
            throws ServletException, IOException {
        super.doPost(request, respone);
    }

}

在使用 JSTL 時候
一定要先宣告標籤
不然一定會出現錯誤訊息
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- 字串資料 -->
    <c:out value="${requestScope.Date_1}"></c:out>
    <br>
    <br>
    <!-- List 資料 items是對應的資料來源,var是來源內的參數 -->
    <c:forEach items="${requestScope.Date_2}" var="listData_2">
        <c:out value="${listData_2}"></c:out><br>
    </c:forEach>
    <br>
    <br>
    <!-- Map 資料 -->
    <c:forEach items="${requestScope.Date_3}" var="mapData_3">
        <c:out value="${mapData_3.key}"></c:out> : <c:out value="${mapData_3.value}"></c:out><br>
    </c:forEach>
</body>
</html>


參考資料 :jsp与html的区别
參考資料 :Attribute
歡迎轉載,請註明出處.

2017年1月1日 星期日

JAVA-Servlet 常用註解說明

WebServlet Annotation 提供更方便的功能
只要在程式的開頭添加屬性
就能得到對應的功能

注意 :
( O )@WebServlet
( X )@WebService

參考資料 : WebServlet annotation examples
參考資料 : 使用web.xml