Day1_J2EE(Java 2 Enterprise Edition)_Eclipse javaEE下載_利用Tomcat架設Server_創建一個JSP專案

前陣子在公司做事情
突然聽到遠端廠區有類似異常
然後就有人在問有人會 Tomcat 嗎??
它java server回傳的內容一直是Null




那究竟何謂  Tomcat  嗯!
跟 JAVA有關.....
Tomcat 其實就想成提供專門可以運行java程式的網頁應用的一種架站工具
所以通常搭配起來做開發就形成 JSP 網頁應用程式
https://progressbar.tw/posts/2


那之前若學PHP的所會接觸到的可能就有 XAMPP之類的架站工具


講到 JSP  有人腦海浮現出  呷尚寶(JSP)早餐店   = =||| (喔~~ 拜託你肚子餓了嗎)


摘錄自:
http://ctrls54600.pixnet.net/blog/post/203543774-【高雄】呷尚寶‧漢堡專賣店不賣鍋燒麵那改

不是在做業配文拜託 ~~


JSP  是指  ---> Java Server Pages(JAVA 伺服器動態網頁)

摘錄自:https://chaycao.github.io/2017/07/09/用jsp-servlet实现bbs论坛/




在更深入去瞭解 Tomcat 以及 JSP之類開發
我們先對 J2EE 有初步的認識

摘錄自:
https://docs.oracle.com/cd/E17802_01/j2ee/j2ee/1.4/docs/tutorial-update6/doc/Overview3.html


企業級 JAVA 開發進階版 J2EE(主要擴充了和網路、伺服器相關開發的進階套件)
包含兩部分
1. Web(JSP、Servlet)
Web 部分可分為兩個銳利的矛
(1)JSP : 可以於html中寫java
(2)Servlet : 其實就是一種Class

2. EJB(Enterprise Java Bean)

EJB : 商業邏輯運作流程 和 分散式交易管理機制
比方多台Server上的物件和物件之間進行溝通的時候所遇問題處裡


摘錄自:
http://r4r.co.in/java/struts/basic/tutorial/01/Structuring%20a%20Web%20Application.shtml

Web Container
--> 可運作 用JAVA所撰寫的web應用程式平台
有點類似Apache Server , 但是apache不可運作java的應用程式。
若只單純要跑html 用 apache就夠了。
但若需要 運行java程式,就可能要用 湯姆貓(Tomcat)這種工具。
JAVA應用程式依照路徑規則去包成一個war檔案 (以前學本機端開發則是 : jar)





摘錄自:
http://www.bibliotecauniversitaria.ge.it/tms/expresso/doc/edg/edg_WhatIsMVC.html

MVC架構(Model-View-Controller)
=>重視程式撰寫之彈性重複使用

Model : 偏向後端 商業邏輯和資料庫連結
View: 前端介面呈現
Controller:對request進行處裡及轉發

===========================================================
這篇教學兼學習文
會先來學習JSP專案相關基礎

Part1. J2EE Eclipse下載/Tomcat 架站工具下載配置於Eclipse
Part2. 於Eclipese串Tomcat並建立JSP
Part3. HTTP的溝通
===========================================================

Part1. J2EE Eclipse下載/Tomcat 架站工具下載配置於Eclipse
首先連結到Eclipse官方網站上去下載 Java EE
http://www.eclipse.org/downloads/eclipse-packages/



之前2016年分享過Eclipse初心者會用的基礎版下載配置教學
http://coolmandiary.blogspot.tw/2016/02/eclipse-jdk.html



下載完成解壓縮


執行對應的 exe會跳出選擇日後專案放置目錄


下載 Tomcat
https://tomcat.apache.org/download-80.cgi

到官方網站選擇第8版下載


選8.5的release version 按 ZIP 下載並解壓縮



在 bin目錄中有一些shell的執行檔案(bash file)
它也包了一些供主機架設環境 為  Linux的應用情況

當中可以看到要
startup.sh 開啟Tomcat運行
shutdown.sh 關閉Tomcat運行
其他可能有背景端daemon常駐運行的檔案

這塊可以先有一些簡單概念瞭解不需太鑽牛角尖!

--------------------------------------------------------------------------------------------------------
Part2. 於Eclipese串Tomcat並建立JSP

於 Project Explorer 區塊
--> 右鍵 --> New --> Other


跳出視窗上可以搜尋關鍵字
或直接往下滾動查找 Server字眼

點選Server 並Next

接著至Apache下方去選擇剛剛我們下載對應Tomcat版本 8.5
(這邊就看各自公司內部或是自己開發上應用是採用捨麼版本)



選擇之後下一步
會要你選剛剛下載的Tomcat



當你看到下方頁籤多了Server且有對應顯示tomcat內容
左側project explorer也對應有顯示設定檔案群
即是已完成初步配置


這邊我們嘗試新增一個web專案去寫html網頁用server呈現
一樣
和新增server方式
於 project explorer區塊去右鍵--->New--->Other--->選WEB-->下方的DynamicWeb Project
可能會出現如下錯誤(那就是你不是在Server那層資料夾下做就會跳出error)


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

所以我們修正操作
先選Servers 檔案夾

之後在做新增專案就不會跳錯誤了
將專案命名並下一步











建立 JSP檔案




JSP 最初創建的程式碼
其實你會發現就是一個html


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<!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=BIG5">
<title>Insert title here</title>
</head>
<body>

</body>
</html>


這邊我就寫一點簡單的程式做運行





之後設定好防火牆
開啟就會呈現剛剛的html呈現的內容


這樣就是設定有確實完成的確認

一般port 若是為 80可以不需要輸入
但若是在JSP則會是8080 port (也就是80以外的port就需要輸入)


--------------------------------------------------------------------------------------------------------
Part3. HTTP的溝通

3-1.將資料送至Web Server後端 ==> Request (Get / Post)
3-2.Client端記錄留存 ==>  cookie / session

HTTP(Hypertext Transfer Protocol)/超文本傳輸協定
一種Client端發送請求給Server端
之後Server端再回傳資料訊息給Client端的一個通訊模式
當中我們會藉由 http這個協定那通常port會用 80(http) 或 443(https有加密的)做
資料傳遞Request 、Response



3-1.將資料送至Web Server後端 ==> Request (Get / Post)

在JAVA Web元件資料傳遞方式使用http當中常用的操作也就是我們
Request

眾多的 Client端會去向遠端Server發送request

此時就有相應的
Get 與 Post兩種request方法

摘自: https://www.pinterest.com/pin/270145677623378266/

當我們要從前端頁面傳遞資料給後端的時候
(傳給 Server 的時候)


一般有兩種方法

Get
從伺服器上獲取資料方
GET請求主要透過URL,也因此在URL中可以看到全部傳遞之參數

傳送網址一般 後頭會用問號號面則表示要傳遞資料有哪些
以上方圖為例就是傳送一個date資訊
若有多項則用作為區隔

例如
http://blog.xuite.net/ahdaa/blog1/test.html?id=AD&val1=02&val2=22#achorAD

http://test.com/register?id=tom&password=321

資料傳遞匹配方式則是使用類似
Java 中的Map
或是 VB.NET中的Dictionary 的方式
會有一組key對應value去做傳遞

優點:
速度較快

缺點:
資料請求有長度的限制且為明碼
如第二個例子有密碼就會被看得一清二楚
所以有較隱私資料的個人身分資較不適合使用這方法


POST
向伺服器傳送資料方
資料傳遞時,網址並不會有任何更動。
主要會藉由HTTP post機制,將表單內各個欄位與其參數內容放在
HTML header內部一起傳送到ACTION屬性所指的URL地址,用戶看不到這個過程。

若是偏向個人資料
像是密碼、ID、住址
就可以用post來做傳遞

優點:
發送長度沒有限制
較安全傳遞參數不會被看到

3-2.Client端記錄留存 ==>  cookie / session

我們說Client發送Request 之後 Server再Response這樣
一來一往的機制通常是一次性的




換言之,在你登入某個網站(FB、博客來)你輸入完帳密發送request
主機再回傳給你網頁後
主機一般並不知道你這個client曾有拜訪它們過的!!
因應有需要知道某個Client之前跟主機這邊進行過的歷程
(表單填寫、書籍借閱、訂購、交易紀錄....之類的)
那網站端(Server)會需要有辨別眾多客戶連上來各自為對應哪個client
所以就衍生出cookie這個機制


那你可以想成第一次去某一家賣場的時候
店家會想盡辦法想跟你說服辦一張會員卡
利於後續的訂單管理

或是去借閱書籍
圖書管理員當然需要紀錄你的資訊
你捨麼時候來這家圖書館借閱
借了捨麼、 歸還日期捨麼時候
還有聯絡資訊等等
後續才能追蹤你有沒有還書之類的



Cookie是放於Client端的一個檔案,是由Server端建立出來並存放一些server所需資料
換言之,每個網站基本上都會有一個專屬的 cookie

不同網域的主機是不可以去讀取其他網域的cookie的!!!!
那在一般電腦端就會有google的cookie、facebook、amazon的cookie、博客來的cookie
各種論壇、網站各自的cookie

所以像是 Fb的主機就無法去讀寫Google的cookie
因應安全性所以只可控管各自domain下的cookies

Server會去存入一個sesson id 然後將它寫到cookie中做辨別。
這個 session id會存放一份在Server自己這邊一份放置在client端。

那當下次client再次光臨主機時
一開始會先看你的session id 是多少
有無sesson id 是判斷client是否拜訪過的依據判定
若無則是第一次
-->就埋放一個session id到cookie進去
有則會去比對 session id 下層做過捨麼瀏覽過捨麼頁面之類的資訊
曾買過捨麼或是做過捨麼...






參考link:

[HTTP]Http GET、POST Method
https://dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx

常用 TCP Port作用(各種Port介紹)
http://yun1450.pixnet.net/blog/post/47494172-常用-tcp-port作用%28各種port介紹%29

HTML 表單中 GET 與 POST 的用法差異
http://www.wibibi.com/info.php?tid=235

HTTP Methods: GET vs. POST
http://cyberops.in/http-methods-get-vs-post/

淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?
https://blog.toright.com/posts/1203/淺談-http-method:表單中的-get-與-post-有什麼差別?.html

討論「get」和「post」安全性
https://read01.com/zh-tw/gdDmdg.html#.WqSk6uhubb0

GET和POST的區別
https://read01.com/yjyE8P.html#.WqSlzOhubb0

HTTP Get 與 HTTP Post 詳細介紹
https://read01.com/08EQjE.html#.WqSlzehubb0

HTTP/1.1 — 超文本傳輸協定 (Hypertext Transfer Protocol)
https://notfalse.net/33/http1_1


留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題