---
# System prepended metadata

title: 東哥課堂筆記

---

# 東哥課堂筆記

![](https://i.imgur.com/pwOf0dZ.jpg)


![](https://i.imgur.com/S4wlCEi.png)


![](https://i.imgur.com/EQvP9mi.png)

![](https://i.imgur.com/JS7LSyC.png)


---


### 跟阿辰問答 

- 客戶端發送request後是透過表單的action來指定路徑，input儲存輸入的資料

 - 假設是<input id="userName" name="empno" >
 
 - 之後在servlet中根據action 使用的方法決定我們在servlet要使用do get 還是do post來接收使用者資料並forward給下一個servlet
 
 >[name=阿辰]差不多是這樣


- 在servlet中會使用request.getParameter(key) 取得iduserName
- 再用request.setAttribute(key, value);帶入參數值     可以是 request.setAttribute("empno", empno);這樣嗎
- 還是要寫request.setAttribute("name", empno);
- 哪一個是自己設定的變數
- 沒“”的？還是都可以自己設定

>[name=阿辰]都自己設定 那是你要丟到request裡面dispatch給下個servlet或jsp用的資料

>[name=阿辰]他們再透過getAttribute("key")取出來用

- 那html那裡input 值不用對應嗎

>[name=阿辰]Attribute跟表單完全沒有關係

>[name=阿辰]你要取表單的資料是用getParameter


>[name=阿辰]然後後面是表單的name

>[name=阿辰]應該說

>[name=阿辰]input的name

- 比方說input name ="boss"就會String boss =request.getParameter(boss)

>[name=阿辰]後面boss要引號

>[name=阿辰]你就記input name有引號所以這邊也要 就好了

>[name=阿辰]setAttribute("KEY",VALUE)

>[name=阿辰]你要給的VALUE 用一個"KEY"存在request裡 接到request的就可以透過getAttribute("KEY")取VALUE

- "key" 好像也沒跟任何有關聯只是個名字

- 主要存在value

>[name=阿辰]對呀

- ```<div>員工編號 : <input type="text" name="empno"  /></div>```
- 比方說這句，他是從bean裏找屬性嗎?欄位名empno

>[name=阿辰]name跟bean無關，只是用來getParameter("input's name")，只是剛好一樣而已，方便打

- jsp怎麼找到使用者輸入的資料?就是每一行html怎麼對應到欄位?

>[name=阿辰]輸入完馬上顯示就是 透過servlet getParameter存到bean中 bean在丟到request中 jsp再從request裡面get

- ![](https://i.imgur.com/gEyjQnS.png)

>[name=阿辰]這是刪完的畫面，欄位會被清空，所以我input沒給value

- 所以這是空白的表單

>[name=阿辰]對

---

- ![](https://i.imgur.com/eb2ZlM9.png)

- 這個就是透過bean顯示更新完後資料嗎?

>[name=阿辰]恩

>[name=阿辰]下面的JS(location.href="html/Update.html")是多寫的，功能是取消回修改的首頁

- action 和location.href的差別在哪裡?

>[name=阿辰]就單純按那個按鈕轉去那個HTML而已

>[name=阿辰]action是你按submit會發一個request給你action的servlet

>[name=阿辰]submit就是為了要呼叫servlet處理form的資料 所以action一定要寫

- action 不寫是因為直接把jsp當最後一個畫面？但最好不要對吧


>[name=阿辰]恩  我只是應付作業

>[name=阿辰]通常會有其他方法回首頁或怎麼樣的

>[name=阿辰]不會讓他卡在那


>[name=阿辰]action 路徑建議只寫servlet，也可以寫jsp。

>[name=阿辰]邏輯能通應該程式都能跑，只是實際上為了分工和維護方便，才變成有Servlet跟jsp這兩種，方便我們省時省力。


>[name=阿辰]action的路徑不可能寫html，你會寫action就是要處理表單的資料 html不能處理

>[name=阿辰]你只要記 form的action路徑是按submit之後會丟一個request過去 那會按submit就是要處理資料 所以一定會是servlet或jsp的路徑。

>[name=阿辰]這樣才能處理，通常都是servlet，因為MVC分離架構。


>[name=阿辰]JSP要跳去html就寫超連結就好了

```<a>```就可以了


順序
```
delete.html-> delete.servlet(read)->DeleteCheck.jsp->deletcheck.servlet->deleted.jsp
```

- 透過action 能同時接收資料也能前往其他頁面？

deleteCheck.jsp->deletcheck.servlet

>[name=阿辰]可以這樣說

>[name=阿辰]如果不想用JS處理資料 html資料都是死的 要讓資料是活的必須寫jsp

>[name=阿辰]jsp就是方便寫html的servlet  jsp可以做html跟servlet做的事

---

- 你都改完html後就直接在jsp上測試?

>[name=阿辰]是呀 因為我只是改小東西
>[name=阿辰]如果是要開一頁新的 肯定先用html做完再貼到JSP

---

在servlet裡面可以透過request.getRequestDispatcher，除了可以把request forward給servlet，還有jsp
```
request.getRequestDispatcher
("/select/GetAllEmps.jsp").forward
(request,   response);
```

---

sendRedirect =>就像客戶打給你,你叫客戶去找其他的廠商(所以客戶還要再打一通電話)  

forward =>就像客戶找你,你交給你同事處理(對客戶來說只有打一通電話)


**傳遞參數**
--------

頁面跳轉常常也會有參數的傳遞  
使用到的方法為setAttribute("key",value)  
範例如下:

```
request.setAttribute("myname",name);

```

這裡的naem是自己去的一個變數,值為實際的資料  
(eg.client輸入的username)  
myname為key值  
因此這樣去request.getAttribute("myname")  
就可以得到name這個變數值  
這在之後也會用到

但setAttribute在sendRedirect()不能用  
原因為sendRedirect間接產生一個新的request  
因此舊的request所帶的參數是抓不到的

---

我們在 google 滷肉飯食譜的時候，整個過程大致上是這樣的：

-   我們的瀏覽器呼叫某串網址，讓 Google 的伺服器知道我們要求什麼資料。這個動作，我們叫作「瀏覽器向伺服器發出了一個**請求 (request)**」。
-   Google 的伺服器找到我們需要的資料以後，把這個紀錄資料的網頁的文字指示回傳給我們的瀏覽器。這個動作，我們叫作「瀏覽器向伺服器發出了一個**回應 (response)**」。
-   我們的瀏覽器按照文字指示，渲染出我們看見的網頁。

---

-   **前端**工程師負責給予**瀏覽器**指示，讓瀏覽器發出適當請求，也讓瀏覽器適當渲染出請求回的資料。
-   **後端**工程師負責給予**伺服器**指示，讓伺服器在接收請求後，知道應該怎麼取回、新增、或修改資料，並且給予瀏覽器適當的回應。


-   **前端**......**瀏覽器**............
-   **後端**......**伺服器**............

---

servlet 是得到request才啟動

button form=
按鈕的form prop對應到form 的ID
每一筆資料對應一個i
i=頁面上起始和結束的會員

---

刪除後回到當前頁面的換頁bug
分頁按鈕也設for迴圈

---

刪除後，重建資料庫就好了
用資料庫的insert into values
一次新增好幾十筆

---

前台: 
- 首頁
- 內文頁面
後台:
- 新增
- 修改
- 刪除
- 查詢

>可以進資料庫是第一步，能顯示出頁面是第二步

select >option
做出每頁顯示數量的下拉選單

圖片用連結或是路徑匯入

---

父元素稱作「**容器**」(英文會是 container 或 wrapper)。


---

1.  在我們希望神燈精靈記得我們告訴他的新事物時，必須使用名稱，也就是**變數**，來進行儲存。
2.  這些變數中儲存的東西，會分成不同的類型，也就是**型別**；這是為了要讓神燈精靈知道怎麼計算或處理這些東西。
3.  我們可以讓神燈精靈替我們執行不會出錯的**條件判斷**。
4.  我們可以讓神燈精靈替我們執行重複繁瑣的**迴圈**。

---

bean /ListBean


![](https://i.imgur.com/U0Gux7L.png)
