整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          SpringMvc4.x基礎(chǔ)(一):項目快速搭建

          SpringMvc4.x基礎(chǔ)(一):項目快速搭建

          文地址:http://blog.longjiazuo.com/archives/1389

          這是對springMvc4.x相關(guān)特性的一個總結(jié)和整理,會有一系列文章,歡迎大家閱讀,交流,討論。

          一. 點睛

          Spring MVC提供了一個DispatcherServlet來開發(fā)Web應(yīng)用。在Servlet2.5以及以下的時候只要在web.xml下配置元素即可。但下面我們采用Servlet3.0+無web.xml的配置方式,在Spring MVC里面實現(xiàn)WebApplicationInitializer接口便可實現(xiàn)等同于web.xml的配置。

          下面將基于Maven搭建零配置的Spring MVC原型項目。

          二. 示例

          1. 快速構(gòu)建Maven項目

          說明:系列文章的內(nèi)容有依賴關(guān)系,后面章節(jié)的內(nèi)容依賴前面章節(jié)內(nèi)容的配置。為了方便后面內(nèi)容的講解,所以構(gòu)建的是多模塊maven項目,公用的依賴配置在父工程的pom.xml文件里面,如果在當前工程的pom文件里面找不到的依賴可以查看父工程的配置,后面的章節(jié)也是如此,不再說明。

          pom.xml的內(nèi)容如下:

          2. 日志配置

          在src/main/resources目錄下,新建logback.xml用來配置日志,內(nèi)容如下:

          代碼解釋:

          ① 將org.springframework.web包下的類的日志級別設(shè)置為DEBUG,我們開發(fā)Spring MVC經(jīng)常出現(xiàn)和參數(shù)類型相關(guān)的4XX錯誤。設(shè)置此項我們將會看到更詳細的錯誤信息。

          3. 演示頁面

          在src/main/resources下建立views目錄,再建其子目錄quickStart,并在此目錄下新建index.jsp,內(nèi)容如下:

          代碼解釋:

          也許你會問,為什么頁面不放在Maven標準的src/main/webapp/WEB-INF下,此處這樣建的目的主要是讓你習(xí)慣Spring Boot的頁面習(xí)慣的放置方式,Spring Boot的頁面就放置在src/main/resources下。

          4. Spring MVC配置

          代碼解釋:

          此處無任何特別之處,只是一個普通的Spring配置類。這里我配置了JSP的ViewResolver,用來映射路徑和實際頁面的位置,其中,@EnableWebMvc注解會開啟一些默認配置,如一些ViewResolver
          或者MessageConverter等。

          在此處要特別解釋一下Spring MVC的ViewResolver,這是Spring MVC視圖(JSP下就是html)渲染的核心機制;SpringMVC里有一個接口叫做ViewResolver(所有的ViewResolver都實現(xiàn)該接口),實現(xiàn)這個接口要重寫方法resolveViewName(),這個方法的返回值是接口View,而View的職責(zé)就是使用model,request,response對象,并將渲染的視圖(不一定是html,可能是json,xml,pdf)返回給瀏覽器,在以后的文章我會介紹更多關(guān)于ViewResolver的內(nèi)容。

          可能你會對當前路徑前綴配置為/WEB-INF/classes/views/有些奇怪,怎么和我開發(fā)的目錄不一致?因為我們看到的頁面效果是運行時而不是開發(fā)時候的代碼,運行時代碼會將我們的頁面自動編譯到/WEB-INF/classes/views/下,下圖是運行時的目錄結(jié)構(gòu),這樣我們就能理解前綴為什么寫成這樣,在Spring Boot中,使用Thymeleaf作為模板,將不需要這樣的設(shè)置。


          5. Web配置

          代碼解釋:

          ① WebApplicationInitializer是Spring提供用來配置Servlet3.0+配置的接口,從而實現(xiàn)替代web.xml的位置。實現(xiàn)此接口將會自動被SpringServletContainerInitializer(用來啟動Servlet3.0容器)獲取到。

          ② 新建WebApplicationContext,注冊配置類,并將其和當前servletContext關(guān)聯(lián)。

          ③ 注冊Spring MVC的DispatcherServlet。

          6. 簡單控制器

          代碼解釋:

          ① 利用@Controller注解聲明是一個控制器。

          ② 利用@RequestMapping配置URL和方法之間的映射。

          ③ 通過上面ViewResolver的Bean配置,返回值為index,說明我們的頁面放置的路徑為/WEB-INF/classes/views/。

          7.運行

          將程序部署到Tomcat中,我設(shè)置的Tomcat端口是80,現(xiàn)在啟動Tomcat,并訪問http://localhost/springMvc4.x-quickStart/index,運行結(jié)果如下圖所示:

          三. 源代碼示例:

          需要閱讀和下載源碼的朋友請訪問原文地址。

          圖&作者 | YourBatman,CSDN博客專家

          責(zé)編 | 唐小引

          出品 | CSDN(ID:CSDNnews)

          前言

          千呼萬喚始出來!自從官方在 2020-01-20 發(fā)布了其 2020 年的 Roadmap 后,我便持續(xù)關(guān)注著、期待著 JetBrains IntelliJ IDEA 在“新 10 年”的首個版本的發(fā)布。這不,就在 4 月 9 日,發(fā)布了其“新 10 年”的首個版本 —— IntelliJ IDEA 2020.1。

          按照國際慣例,作為大版本號的升級,一般都會“搞點事情”,而事實確實如此(包括了支持中文)。

          說明:2020 是 JetBrains 公司成立 20 周年,小伙子是 20 歲的大男孩了。

          What’s new(新特性)

          IntelliJ IDEA 2020.1 添加了對 Java 14 的支持、為部分 Web 和測試框架添加新功能,通過數(shù)據(jù)流分析輔助升級了調(diào)試器,新增了 LightEdit 模式,以及支持從 IDE 直接下載和配置 JDK 等!

          1、支持 Java 14

          2020 年 3 月 17 日,Oracle 的 JDK/Java 14 正式 GA(General Available),這是自 Java 采用六個月一次的發(fā)布周期后的第五次發(fā)布。

          “咱們”IDEA 順序跟上,提供了支持其新特性。除了針對 record 提供完整的代碼洞察支持,IDE 還允許用戶快速創(chuàng)建新 record,生成其構(gòu)造函數(shù)與組件,以及對既有錯誤發(fā)出警報。另外,IDE 現(xiàn)已支持 instanceof 運算符的模式匹配,其中包括新的檢查以及快速修復(fù),后者用簡潔明了的新模式變量快速簡化了冗長的 instanceof-and-cast 慣用代碼。

          2、從 IDE 直接下載 JDK

          當你還在吐槽現(xiàn)在 JDK 下載起來越來越麻煩的時候,IntelliJ IDEA 此舉會不會讓你感動到哭?

          您無需再從網(wǎng)絡(luò)中搜索不可或缺的 JDK。從 IntelliJ IDEA 2020.1 開始,在創(chuàng)建并配置項目時,您可以直接從 IDE 下載并配置 JDK 構(gòu)建。如果您打開下載的項目,IDE 將檢查計算機是否安裝了為此項目配置的 JDK。如果未安裝,IDE 將提示您下載 JDK。當然你也可以自己主動下載:

          下載 JDK 的 vendor 源可以有多種可選(木有官方正統(tǒng)的 Oracle 喲~):

          3、更好的 Java 代碼檢查

          在 IntelliJ IDEA 的每個新版本中,都會擴展其靜態(tài)代碼分析功能。此版本也不例外。除了上述改進外,還新增了多項代碼檢查。它們可以檢查 SimpleDateFormat 模式中的大寫字母,分析日期格式設(shè)置,搜索其他冗余方法調(diào)用,以及報告并建議消除字符串文字中多余的轉(zhuǎn)義字符等。

          4、LightEdit 模式

          “輕編輯”模式,用意是用來作為簡單的文本編輯器。IntelliJ IDEA 2020.1 增加了期待已久的 LightEdit 模式。如今,用戶無需創(chuàng)建或加載整個項目,即可在類似文本的編輯器中快速修改獨立文件。您可以從命令行,IDE 的歡迎屏幕或操作系統(tǒng)文件管理器中,在此新的輕量級編輯器中打開文件。此外,使用“Open File in Project” (Alt+Enter) 意圖,可以從 LightEdit 模式切換至完整項目模式。

          想法是好的,但我感覺有點雞肋:還要通過命令行模式打開,并且有編輯功能的閹割~

          5、Javadoc 渲染

          這個小功能本人非常的喜歡,照顧到了愛好讀源碼一族。在編輯器中閱讀 Javadoc 可能令人不勝其煩。此類文本中充斥著各種標記,在需要與參考鏈接和圖像進行交互時,更是雪上加霜。正因如此,IDEA 在編輯器中增加了一種渲染 Javadoc 的方法。通過 Help | Find actions | Render documentation comments on file opening 可以啟用此功能。

          提個小建議:渲染后就不能鼠標選中 or 復(fù)制了,期望可以選中和復(fù)制,這樣講課起來做示例會方便很多。

          6、改進的導(dǎo)航欄/面包屑欄

          這個小功能我也是非常的喜歡,當然我平時使用快捷鍵會更多,但也還是喜歡此功能。IntelliJ IDEA 2020.1 提供了一種新選項來簡化項目導(dǎo)航。新導(dǎo)航欄可以顯示 Java 類和接口中的方法,用戶無需滾動屏幕,即可直接跳轉(zhuǎn)到需要在文件中查看的行。如果之前很少使用導(dǎo)航欄,那么何不體驗一下這項功能。通過 View | Appearance | Navigation Bar 即可將其打開(默認就是打開的)。

          7、Zen 模式(禪模式)

          很高級有木有,對于快捷鍵控,平時工作中我個人還挺喜歡使用這種模式編碼,投入度高效率就高了。

          IntelliJ IDEA 2020.1 在編輯器中引入了新的 Zen 模式。這種模式有助于消除所有干擾項,使您可以專注于源代碼。Zen 模式將“免打擾模式”和“全屏模式”完美融合,無需同時開啟這兩種模式。從主菜單中選擇 View | Appearance | Enter Zen Mode,全身心沉浸在代碼世界中。

          禪模式下的全屏截圖如下:

          8、調(diào)試器:數(shù)據(jù)流分析輔助

          該功能挺不錯的,輔助你調(diào)試,提高調(diào)試效率。

          IntelliJ IDEA 2020.1 為 JVM 調(diào)試器新增了數(shù)據(jù)流分析功能。在代碼實際執(zhí)行前,這項功能可對執(zhí)行情況進行預(yù)測。當應(yīng)用程序在斷點處停止時,IDE 將根據(jù)程序的當前狀態(tài)執(zhí)行數(shù)據(jù)流分析,檢查/預(yù)測接下來的運行結(jié)果。要在調(diào)試器中使用 DFA,請在 Settings/Preferences | Build, Execution, Deployment | Debugger | Data Views | Java 下啟用該功能(默認是啟用的)。

          9、調(diào)試器:屬性置頂

          又是一個非常非常實用的小功能。簡單的說,你在調(diào)試的時候呢,有些對象的字段太多了,要去找他有時候還要翻頁或者下拉很多,一般 IDEA 調(diào)試可能要走好多遍代碼,你現(xiàn)在在第一次調(diào)試后,吧這個調(diào)試的字段置頂,以免老是要去找。

          10、初步支持 HProf 快照分析

          .hprof 文件一般指的是內(nèi)存快照文件,用于做 JVM 內(nèi)存溢出分析。之前 IDEA 一般借助 jvisualvm.exe 這個好用的工具來打開/分析此文件,現(xiàn)在 IDEA 內(nèi)置就支持啦。

          IntelliJ IDEA 2020.1 可以打開 .hprof 內(nèi)存轉(zhuǎn)儲文件,這種文件有助于識別內(nèi)存泄漏,并找到優(yōu)化內(nèi)存使用率的方法。例如,您可以查看總體大小、實例數(shù)量以及堆棧跟蹤等基本文件信息。這些文件還列出了按類分組的所有根對象、按實例數(shù)或大小排序的所有類以及帶有字段值查看器的所有類實例。

          • 使用 Demo

          先使用 jmap -dump:file=test.hprof,format=b 你的 pid 拿到一份 dump 文件:test.hprof。然后使用 IDEA 的此功能把該文件讀取進來:

          文件讀取進來后,可在其“專屬視窗”看到分析結(jié)果:

          需要注意的是:這項功能目前處于早期階段,功能相對撿漏,后續(xù)的主要版本中將繼續(xù)改進,加入新的功能。

          11、Git 交互體驗優(yōu)化

          此版本在 Git 的交互體驗上做了優(yōu)化,使得使用起來確實更得心應(yīng)手了。

          • 新 Commit 工具窗口:

          可通過此頁面右上角的小齒輪,switch 切換為彈窗模式:

          前者若想生效,你需要配置它成為默認的 commit 窗口模式,如下截圖所示:

          對應(yīng)的,還會衍生出 Git 其它操作中一些新的交互方式,見下圖們:

          這個小功能非常贊:可以搜索分支以及刷新啦。

          12、改進的 HttpClient 工具

          IntelliJ IDEA 2020.1 中的 HTTP 客戶端更加智能。現(xiàn)在,它可以正確地自動補全路徑變量和 URL 路徑,引導(dǎo)用戶直接從 HTTP 請求文件訪問相關(guān)端點。IDEA 還為 Spring 用戶提供了一項更新:Spring MVC 處理程序方法現(xiàn)在獲得了指示 URL 映射的間距圖標。使用它可以創(chuàng)建或打開現(xiàn)有的 HTTP 請求文件并導(dǎo)航到 HTTP 客戶端。

          13、統(tǒng)一的淺色主題

          IntelliJ IDEA 2020.1 將新的淺色主題作為其在所有操作系統(tǒng)中統(tǒng)一使用的默認主題。IntelliJ 推薦你使用!但是像我用習(xí)慣了我的“自定義白色系主題”,所以我會切換回來的,看個人習(xí)慣嘍~

          另外它默認使用的 JetBrains Mono 字體,若你不喜歡你也可以改回自己原來的。

          此字體據(jù)說評價不錯,但我習(xí)慣了之前的,那就改吧。

          14、小彩蛋:支持中文

          這算此版本給的一個小彩蛋。需要注意的是:源生是不支持中文的,需要你額外下載 Chinese (Simplified) Language Pack 這個由官方提供的簡體中文插件:

          漢化后的效果如下:

          感謝捷克工程師(可能是由國人實現(xiàn))對我大天朝程序員的“照顧”,且不說這個必要性到底有多大,但從側(cè)面體現(xiàn)了我國 IT 產(chǎn)業(yè)在國際上的分量越來越重了,這是一個好的信號,是我們的驕傲。

          由于插件還是 EAP 版本,所以有些地方漢化不是非常徹底,不過絕大部分都是很 OK 的。程序員“老鳥”一定會覺得漢化的 IDE 很 low,但很明顯這對新手是非常友好的。

          15、其它

          • 更好的框架支持

          對 Spring WebFlux、Spring、JMS、RxJava、Swagger Codegen...等最主流框架均做了些許更好的支持,你使用過程中自會體會到的。

          • 對 Docker、Kubernetes 更好支持

          為了便于您從 Docke 注冊表中拉取映像,此版本重新設(shè)計了 UI 并移除了彈出對話框?,F(xiàn)在,只需點擊 Service 工具窗口左側(cè)窗格中的 Images 節(jié)點,IntelliJ IDEA 即可在右側(cè)窗格中打開 Images Console 選項卡,您從中可以輕松拉取映像。IDE 還為映像提供了補全功能。

          Kubernetes 方面:通過直接從編輯器間距調(diào)用“Apply”命令,您可以更新 Kubernetes 集群,從而匹配在本地文件中定義的狀態(tài),使用中自行體會哈。

          • Maven/Gradle 自動導(dǎo)入更加智能

          使用中會體會到。

          • 支持 Scala 3

          說明:初步支持,隨著 Scala 3 的發(fā)展也會逐漸提供更多支持。

          • 拆分 Terminal 終端會話

          這個小功能也非常好用。此版本新增了垂直或水平拆分終端會話的功能,便于用戶并行運行多個會話。您可以從終端調(diào)用上下文菜單來創(chuàng)建、導(dǎo)航和關(guān)閉拆分的終端會話。

          • 運行配置可存儲到文件

          這個小功能非常不錯,特別適合團隊協(xié)作。從 v2020.1 開始,運行配置可以靈活存儲于項目文件夾中。為此,請打開 Run/Debug Configurations 對話框,選中右上方的 Store as project file,然后點擊齒輪圖標。之后將打開一個彈出窗口,您可以在其中選擇運行配置的存儲位置。

          • 徹底過度到 JBR11 版本

          從此版本開始,JetBrains Runtime 8 (JBR8) 已成歷史,已徹底過渡到 JetBrains Runtime 11 (JBR11)。

          總結(jié)

          作為 2020 年的第一個版本,有點“跨時代”的意思,帶來的新特性們還是可圈可點的。

          升級建議:如果你不是“正經(jīng)付費黨”,再次提示你:升級需謹慎哦(當然嘍,若純從使用角度來說,我本人是強烈建議你使用它的)。

          最后,依舊要向那些孜孜不倦為 IT 行業(yè)提供優(yōu)秀工具的人們致敬!??!特別是捷克的那些創(chuàng)造者們,你們創(chuàng)造了非常好的工具提高了生產(chǎn)力,推動了社會某些產(chǎn)業(yè)的進步,功勛卓越?。?!

          版權(quán)聲明:本文為 CSDN 博主「YourBatman」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

          原文鏈接:https://blog.csdn.net/f641385712/article/details/105435920

          ?朱廣權(quán)李佳琦直播掉線,1.2 億人在線等

          ?“抗疫”新戰(zhàn)術(shù):世衛(wèi)組織聯(lián)合IBM、甲骨文、微軟構(gòu)建了一個開放數(shù)據(jù)的區(qū)塊鏈項目!

          ?快速搭建對話機器人,就用這一招!

          ?據(jù)說,這是當代極客們的【技術(shù)風(fēng)向標】...

          ?iPhone 12系列旗艦有望分批發(fā)布;美威脅吊銷中國電信在美經(jīng)營許可,外交部發(fā)言人回應(yīng);VS Code新版發(fā)布| 極客頭條

          今日福利:評論區(qū)留言入選,可獲得價值299元的「2020 AI開發(fā)者萬人大會」在線直播門票一張。 快來動動手指,寫下你想說的話吧。

          喜大普奔啊,果斷“在看”一下!

          項目中,經(jīng)常用到的一個功能就是文件的上傳和下載,不過大多數(shù)情況下都是通用的工具類,自己寫的情況較少,這里寫個通過Spring框架和ajaxFileUpload插件實現(xiàn)上傳的小功能,做個練習(xí)和記錄。
          首先配置下SpringMVC的配置文件,配置支持文件上傳

          <!-- 配置MultipartResolver 用于文件上傳 使用spring的CommosMultipartResolver 
              說明:
              p:defaultEncoding="UTF-8":這里設(shè)置默認的文件編碼為UTF-8,必須與用戶JSP的默認編碼一致;
              p:maxUploadSize="5000000":指定文件上傳大小,單位為字節(jié);
              p:uploadTempDir="fileUpload/temp":文件上傳臨時目錄,上傳完成后,就會將臨時文件刪除;
              
              -->  
               <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"  
                  p:defaultEncoding="UTF-8"  
                  p:maxUploadSize="5000000"  
                  p:uploadTempDir="fileUpload/temp"  
               >  
              </bean>  

          然后寫個簡單的JSP頁面,為了方便綁定數(shù)據(jù),引入Spring自帶的Form表單標簽,引入語句

          <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 

          Form表單實現(xiàn)一個簡單的注冊功能,雖然說美感不好,這里還是引用了下bootstrap做了個簡單的排版。因為原版的file標簽的格式無法調(diào)整,所有用了其他的小標簽代替,然后用按鈕去觸發(fā)file標簽

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%
          String path=request.getContextPath();
          String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
          request.setAttribute("_path", path);
          %>
          <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <base href="<%=basePath%>">
              
              <title>My JSP 'index.jsp' starting page</title>
              
              <meta http-equiv="pragma" content="no-cache">
              <meta http-equiv="cache-control" content="no-cache">
              <meta http-equiv="expires" content="0">    
              <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
              <meta http-equiv="description" content="This is my page">
              <!--
              <link rel="stylesheet" type="text/css" href="styles.css">
              -->
              <link rel="stylesheet" href="<%=basePath%>static/css/bootstrap.css"/>
              <script type="text/javascript" src="<%=basePath%>static/js/jquery.min.js"></script>
              <script type="text/javascript" src="<%=basePath%>static/js/ajaxfileupload.js"></script>
              <script type="text/javascript" src="<%=basePath%>static/js/bootstrap.js"></script>
              <script type="text/javascript" src="<%=basePath%>static/js/jquery.json-2.4.js" charset="UTF-8"></script> 
              <script type="text/javascript">
                  var path="${_path}";
                  $(function(){
                      
                      /* 重置Form表單功能 */
                      $("#clean").click(function(){
                          document.getElementById("user").reset();
                          $("#userName").attr("value","");
                          $("#password").attr("value","");
                          $("#name").attr("value","");
                          $("#sex").attr("value","");
                          $("#file").attr("value","");
                      });
                      
                      /* begin 附件上功能 */
                      $("#choose").click(function(){
                          $("#fileUpload").click();
                      });
                      $("#fileUpload").change(function(){
                          $("#file").attr("value",$("#fileUpload").val());
                          $.ajaxFileUpload({  
                              type: "POST",  
                              url: path+"/fileUpload.do",  
                              data:{fileName:$("#fileUpload").val()},//要傳到后臺的參數(shù),沒有可以不寫  
                              secureuri : false,//是否啟用安全提交,默認為false  
                              fileElementId:'fileUpload',//文件選擇框的id屬性  
                              dataType: 'json',//服務(wù)器返回的格式  
                              async : false,  
                              success: function(mes){  
                                 if(mes.message=="OK"){
                                     alert("附件上傳成功");
                                 }
                                 if(mes.message=="NG"){
                                     alert("附件上傳失敗");
                                 }
                              },  
                              error: function (){  
                                  alert("附件上傳失敗");
                              }  
                          });
                      });
                      /* end 附件上功能 */
                  });
              </script>
            </head>
            
            <body>
            <div class="container" style="width: 100%" >
              <div> </div>
              <div class="row">
                  <div class="col-lg-5 col-md-5 col-sm-5 col-xs-5"></div>
                  <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1" >注冊頁面</div>
              </div>
             <div> </div>
             <div class="row">
                  <form:form commandName="user" action="${_path }/register.do"  method="post" enctype="multipart/form-data">
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-1 col-md-1 col-sm-1 col-xs-1" style="text-align:right">賬號:</div>
                      <form:input path="userName" type="text" value="" class="input-large"/>
                      <div> </div>
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-1 col-md-1 col-sm-1 col-xs-1" style="text-align:right">密碼:</div>
                      <form:input path="password" type="password" class="input-large"/>
                      <div> </div>
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-1 col-md-1 col-sm-1 col-xs-1" style="text-align:right">姓名:</div>
                      <form:input path="name" type="text" value="" class="input-large"/>
                      <div> </div>
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-1 col-md-1 col-sm-1 col-xs-1" style="text-align:right">性別:</div>
                      <form:input path="sex" type="text" value="" class="input-large"/>
                      <div> </div>
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-1 col-md-1 col-sm-1 col-xs-1" style="text-align:right">附件:</div>
                      <input id="fileUpload" name="fileUpload" type="file"  style=" display: none">
                      <form:input type="text" class="input-large" path="file" />
                      <input id="choose" type="button" value="選擇" class="btn btn-primary btn-xs"/>
                      <div> </div>
                      <div  class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>
                      <div  class="col-lg-2 col-md-2 col-sm-2 col-xs-2" style="text-align:right">
                          <input id="upload" type="submit" value="提交" class="btn btn-default btn-sm"/>
                              
                          <input id="clean" type="button" value="清除" class="btn btn-default btn-sm"/>
                      </div>
                      
                  </form:form>
              </div>
            </div>
            </body>
          </html>
          

          后臺頁面控制器,因為用了SpringMVC的form表單,所以在渲染的時候模型中一定要有user這個對象,所以我們用控制器跳轉(zhuǎn)頁面

          @RequestMapping("/Login.do")
              public String Login(@ModelAttribute("user") User user, Model model){
                  System.out.println("進入");
                  user.setName("小明");
                  user.setSex("男");
                  user.setUserName("葉良辰");
                  model.addAttribute("user", user);
                  
                  return "index";
                  
              }

          這里為了顯示SpringMVC form的自動綁定功能,我給user對象設(shè)置了值,在JSP頁面,如果form:input標簽由path屬性和user里的屬性一樣,會自動設(shè)置值

          附件的js代碼在上面的JSP頁面中已經(jīng)寫好了,下面是后臺控制的controller,因為我們配置了multipartResolver,所以form表單是設(shè)置了enctype="multipart/form-data,后臺一樣能直接取出文本值
          接受文本框內(nèi)容的controller

              @RequestMapping("/register.do")
              public String register(@ModelAttribute("user") User user, Model model){
          
                  model.addAttribute("user", user);
                  System.out.println(user);
                  return "index";
                  
              }

          附件上傳的controller


          主站蜘蛛池模板: 国产亚洲综合一区柠檬导航| 国产高清视频一区三区| 精品少妇人妻AV一区二区| 福利电影一区二区| 国产在线一区二区三区| 国产一区二区三区免费视频| 中文字幕一区二区三区在线观看| 一区二区三区观看免费中文视频在线播放 | 日本一区二区三区不卡视频| 国产伦理一区二区| 一区二区三区在线看| 国产精品亚洲一区二区三区| 精品欧美一区二区在线观看 | 色噜噜狠狠一区二区三区果冻 | 一区二区三区国产精品| 国产精品视频一区二区三区不卡| 无码aⅴ精品一区二区三区| 99热门精品一区二区三区无码| 色狠狠AV一区二区三区| 无码免费一区二区三区免费播放| 中文字幕一区日韩在线视频| 婷婷国产成人精品一区二| 国产精品免费综合一区视频| 波多野结衣一区二区| 亚洲精品日韩一区二区小说| 亚洲一区二区三区久久久久| 国产AV一区二区三区传媒| 精品国产日产一区二区三区| 国产一区二区三区在线看| 国产精品女同一区二区| 末成年女A∨片一区二区| 亚洲AV无一区二区三区久久 | 91精品福利一区二区| 在线观看视频一区二区| 欧美av色香蕉一区二区蜜桃小说| 中文字幕在线不卡一区二区| 亚洲精品一区二区三区四区乱码| 色综合久久一区二区三区| 人妻无码久久一区二区三区免费| 亚欧成人中文字幕一区| 精品国产a∨无码一区二区三区|