springMVC原理講解地址:http://www.cnblogs.com/dragonfei/p/6148625.html Ionic2和angularjs2和angularjs和nosql菜鳥教程一塊兒是作手機的 https://www.bilibili.com/video/av8614724/index_10.html是ionic2公開課地址 FreeCMS DeDeCMS風信網,數據庫表結構 DEDECMS簡單建站 Filter和Interceptor的區別 Filter是基於函數回調的,而Interceptor則是基於Java反射的。 Filter依賴於Servlet容器,而Interceptor不依賴於Servlet容器。 Filter對幾乎全部的請求起做用,而Interceptor只能對action請求起做用。 Interceptor能夠訪問Action的上下文,值棧裏的對象,而Filter不能。(struts框架) 在action的生命週期裏,Interceptor能夠被屢次調用,而Filter只能在容器初始化時調用一次 springMVC中攔截器,能夠有2種方式 實現HandlerInterceptor接口 重寫裏面的方法,最重要的是 boolean preHandler 繼承HandlerInterceptorAdapter ,重寫 boolean preHandler (推薦) return true 放行, return false 中止執行 Admin-servlet.xml是後臺控制器,web.xml是頁面控制器 Cookies中能夠看到session生成的UUID同一個瀏覽器session一致,要登陸多個帳號要打開不一樣的瀏覽器 MVC框架 Spring<--ORM框架 springMVC MyBaties servlet jdbc struts hibernate 設置緩存後,分頁查詢不用緩存時加useCache=」false」表示取消緩存 *一個表明以及目錄,**兩個表明n個目錄 Sesion時tomcat保存的大概有30分鐘時間,存於內存 EJB企業級的開發 Session是Map集合 Pojo和實體類的區別: 實體類實現serializable接口,與數據庫字段對應 Pojo是一個工具類,與數據庫無關 Model和View並不直接交互數據 swift playground一種簡單的編程語言 參數注入的方式: Set方法 構造函數 接口注入 Servlet只實例化一次,用的時候才加載 UUID.randomUUID()計算機生成的不重複的數字 Java圖片驗證碼 Jsp中能夠用三元運算sex==0?」男」:」女」 約定大於配置是指,在頁面中先寫虛擬路徑及相關參數,而後controller中參數要和頁面一致 在controller中傳多個參數時: @param(「teaId」) int teaId,@param(「teaName」) String teaName Excel中的拼接字符串函數:=B3&"="&"#{"&B3&"}"&"," ajax提供的頁面驗證失去焦點才驗證data-bv-trigger="blur" restful語義化的地址傳參 kindeditor文件上傳、圖片,富文本框也是文件上傳 throw new RuntimeException("批量上傳學生信息失敗的"); Java倒計時跳轉頁面 Document.getElementById(‘href’).href找到地址 MD5加密32位 MD5加鹽 事務的特性:原子性、一致性、隔離性、持久性 Poi文件上傳 artDialog是bootstrap的藝術對話框 Mapper的方法沒有映射完時項目會報錯 React native 和ionic都是專業作手機app的 Angularjs Param.marjorId上次查詢傳過去的參數 循環中被選中在option中還原 日期插件datetimepicker Bootstrap Validate驗證 Data-bv-trigger=」blur」鼠標移開後才驗證樣式 jsp頁面代碼的提取: 對於一段的連續的頁面代碼會被重複用到,將js和css分別提取到單獨的jsp文件 在原頁面經過<jsp:include page="common/common_js.jsp"></jsp:include>引用 Spring MVC注入時日期會報錯,要在實體類中作處理 @DateTimeFormat(pattern = "yyyy-MM-dd") 動態注入: @Autowired //spring實現的動態代理 @Resource(name="classesMapper") //java 框架實現動態代理 後臺service接口提取: 封裝公業的Mapper 沒有分頁的操做Insert,update,findById ,search()(CommonMapper) 有分頁的 創建在沒有分頁的操做之上的 ,int searchPageCount() (CommonPageMapper) 封裝公共的Service 沒有分頁的操做 Insert,update,findById ,search()(CommonService) 有分頁的,創建在沒有分頁的操做之上的 ,int searchPageCount() (CommonPageService) 封裝公共的Service.impl 沒有分頁的操做 Insert,update,findById ,search() 創建CommonServiceImpl, 調用CommonMapper類,必須給一個set方法,讓子類來賦值 有分頁的CommonPageServiceImpl繼承CommonServiceImpl調用CommonPageMapper 必須給一個set方法,讓子類來賦值 數據庫與實體類列名不一樣時,查詢語句要加as處理 分頁公共接口繼承公共接口 bootstrap中向右浮動的css用pull-right A標籤提交表單:<a href='javascript:document.getElementById(‘form1’).submit();'></a> Spring MVC 分離了控制器、模型對象、過濾器以及處理程序對象的角色,這種分離讓它們更容易進行定製 MVC是設計模式,三層架構是一種思想 JSP本質是servlet Spring MVC:契約式的編程,約定大於配置,名字寫死 具體步驟: 一、 首先用戶發送請求——>DispatcherServlet,前端控制器收到請求後本身不進行處理,而是委託給其餘的解析器進行處理,做爲統一訪問點,進行全局的流程控制; 二、 DispatcherServlet——>HandlerMapping,HandlerMapping 將會把請求映射爲 HandlerExecutionChain 對象(包含一個 Handler 處理器(頁面控制器)對象、多個 HandlerInterceptor 攔截器)對象,經過這種策略模式,很容易添加新的映射策略; 三、 DispatcherServlet——>HandlerAdapter,HandlerAdapter 將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持不少類型的處理器; 四、 HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter 將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個 ModelAndView 對象(包含模型數據、邏輯視圖名); 五、 ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析爲具體的 View,經過這種策略模式,很容易更換其餘視圖技術; 六、 View——>渲染,View 會根據傳進來的 Model 模型數據進行渲染,此處的 Model 實際是一個 Map 數據結構,所以很容易支持其餘視圖技術; 7、 返回控制權給 DispatcherServlet,由 DispatcherServlet 返回響應給用戶,到此一個流程結束。 核心開發步驟 1、 DispatcherServlet 在 web.xml 中的部署描述,從而攔截請求到 Spring Web MVC 2、 HandlerMapping 的配置,從而將請求映射處處理器 3、 HandlerAdapter 的配置,從而支持多種類型的處理器 4、 ViewResolver 的配置,從而將邏輯視圖名解析爲具體視圖技術 5、 處理器(頁面控制器)的配置,從而進行功能處理 配置spring mvc與mybatis 最好不要單獨用 Spring mvc -->Spring <-- mybatis 1)、resource 下面去創建一個名爲 applicationContext.xml (能夠改,默認都叫這個)文件 2)、在這裏面作以下配置 2.1)、掃包 ( 業務邏輯包,數據訪問包) 2.2)、聲明 支持 註解方式 2.3)、數據鏈接池的操做(數據庫,驅動,用戶名,密碼 .....) 2.4)、建立SqlSessionFactory 2.5)、配置事務管理 2.6)、使用Spring AOP(動態代理)設定對哪些方法作什麼樣的事情(只讀可提交) 3)、配置mybatis的一些經常使用的設定,如調試打印出sql,映射文件 在哪一個包下面 4)、最後要在 web.xml中去啓動 剛剛配置好的 applicationContext.xml 1、當用戶經過瀏覽器發送web請求時,首先接受到的是應用服務器,好比tomcat,應用服務器經過協議解析等一系列動做後,將請求對象HttpServletRequest交給DispatcherServlet,DispatcherServlet是Spring MVC的核心入口。 2、DispatcherServlet收到request請求後會在doService方法裏設置一些request相關的屬性,好比applicationContext,支持國際化用的LocalResolver等,而後將request交由請求處理適配器 三、Spring 在初始化applicationContext的階段會將請求uri與請求處理器進行一個映射,在運行期由請求處理適配器HandlerAdapter經過request對象找到對應的處理器 HandlerMethod,Spring MVC中的Handler是Object類型,其實是在Controller上配了@ReqquestMapping的方法,[email protected] 4、Handler處理請求,即調用對應的業務方法邏輯後將返回ModelAndView視圖對象,而後調用HandlerExecutionChain的 applyPostHandle方法處理視圖對象 5、Spring MVC使用視圖解析器解析ModelAndView對象,而後生成對應的頁面交由DispatcherServlet,由它將響應寫回給客戶端,這樣就基本完成了整個請求的處理 1、當springMVC的初始化完成以後、就進入到Servlet的第二個階段「Service「時期、當瀏覽器發送一個request的到服務器的時候、Servlet容器啓動一個線程、經過service()方法將請求轉到doGet或者doPost來處理。 2、此時springMVC已經創建了一個子上下文、此上下文中存放着經過依賴注入的各類編程元素。Struts2採起的是一種徹底和Web容器隔離和解耦的事件機制。諸如Action對象、Result對象、Interceptor對象,這些都是徹底脫離Servlet容器的編程元素。Struts2將數據流和事件處理徹底剝離開來,從Http請求中讀取數據後,下面的事件處理流程就只依賴於這些數據,而徹底不知道有Web環境的存在。反觀SpringMVC,不管HandlerMapping對象、HandlerAdapter對象仍是View對象,這些核心的接口所定義的方法中,HttpServletRequest和HttpServletResponse對象都是直接做爲方法的參數出現的。這也就意味着,框架的設計者,直接將SpringMVC框架和容器綁定到了一塊兒。或者說,整個SpringMVC框架,都是依託着Servlet容器元素來設計的。 3、DispatcherServlet做爲一個標準的Servlet、那麼當一個請求過來時、咱們就能夠按照Servlet的執行過程去分析、他是如何處理request的。對於springMVC的模版化設計模式、咱們時常要去父類中尋找咱們須要的方法。下面就從DispatcherServlet入手、來分析一個request的請求過程 Spring MVC請求處理流程 從web.xml中 servlet的配置開始, 根據servlet攔截的url-parttern,來進行請求轉發 Spring工做流程描述 1. 用戶向服務器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲; 2. DispatcherServlet對請求URL進行解析,獲得請求資源標識符(URI)。而後根據該URI,調用HandlerMapping得到該Handler配置的全部相關的對象(包括Handler對象以及Handler對象對應的攔截器),最後以HandlerExecutionChain對象的形式返回; 3. DispatcherServlet 根據得到的Handler,選擇一個合適的HandlerAdapter。(附註:若是成功得到HandlerAdapter後,此時將開始執行攔截器的preHandler(...)方法) 4. 提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程當中,根據你的配置,Spring將幫你作一些額外的工做: HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換爲指定的響應信息 數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等 數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等 數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中 5. Handler執行完成後,向DispatcherServlet 返回一個ModelAndView對象; 6. 根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ; 7. ViewResolver 結合Model和View,來渲染視圖 8. 將渲染結果返回給客戶端。 爲何Spring只使用一個Servlet(DispatcherServlet)來處理全部請求? 詳細見J2EE設計模式-前端控制模式 Spring爲何要結合使用HandlerMapping以及HandlerAdapter來處理Handler? 符合面向對象中的單一職責原則,代碼架構清晰,便於維護,最重要的是代碼可複用性高。如HandlerAdapter可能會被用於處理多種Handler 1. 當DispatcherServlet接到請求時,他先回查找適當的處理程序來處理請求。DispatcherServlet經過一個或者多個處理程序映射,將每一個請求映射處處理程序中。處理程序映射配置在web應用程序的上下文中,是實現了HandlerMapping接口的Bean。它負責爲請求返回一個適當的處理程序(也就是Controller)。處理程序映射一般根據請求的URL將請求映射處處理程序(Controller)。 2. 一旦DispatcherServlet選擇了適當的控制器,它就會調用這個控制器來處理請求。 3. 控制器處理完請求後,會將模型和視圖名(有時候是視圖對象)返回給DispatcherServlet。模型包含了控制器要傳遞給視圖進行顯示的屬性。若是返回的是視圖名稱,它會被解析成視圖對象再進行呈現。綁定模型和視圖的基本類是ModelAndView 4. 當DispatcherServlet接收到模型和視圖名稱時,它會將邏輯視圖名稱解析成視圖對象再進行呈現。DispatcherServlet從一個或者多個視圖解析器中解析視圖。視圖解析器配置在Web應用程序上下文中,是實現了ViewResolver接口的Bean。它的任務是根據邏輯視圖名稱返回試圖對象。 5. 一旦DispatcherServlet將視圖名稱解析稱爲試圖對象,它就會呈現視圖對象,並傳遞控制器返回的模型。視圖的任務是將模型屬性展現給用戶。 DispatcherServlet接到請求後如何映射到Controller呢? 在Spring MVC中,Web請求被Web應用程序上下文中聲明的一個或者多個處理程序映射Bean(是吸納了HandlerMapping接口的Bean)映射到Controller。 Spring MVC提供了幾種HandlerMapping實現: 1. BeanNameUrlHandlerMapping(默認狀況),他根據Controller Bean名稱中指定的URL模式將請求映射處處理程序上。 eg. <bean name="/welcome.htm" class="com.kevin.controller.WelcomeController">...</bean> 當你訪問http://******/welcome.htm這個URL時,DispatcherServlet經過BeanNameUrlHandlerMapping映射就找到了WelcomeController。 2. ControllerClassNameHandlerMapping,它是按控制器類名稱映射請求。 3. SimpleUrlHandlerMapping,用定製的映射定義來映射請求。 Controller接口:是Spring MVC中全部控制器類的基本接口。經過實現這個接口,你能夠建立本身的控制器。在handleRequest()方法中,能夠隨意地處理Web請求。 AbstractController:若是你想讓控制器具有一些基本的特性,如過濾受支持的HTTP方法(GET,POST和HEAD),以及在HTTP響應中生成cache-control頭部等,你可讓它擴展AbstractController類。 ParameterizableViewController:用來建立帶有參數化視圖的控制器。 SimpleFormController:它支持命令對象的概念(commandName),而且能夠將表單域的值綁定到命令對象的同名屬性上。 AbstractWizardFormController:爲嚮導表單的處理定義了基本的任務。嚮導表單有多個單頁,所以必須爲嚮導表單控制器定義多個頁面視圖。而後這個控制器能夠跨越全部這些表單頁面來管理表單狀態。嚮導表單會有多個動做,不像SimpleFormController只有單個提交動做。AbstractWizardFormController會根據特殊的請求參數決定用戶的動做,一般是用提交按鈕的名稱來指定動做的。 _finished: 完成嚮導表單。 _cancel: 取消嚮導表單。 _targetx: 進入目標頁面,這裏的x是從0開始的頁面索引。 MultiActionController:容許你將多個相關的動做分組到一個控制器中。 幾種常見的ViewResolver的解析: 1. InternalResourceViewResolver: 根據URL解析視圖。經過添加前綴和後綴的方法,將每一個視圖名稱都映射到一個URL上。 2. XmlViewResolver: 從XML配置文件中解析視圖。將視圖聲明成Spring的Bean,並按他們的Bean Name進行解析。 3. ResourceBundleViewResolver: 從ResourceBundle中解析視圖。 4. 用多個視圖解析器解析視圖, 須要注意的是,您須要爲你配置的視圖解析器配置解析的優先級。<property name="order" value="0"/> value越小,優先級越高。