下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SpringMVC架SpringwebmvcSpringwebmvcStruts2都屬于表現層的框架,Spring框架的一部分,15M模型15M模型32 控制器4view4viewV視圖2(Model)處理數據并得到處理結果webC/S應用中模Springwebmvc、10 11 是繼HandlerViewResolver:ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據邏輯視圖名解析成物面展示給用戶。springmvc框架提供了很多的View視圖類型,包括:jstlView、商品訂單業(yè)務說先導入sql_table.sql,再導入sql_data.sql用戶可以創(chuàng)用戶可以創(chuàng)—個訂單只能由一個用—個訂單包括多id:id(主鍵)通過訂單明細表訂單表和商品表建立關系一個訂單對應一個商品對應訂單表和商品一個明細對應一個SpringMVC入本使用Eclipse+tomcat7開第二步:spring3.2.0jar>>載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml。Servlet方1、固定后綴的url,比如設置為*.do、*.action,例如:/user/add.action2、所有,設置為/,例如:/user/add、、org.springframework.web.servlet.mvc.Controller接口的Bean作為publicpublicclassItemList1implementsControllerpublicModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{List<Items>itemsList=newItemsitems_1=newItems();items_1.setDetail("ThinkPadT430ItemsItemsitems_2=new ModelAndViewmodelAndView=newreturn}}接口。<<beans""""".dd根據bean的name進行查找Handler將action的url配置在beanname "/>controller<beanname="/items1.action"id="itemList1"如果請求的URL為“上下文/items1.action”將會成功映射到ItemList1控制器。<!--ViewResolver--<propertyname="viewClass"<propertyname="prefix"value="/WEB-<propertyname="suffix"viewClassJtlView的相關jar包;和視圖名為o,則最終返回的jsp視圖地址“WEB-INF/jsp/o.jsp”<%@<%@pagelanguage="java"contentType="text/html;charset=UTF-<%@taglib/jsp/jstl/core"prefix="c"<%@taglib /jsp/jstl/fmt"<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN" <metahttp-equiv="Content-Type"content="text/html;charset=UTF-<tablewidth="100%"<c:forEachitems="${itemsList}"<td>${<td>${item.price<td>${item.detailtomcatDispathcerServlet作為springmvc的調度器存在,DispatcherServlet創(chuàng)建時會默認從springmvc.xml中配置的為準,DispatcherServletspringmvc各各HandlerMap處理器映射HandlerMap負責根據request請求找到對應的Handler處理器及Interceptor器,將它們封裝在HandlerExecutionChain對象中給前端控制器返回。BeanNameUrlurlspringbeanname進行springbean實例。<!—beanName<!—beanNameUrlsimpleUrlHandlerMap是BeanNameUrlHandlerMap的增強版本,它可以將url和beanid進行統(tǒng)一映射配置。<!—<!—簡單url>"<property<propkey="/items1.action">controller的bean<propkey="/items2.action">controller的beanorg.springframework.web.servlet.mvc.ControllerBean通過此適配器進行適配、class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>接口的<bean<beanpublicpublicclassItemList2implementsHttpRequestHandlerpublicvoidhandleRequest(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{List<Items>itemsList=newItemsitems_1=newitems_1.setDetail("ThinkPadT430Itemsitems_2=new 5蘋 ward(request,response);}}}ControllerpublicclassItemList3publicModelAndViewqueryItem()List<Items>itemsList=newItemsitems_1=newitems_1.setDetail("ThinkPaditems_1.setDetail("ThinkPadT430Itemsitems_2=new //ModelAndViewmodelAndView=newreturn}}使用組件掃描器省去在spring容器配置每個controller類的繁瑣。使用 掃描controller注解,<注解式處理器映射器,對類中標記@ResquestMap的方法進行映射,根據ResquestMap定義的url匹配ResquestMap標記的方法匹配成功返回HandlerMethod對象給前端控制器,HandlerMethodurl對應的方法Method。從spring3.1版本開始,了DefaultAnnotationHandlerMap的使用,推薦使<!--<!-- @RequestMap:定義請求url到處理器功能方法的映 從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用<!--<!--springmvc使用<mvc:annotation-driven>自動加載RequestMapHandlerMapRequestMapHandlerAdapter,可用在 配置文件中使DispatherServlet調用HandlerAdapter(處理器適配器)對HandlerMap找到Handler進行包裝、執(zhí)行。HandlerAdapter執(zhí)行HandlerDispatherServletDispatherServlet拿著ModelAndViewViewResolver(視圖解析器)進行視圖解View(View)DispatcherServlet進行視圖渲染,將Modelrequestmodelrequest整合springmvcmybatisspringmvcjarspringmvcmybatis詳細參考mybatis與spring整合章節(jié)Globalloggingconfiguration,建議開發(fā)環(huán)境中要用debuglog4j.rootLogger=DEBUG,stdout#Consoleoutput...log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%nclasspath<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-////DTDConfig 定義mappers<package.ssm.mapper"<<beans""""""<context:property-placeholder<beanid="dataSource" <propertyname="driverClassName"<propertyname="url"<propertyname="username"<propertyname="password"<propertyname="maxActive"<propertyname="maxIdle"讓spring管理sqlsessionfactory使用mybatis和spring<beanid="sqlSessionFactory"<propertyname="dataSource"ref="dataSource"加載mybatis<propertyname=<propertyname="configLocation"value="classpath:mybatis/SqlMapConfig.xml"/>mapper<bean<property <propertyname="sqlSessionFactoryBeanName"<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-////DTDMapper <mappersql<sql<if<iftest="!=!=''">andlike'%${}%'<selectid="findItemsList"parameterType="queryVo"select*from<includepublicpublicinterfaceItemsMapperpublicList<Items>findItemsList(QueryVoqueryVo)throws}1、Servicespring2、springServiceservice<<beans""""""<bean<propertyname="dataSource"<tx:adviceid="txAdvice"transaction- <tx:methodname="save*"<tx:methodname="insert*"<tx:methodname="delete*"<tx:methodname="update*"<tx:methodname="find*"propagation="SUPPORTS"read-<tx:methodname="get*"propagation="SUPPORTS"read-<aop:advisoradvice-pointcut="execution(* publicpublicinterfaceOrderServicepublicList<Items>findItemsList(QueryVoqueryVo)throws}privateItemsMapperpublicList<Items>findItemsList(QueryVoqueryVo)throwsExceptionreturn}}<<beans" 掃描controller注解, ponent-scanbase- <!-- <!--<!--ViewResolver--<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/><propertyname="prefix"value="/WEB-INF/jsp/"<propertyname="suffix"value=".jsp"<?xml<?xmlversion="1.0"encoding="UTF-<web-app" id="WebApp_ID"加載spring解決post springmvc<<<<<<<<contextConfigLocationcontextConfigLocationcontextConfigLocationspringmvc的配置文件默認在:WEB-INF/servlet的name+"-servlet.xml"-->>>publicclassOrderControllerprivateOrderServicepublicModelAndViewqueryItem()throwsExceptionList<Items>itemsList=//ModelAndViewmodelAndView=newreturn}}注解開發(fā)-基publicItemsfindItemById(intid)throwspublicvoidsaveItem(Itemsitems)throwspublicStringeditItem(Modelmodel,Integerid)throwsItemsitem=model.addAttribute("item",return}publicStringeditItemSubmit(Itemsitems)throwsreturn}URL在class上添加@RequestMap(url)指定通用請求前綴,限制此類下的所有方法請求 url:@RequestMap放在方法名上邊,如下: ("/queryItemGET@RequestMap(method=HTTPStatus405-Requestmethod'POST'notPOST@RequestMap(method=如果通過Post則報錯HTTPStatus405-Requestmethod'GET'notGET和POSTcontrollercontroller方法中定義ModelAndViewmodelviewcontrollerrequestresponserequestresponse指定響3responsejson數據如下:response.getWriter().write("jsonreturnRedirect重定Contrller方法返回結果重定向到一個urlreturnesponse.sendediect()requestresponse。requesturlforward轉controller方法執(zhí)行后繼續(xù)執(zhí)行另一個controller方法,如下商品修改提交后轉向到商品修改id參數可以帶到商品修改方法中。returnttco(t)共用一個request和response。所以轉發(fā)前請求的參數在轉發(fā)后仍然可以到。Handlerhttpkey/valueHandler方sessionsessionModelMapModel接口的實現類,通過Model或ModelMapItemsitem=itemService.findItemById(id);model.addAttribute("item",item);Modelspringmvc注解適配器對RequestMap標記的方法進行適配對方法中的形參會進行參數綁定,springmvcPropertyEditor(屬性編輯器)request請求的參數綁定到方法形參上,3.Xspringmvc就開始使用Converter進行參數綁定。整publicStringeditItem(Modelmodel,Integerid)throws}字符單精度/布爾publicStringeditItem(Modelmodel,Integerid,Booleanstatus)throws說明:對于布爾類型的參數,請求的參數值為truefalseTTPStatus400-RequiredIntegerparameter'XXXX'isnot}idvalue="item_id"item_id,所以頁面?zhèn)鬟fitem_id。HTTPStatus500-RequiredIntegerparameter'item_id'isnotpojopojo<input<inputtype="text"<inputtype="text"publicStringeditItemSubmit(Itemsitems)throws如果采用類似strutspojoactionPublicPublicclassQueryVoprivateItems}<input<inputtype="text"name=""<inputtype="text"name="items.price"publicpublicStringuseraddsubmit(Modelmodel,QueryVoqueryVo)throwsException{需自定義publicpublicclassCustomDateConverterimplementsConverter<String,Date>publicDateconvert(Stringsource)trySimpleDateFormatsimpleDateFormat=SimpleDateFormat("yyyy-MM-ddreturn}catch(Exceptione){}return}}配置方式<!--conversionService--<bean<property配置方式2(<!--<!-- <propertyname="webBindingInitializer"自定義webBinder<bean<propertyname="conversionService"ref="conversionService"<!--conversionService--<bean<property<property <input<inputtype="checkbox"name="item_id"<inputtype="checkbox"name="item_id"<inputtype="checkbox"name="item_id"publicpublicStringdeleteitem(String[]item_id)throwsException{}PublicclassPublicclassQueryVoPrivateList<Items>itemList;}<inputtype="text"name="itemsList[0].id"<inputtype="text"name="itemsList[0].name"value="${<inputtype="text"name="itemsList[0].price"<inputtype="text"name="itemsList[1].id"<inputtype="text"name="itemsList[1].name"value="${<inputtype="text"name="itemsList[1].price"<<c:forEachitems="${itemsList}"var="item"<td><inputtype="text"name="itemsList[${s.index}].name"value="${}"/></td><td><inputtype="text"name="itemsList[${s.index}].price"value="${item.price}"/></td>publicpublicStringuseraddsubmit(Modelmodel,QueryVoqueryVo)throwsException{}PublicclassQueryVoprivateMap<String,PublicclassQueryVoprivateMap<String,Object>itemInfo=newHashMap<String,}publicpublicStringuseraddsubmit(Modelmodel,QueryVoqueryVo)throwsException{}5.6.1HandlerMap根據url沒有找到Handler5.6.2Postweb.xml>><Connector<ConnectorURIEncoding="utf-8"connectionTimeout="20000"port="8080"另 StringStringuserNameISO8859-1tomcattomcatutf-8struts21、springmvc的是一個servlet即前端控制器,而struts2是一個filter過慮器設計為單例或多例(建議單例),struts2是基于類開發(fā),傳遞參數是通過類的屬性,只能3、Struts采用值棧請求和響應的數據,通過OGNL存取數據,springmvc通過參數解析器是將requestModelAndViewModelAndViewreques域傳輸到頁面。Jsp視圖解析器默認使用jstl。注解開發(fā)-高Spring3支持JSR-303驗證框架,JSR-303是JAVAEE6中的一項子規(guī)范,叫做Bean,JSRJavaBeanjar<bean校驗器<propertyname="providerClass"value="org.hibernate.validator.HibernateValidator"/><!--ValidationMperties--<propertyname="validationMessageSource"ref="messageSource"<bean資源文件名<property<propertyname="fileEncodings"value="utf-8"<propertyname="cacheSeconds"value="120"validator配置方式<mvc:annotation-driven配置方式2(自定義webBinder<bean<propertyname="validator"ref="validator" <propertyname="webBindingInitializer"publicpublicclassItemsprivateIntegerid;privateStringname;privateString如果在eclipse中編輯propertiesEclipse開發(fā)環(huán)境配置-indigo.docx”propedit插件。Controlleritems,BindingResultthrowsExceptionif(result.hasErrors())List<ObjectError>errors=for(ObjectErrorobjectError:errors){}return}中,在要校驗的pojo后邊添加BingdingResult,一個BindingResult對應一個pojo,且BingdingResultpojo的后邊。<%@pagelanguage="java"contentType="text/html;charset=UTF-/jsp/jstl/core""<<spring:hasBindErrors<c:forEachitems="${errors.allErrors}"${error.defaultMessagecontroller方法中將errormodelrequestcontrollermodel.addAttribute("errors",model.addAttribute("errors",}<c:forEach<c:forEachitems="${errors.allErrors}"${error.defaultMessagepublicpublicinterfaceValidGroup1}publicinterfaceValidGroup2}publicpublicclassItemsprivateIntegerprivateStringpublicString@ModelAttribute("item")Itemsitems,BindingResultthrowsException在@Validatedvalue={ValidGroup1.class}ValidGroup1分組校驗規(guī) 被注釋的元素必須為null 被注釋的元素必須不為null 被注釋的元素必須為true 被注釋的元素必須為 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 HibernateValidator附加的constraint=) 對于簡單數據類型,如:Integer、String、FloatModelpublicStringeditItems(Modelmodel,Integerid)throwsmodel.addAttribute("id",pojospringmvcpojo數據回顯,springmvcpojorequest域中,requestkeypojo的類名(首字母小寫,如下:controllerspringmvcitemsCustomrequest,相當于調用下邊的代碼:model.addAttribute("itemsCustom",itemsCustom);jsp1、綁定請求參數到pojo并且為模型數據傳到視圖頁面publicStringeditItemSubmit(ModelItemsCustom<td><inputtype="text"name="name"value="${<td><inputtype="text"name="price"value="${item.price,publicMap<String,String>Map<StringStringitemTypesnewHashMap<String,String>();itemTypes.put("101","數碼");itemTypes.put("102"母嬰return}<select<c:forEachitems="${itemtypes}"<optionvalue="${itemtype.key}">${itemtype.valuespringmvc在處理請求過程中出現異常信息交由異常處理器進行處理,自定義異常處理系統(tǒng)中異常包括兩類:預期異常和運行時異常RuntimeException,前者通過捕獲異常從請 異常,如果controller、service、dao拋出此類異常說明是系統(tǒng)預期處理的異常信息。publicpublicclassCustomExceptionextendsException/**privatestaticfinallongserialVersionUID=publicCustomException(Stringthis.message=message;}}privateStringpublicStringgetMessage()return}publicvoidsetMessage(Stringmessage)this.message=}}CustomExceptionCustomExceptioncustomException=publicModelAndViewresolveException(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex){{publicclassCustomExceptionResolverimplementsif(exinstanceofCustomException){customException=(CustomException)ex;customExceptionnewCustomException("}ModelAndViewmodelAndView=newModelAndView();modelAndView.addObject("message",customException.getMessage());return}}<%@<%@pagelanguage="java"contentType="text/html;charset=UTF-<%@taglib/jsp/jstl/core"prefix="c"<%@taglib/jsp/jstl/fmt"<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01 <metahttp-equiv="Content-Type"content="text/html;charset=UTF-${message<bean editItem調用serviceItemsItemsitem=if(item==thrownewCustomException("商品信息不存在}service上傳在tomcat上配置虛 即可F:\develop\upload\temp下的。也可以通過eclipse<bean設置上傳文件的最大尺寸為5MB<propertyjarpublicStringeditItemSubmit(Itemsitems,pictureFile)throwsStringpictureFile_name=StringnewFileName=FileuploadPic=}<<form<inputtype="hidden"name="pic"value="${item.pic}"filename與controller<td><c:iftest="${item.pic<br</c:if><inputtype="file"name="pictureFile"json@RequestBody注解用于讀取http請求的內容字符串,通過springmvc提供的HttpMessageConverterjson、xml等格式的數據并綁定到controller@RequestBodyhttpjsonjson數據轉換為javaControllerHttpMessageConverter接口轉換為指定格式的數據如:json,xmlResponse響應給客戶端@ResponseBody注解實現將controllerjsonjsonjson環(huán)境準Springmvc默認用MapJacksonHttpMessageConverter對json數據進行轉換,需要加jacksonjson<!--<!--<property注意:如果使用<mvc:annotation-driven/>controller編////public@ResponseBodyItemsItemsitems)throwsException{return}js引入<scriptfunctionurl:"${pageContext.request.contextPathurl:"${pageContext.request.contextPath}/item/editItemSubmit_Request}}:從上圖可以看出請求的數據是jsonkey/value環(huán)境準controller編////public@ResponseBodyItemseditItemSubmit_ResponseJson(ItemsthrowsExceptionreturn}jsfunctionfunctionvarusername=測試商品&price=99.9";{}})}從上邊的jsContentType的定義,ContentType從上圖可以看出請求的數據是標準的key/valuekey/valuejson結果,方便客戶端對結果進行RESTfulRESTful方式實現商品信息查詢,返回jsonDispatcherServletrest>>URL public@ResponseBodyviewItems(@PathVariable("id")Stringid,Modelmodel)throwsException{//serviceItemsCustomitemsCustom=return}如果RequestMap中表示為"/vie
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上??萍即髮W《大學生創(chuàng)新創(chuàng)業(yè)基礎與實務》2023-2024學年第一學期期末試卷
- 第六單元(教學實錄)二年級語文上冊同步備課系列(統(tǒng)編版)
- 建筑畢業(yè)實習報告范文
- 2024年中國木嫩芽市場調查研究報告
- 2024年中國智能直飲水機控制器市場調查研究報告
- 企業(yè)員工管理制度選集匯編
- 2024年中國總抗氧化能力測試盒市場調查研究報告
- 年產6000萬米高檔印花純棉布項目可行性研究報告寫作模板-備案審批
- C語言程序設計教程(第2版)-教學大綱、第一次教案
- 戲曲直播教學課程設計
- 學校傳染病控制課件
- 福建省泉州市2023-2024學年高一上學期期末質檢英語試題(解析版)
- 中華人民共和國民法典(總則)培訓課件
- 第三單元第1課 標志設計 課件 2024-2025學年人教版(2024)初中美術七年級上冊
- 2024年農貿市場日常管理制度例文(四篇)
- 《數字信號處理(第2版)》本科全套教學課件
- 上市央國企數智化進程中人才就業(yè)趨勢
- 2024版小學科學六年級上冊第四單元《能量》教學課件
- 4 古代詩歌四首《 觀滄?!方虒W設計
- 2024農村機井轉讓合同范本
- 2024公路工程危險性較大工程安全專項施工方案編制導則
評論
0/150
提交評論