# 0524 Spring MVC 前端直接傳bean到後端,然後persist進資料庫 spring mvc 利用annotation自動幫你轉換資料的型態給前端? packageToScan --- model 1 vc都是jsp Model 1 -從頭到尾都是JSP, 雖然JSP會轉換成Servlet Model2 --- DispatcherServlet(分派): 將請求分派給controller 透過DispatcherServlet接收請求後,再透過HandlerMapping 對應到正確的url 來決定哪個controller來處理 View顯示PDF畫面-讓使用者可以存成PDF格式 view 透過char.js 元件,產生統計圖表,可以根據使用者想要的形式輸出成pdf, excel, 等格式 一個公司(web app)可以有多個部分/總機(DispatcherServlet),每個DispatcherServlet也有各自獨立的分機表/通訊錄(spring 設定檔), 形成spring bean Container(wap WebApplicationContext) DispatcherServlet 先找自己公司小的組態設定檔,找不到才往上一層找大的全公司設定檔   load-on-startup : (載入順序) servlet 是單一執行序的,會先載入一個記憶體,不會讓第一個載入的人等太久。 spring mvc 設定檔和spring 的設定檔各自獨立,不要共用 spring mvc 一個,spring 一個設定檔  DispatcherServlet的工作流程: 1.攔截、接收請求 2.根據HandlerMapping的註冊資料(url),來找對應的controller元件 3.呼叫controller元件處理請求,回傳是字串,這裡是ModelAndView 4.根據ViewResoler的註冊資料取得要回應的url 和名稱 5.如果請求成功導向才會顯示View元件 include/forward差別 forward:幫你介紹專案,把東西給你做,讓你自己處理,打算做專案的人去負責處理請求和回應 include:就是把別人包進來一起做, 會員:檢查是付費會員,但是根據付費程度去判斷你的等級,把網站,分不同權限和貢獻度,慢慢把網站分不同等級顯示不同畫面、能使用的功能  https://www.torproject.org/zh-TW/download/ 洋蔥說是很強的瀏覽器 次一級是firefox     會有三個設定檔 web.xml 會由webapplicationInitializer取代 beans.config.xml 通過context-param和listener標籤才能註冊到web.xml內 , >>以後叫RootAppConfig.java註冊,透過GetRootConFigClass() 來設定 mvc-servlet.xml   繼承30頁的介面,並改寫31頁的方法 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/support/AbstractAnnotationConfigDispatcherServletInitializer.html    p.34 另一個範例是DemoRoomAction.java --- RootConfig.java會註冊在WebAppInitializar.java WebAppConfig.java會註冊在RootAppConfig.java WebAppInitializar繼承AbstractAnnotationConfigDispatcherServletInitializar 並改寫 1.getRootConfigClasses() 2.getServletConfigClasses() 3.getServletMappings() ---  實作去改寫     java -jar web -war --- Course Examples: https://1drv.ms/f/s!Ans47I9-Pkiv9iwfs-SoD-uXDkPd HomeWork20230602: https://1drv.ms/f/s!Ans47I9-Pkiv9i0GpvJZpX9Acokh --- api: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html      session 跟request在網址上的差別是什麼? Session scope 跨多頁, 瀏覽器沒有關結果就會在 request scope 只有下一頁,關了再開下一次就沒了 https://openhome.cc/Gossip/StudyGossip/abstractThinking.html 把具體的事物,找出他們之中的關聯性,就是抽象化的過程  19頁      action不能加斜線   只存活到當頁 他剛剛那個session是在那裡換頁面 http://localhost:8080/SpringMvcProject/hello2.controller?userName= 把網址改成 http://localhost:8080/SpringMvcProject/success.jsp 來測試 status.setComplete(); status.setComplete();//清除session 中@SessionAttributes 設定的names資料 普通java不能跑,但是可以直接給路徑和參數 http://localhost:8080/SpringMvcProject/members/a001 a001 是我們設定的參數 我們在哪裡設定這個參數R members/ xxx  在這裡設定 ---        輸入/* +enter產生多行註解  https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/CharacterEncodingFilter.html   丟到meta-inf藏起來,因為會有衝突 因為目前有java組態 會跟xml有衝突     恢復成使用xml方式 1. 註解WebAppConfig class 上面的三個annotation 2. 將WebAppInitializer的回傳值改為null 3. 把隱藏的xml檔拉回來 恢復成使用xml方式 0. 把原本藏起來的xml移回來到web-inf底下 1. 註解WebAppConfig class 上面的三個annotation 2. 將WebAppInitializer 下的回傳值改回null --- 20230525  web-inf是隱藏資料夾,無法直接存取。要透過特定方法來間接存取   https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/InternalResourceViewResolver.html     他剛剛是說這個可以隨便取嗎 ? 對  透過那個自訂義的路徑找到那個方法,再return回去form.jsp, 因為設定檔有寫好,所以才能轉跳去jsp頁面  ``` <form action="hello2.controller" method="post"> ``` 納為啥這裡(action路徑)不能有 /  +/ 會讓專案路徑找不到,網址會少一個專案名,會往上一層 你實際run一遍比較清楚  https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/orm/hibernate5/HibernateTransactionManager.html  剛剛那串算是在做啥  建立一個交易經理 自動化交易 他幫你管理連線工廠 高鐵站購票網站也是排隊方式(資料庫隔離) ==判斷bean不是null,再把帳號密碼存在bean裡面,在把bean存在session內== 這邊有說判斷bean是否為null就好 就不用每個欄位去判斷然後去set  jsp 英文開頭大小寫打錯,不要直接改檔名的大小寫會找不到,可以在後面加數字01 ### jsp實際存放的位置 //C:\Action\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\SpringMvcProject\org\apache\jsp\WEB_002dINF\pages 這是jsp最後長的樣子ㄇ 對 --- ### sql 指令匯出教學 https://dotblogs.com.tw/SmallFish/2019/11/14/124603 --- Bean 裡面的 ORM技術 + 組態設定檔 + //交易管理員@Transactional 就會自動開啟關閉交易 不需要再begin. rollback ...等  =:user 所以第一個參數就變成字串,你指定的值 換成=? 下方參數應該可以換成數字  另一種寫法 ,在hibernate p.165頁  起始頁面的網址: http://localhost:8080/SpringMvcProject/loginsystemmain.controller 1. 透過processMainController方法跳轉到loginSystem.jsp 一旦按下送出 網址會變成: http://localhost:8080/SpringMvcProject/checklogin.controller 2. 執行processAction方法 根據不同情況顯示不同解果,只有輸入成功會跳到另一個頁面, 其他情況都是同一個頁面,只是會顯示錯誤訊息 為什麼一定要執行這個網址才能跑? http://localhost:8080/SpringMvcProject/loginsystemmain.controller 是只要按了Submit就會跳轉到checkLogin.controllerㄇ 不管帳號密碼是否有誤  對阿因為 action跳轉頁面 ,但controller 還是return loginSystem 所以錯誤情況才會留在同個頁面 --- @PostMapping("/checkLogin.controller") 因為這個要求Post方法進入 透過post 會把資訊藏在body ,但是網址進入方式是get的方式,方法不符合就會出錯 ---  因為左邊有 右邊是多寫的 但是建議都要寫 因為有人可能在root沒有打到 會找不到錯在哪 ---  member.jsp 一樣不能直接執行,要結合javabean,透過controller 去轉發頁面 javabean 屬性對應input path=""的屬性  http://localhost:8080/SpringMvcProject/membersmain.controller  沒意外的話會接到一個mem2的Bean物件 可以透過session的persist儲存  --- 測試網址 http://localhost:8080/SpringMvcProject/membersmain.controller  在src 下建立資料夾 packagename自己取 在建立兩個檔案(不同語系的設定檔,文字內容也不同) messageSource()負責幫你找檔案 setBasename //設定檔名位置 setDefaultEncoding //設定編碼 /** 兩個**代表能往下找多層路徑 LocaleChangeInterceptor() : LCI  這是攔截器  可以註冊多個    執行 http://localhost:8080/SpringMvcProject/multiLangResult.controller --- 測試路徑只改http://localhost:8080/SpringMvcProject/ 後面的controller路徑   css ```=css @charset "UTF-8"; body { font-family: monospace } #red { color: pink; font-size: 2cm } #green { color: skyblue; font-size: 2cm } #blue { color: Teal; font-size: 2cm } ``` ms.setBasename("i18n.message"); //設定檔名位置 (i18n是package name ,message 是語系前面的檔名) 貼左邊網址跳轉到右邊的  xml預設是jsp html可能就會找不到 ``` <mvc:default-servlet-handler/> <!-- 支援執行html(xml預設是支援jsp), 沒有加找不到,只有xml組態設定才需要, java程式組態預設可以讀取 --> ```  --- 先載入common io jar 然後再ResponseController 新增方法來讀取圖片 ### 設定jsp跳出提示  <=.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ --- http://localhost:8080/SpringMvcProject/uploadfilemain.controller --- dao 新增session.flush root 設定檔 新增 props.put("hibernate.allow_update_outside_transaction", Boolean.TRUE);   http://localhost:8080/SpringMvcProject/uploadfilemain.controller --- 測試json,利用bean注入然後顯示在網頁上 localhost:8080/SpringMvcProject/jsoncreate2.controller ### postman 測試   例外處理,老師故意弄一個錯誤的來測試 http://localhost:8080/SpringMvcProject/myexcept.controller
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up