<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SpringMVC 是一種基於 Java 的實現 MVC 設計模型的請求驅動型別的輕量級 Web 框架,跟Spring,Mybatis框架並稱為ssm。Spring MVC是由Spring官方提供的基於MVC設計理念的web框架也是基於Servlet封裝的用於實現MVC控制的框架,實現前端和伺服器端的互動。
為什麼叫MVC呢,這是因為,M是模型(Model):模型資料,主要處理業務邏輯;檢視(View):呈現模型,主要用與使用者進行互動;控制器(Controller):負責接收並處理請求,響應使用者端。
上面介紹了SpringMVC的概念,接下來介紹它的特點:
因此,綜上而言,SpringMVC的本質工作就是:
1.接收並解析請求
2.處理請求
3.資料渲染、響應請求
首先建立一個Web工程,在Web工程中新增以下依賴:
<properties> <spring.version>5.2.13.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
接下來建立的SpringMVC組態檔,在resources目錄下建立名為spring-servlet.xml
的檔案
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--IoC採用註解設定--> <context:annotation-config/> <context:component-scan base-package="com.mvc"/> <!-- 宣告MVC使用註解驅動 --> <mvc:annotation-driven/> </beans>
然後在web.xml中設定SpringMVC的前端控制器:
SpringMVC提供了一個名為DispatcherServlet的類(SpringMVC前端控制器),用於攔截使用者請求交由SpringMVC處理。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> //新增組態檔的路徑 </init-param> <load-on-startup>1</load-on-startup> //初始化 </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
首先建立一個控制器的類,在SpringMVC中,我們把接收使用者請求、處理使用者請求的類稱之為Controlelr(控制器)
我們建立一個控制器:
com.mvc.controllers
的包(包需要在Spring註解掃描的範圍內)@Controller
註解宣告此類為SpringMVC的控制器@RequestMapping("存取路徑")
宣告此控制器類的請求url(可以省略)@Controller @RequestMapping("/book") public class BookController { }
在控制器類中定義處理請求的方法
@RequestMapping("存取路徑")
用於宣告當前方法請求的url@Controller @RequestMapping("/book") public class BookController { @RequestMapping("/add") public void addBook(){ System.out.println("---book add"); } @RequestMapping("/list") public void listBooks(){ System.out.println("---book list"); } }
接下來部署靜態資源:
靜態資源是指專案中的HTML、css、js、圖片、字型等
/* 和 / 的區別
/* 攔截所有的HTTP請求,包括.jsp的請求,都做為控制器類的請求路徑來處理
/ 攔截所有的HTTP請求,但不包括.jsp的請求,不會放行靜態資源的請求(html/css/js/圖片)
在springMVC的組態檔,新增如下靜態資源放行的設定
<!--設定靜態資源放行--> <mvc:resources mapping="/css/**" location="/css/"/> <mvc:resources mapping="/js/**" location="/js/"/> <mvc:resources mapping="/imgs/**" location="/imgs/"/> <mvc:resources mapping="/pages/**" location="/pages/"/>
前端提交資料到控制器
輸入框需要提供name屬性,SpringMVC控制器是通過name屬性取值的
<body> <h3>新增圖書</h3> <form action="book/add" method="post"> <p>圖書名稱:<input type="text"/></p> <p>圖書作者:<input type="text"/></p> <p>圖書價格:<input type="text"/></p> <p><input type="submit" value="提交"/></p> </form> </body>
URL提交
<a href="book/add?bookName=Java" rel="external nofollow" >URL提交</a>
AJAX提交:請求行、請求頭、請求體都可以用來傳值
<input type="button" value="ajax提交" id="btn1"/> <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> $("#btn1").click(function(){ var obj = {}; obj.bookName = "Java"; obj.bookAuthor="張三"; obj.bookPrice = 3.33; $.ajax({ url:"book/add", type:"post", headers:{ }, contentType:"application/json", data:obj, success:function(res){ console.log(res); } }); }); </script>
控制器接收前端提交的資料
@RequestParam 接收請求行傳值
**@RequestParam
**註解用於接收請求行傳遞的資料
前端提交資料
<form action="book/add" method="post"> <p>圖書名稱:<input type="text" name="name"/></p> <p>圖書作者:<input type="text" name="author"/></p> <p>圖書價格:<input type="text" name="price"/></p> <p><input type="submit" value="提交"/></p> </form>
控制器接收資料
/*接收請求行資料*/ @RequestMapping("/add") public void addBook(@RequestParam("name") String a, @RequestParam("author") String b, @RequestParam("price") double c){ System.out.println("---book add"); System.out.println(a); System.out.println(b); System.out.println(c); }
注意
如果控制器方法中接收資料的引數名與請求行傳值的key一致,則@RequestParam註解可省略
@RequestMapping("/add") public void addBook(String name,String author, double price){ System.out.println("---book add"); System.out.println(name); System.out.println(author); System.out.println(price); }
前端:
<input type="button" value="ajax提交" id="btn1"/> <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> $("#btn1").click(function(){ $.ajax({ url:"book/list", type:"post", headers:{ token:"wahahaawahaha" }, success:function(res){ console.log(res); } }); }); </script>
控制器
@RequestMapping("/list") public void listBooks(@RequestHeader("token") String token){ System.out.println("---book list"); }
ajax封裝請求體資料
$.ajax({ ..., contentType:"application/json", data:obj,, ... })
**@RequestBody
**註解用於接收請求行頭傳遞的資料
前端:
<input type="button" value="ajax提交" id="btn1"/> <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> $("#btn1").click(function(){ var obj = {}; obj.bookName = "Python"; obj.bookAuthor="傑哥"; obj.bookPrice = 2.22; var s = JSON.stringify(obj); //將物件轉換成JSON格式 $.ajax({ url:"book/update", type:"post", contentType:"application/json", data:s, //如果data的值為json格式字串,contentType必須設定為"application/json" success:function(res){ console.log(res); } }); }); </script>
@RquestBody 將前端請求體提交的JSON格式資料轉換成Java物件,依賴jackson包
匯入jackson依賴:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.1</version> </dependency>
控制器
@RequestMapping("/update") public void update(@RequestBody Book book){ System.out.println("---book update"); System.out.println(book); }
控制器響應前端請求
控制器響應同步請求
同步請求:form、超連結
處理同步請求的方法的返回型別定義為String或者ModelAndView,以實現頁面的跳轉
返回型別為String
轉發
@RequestMapping("/add") public String addBook(String name, String author, double price){ System.out.println("---book add"); return "/tips.jsp"; }
重定向
@RequestMapping("/add") public String addBook(String name, String author, double price){ System.out.println("---book add"); return "redirect:/tips.jsp"; }
返回型別為 ModelAndView
轉發
@RequestMapping("/add") public ModelAndView addBook(String name, String author, double price){ System.out.println("---book add"); ModelAndView modelAndView = new ModelAndView("/tips.jsp"); return modelAndView; }
重定向
@RequestMapping("/add") public ModelAndView addBook(String name, String author, double price){ System.out.println("---book add"); ModelAndView modelAndView = new ModelAndView("redirect:/tips.jsp"); return modelAndView; }
控制器響應非同步請求
非同步請求:ajax請求
使用response中的輸出流進行響應
void
HttpServletResponse response
引數@RequestMapping("/update") public void update(@RequestBody Book book, HttpServletResponse response) throws IOException { System.out.println("---book update"); System.out.println(book); //使用ObjectMapper將物件轉換成JSON格式字串 String s = new ObjectMapper().writeValueAsString(book); response.setCharacterEncoding("utf-8"); response.setContentType("application/json"); PrintWriter out = response.getWriter(); out.println(s); out.flush(); out.close(); }
直接在控制器方法返回響應的物件
@ResponseBody
註解,將返回的物件轉換成JSON響應給ajax請求@ResponseBody
註解@RequestMapping("/update") @ResponseBody public List<Book> update() { System.out.println("---book update"); List<Book> books = new ArrayList<Book>(); books.add(new Book(1,"Java","老張",2.22)); books.add(new Book(2,"C++","老李",3.22)); return books; }
控制器響應同步請求的資料傳遞
對於同步請求的轉發響應,我們可以傳遞引數到轉發的頁面
返回型別為String:
//1.在控制器方法中定義一個Model型別的引數 //2.在return頁面之前,向model中新增鍵值對,新增的鍵值對就會被傳遞到轉發的頁面 @RequestMapping("/add") public String addBook(String name, String author, double price,Model model){ model.addAttribute("key1","value1"); model.addAttribute("book",new Book(1,"Java","老張",2.22)); return "/tips.jsp"; } //除了使用Model物件傳值外,還可以直接使用HttpServletRequest物件 @RequestMapping("/add") public String addBook(String name, String author, double price,HttpServletRequest request){ request.setAttribute("key1","value1"); request.setAttribute("book",new Book(1,"Java","老張",2.22)); return "/tips.jsp"; }
返回型別為ModelAndView:
@RequestMapping("/add2") public ModelAndView addBook2(String name, String author, double price){ ModelAndView modelAndView = new ModelAndView("/tips.jsp"); modelAndView.addObject("key1","value1"); modelAndView.addObject("book",new Book(1,"Java","老張",2.22)); return modelAndView; }
到此這篇關於SpringMVC框架的介紹與使用的文章就介紹到這了,更多相關SpringMVC介紹與使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45