您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何在AngularJs中結合SpringMVC使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
首先我們把springmvc的環境搭好,先來web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/AngularJSTestApplicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>baobaotao</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/AngularJSTestApplicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>baobaotao</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
這里我把applicationContext改了一個名字,以免和我自己本身用的沖突,并且設置了一下觸發springmvc的url模式,是以.do結尾發起請求
下面是AngularJSTestApplicationContext.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:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.baobaotao.web"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
我直接用了<mvc:annotation-driven /> 就用默認的數據轉換器了,因為默認的里面有對Json串進行數據綁定的轉換器
這樣mvc的環境已經搭建好了,下面我們寫頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html ng-app=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../angular.js"></script> <title>AngularJSTest</title> </head> <body ng-controller="MyController"> <p>User</p> <p>ID</p> <input id="id" name="id" ng-model="saveUser.id"> <br> <p>Name</p> <input id="id" name="name" ng-model="saveUser.name"> <br> <p>age</p> <input id="id" name="age" ng-model="saveUser.age"> <br> <button ng-click="getUser()">提交</button> <script> function MyController($scope, $http){ $scope.saveUser = { id:1, name:"John", age:"16" }; $scope.getUser = function(){ $http({ method: "POST", url: "http://localhost:8080/SpringMVC/AngularJS/getUser.do", data: $scope.saveUser }).success(function (data, status){ // handle success }) }; } </script> </body> </html>
頁面很簡單,有三個輸入參數,id,name,age綁定了控制器里面的saveUser對象的屬性,這個也對應了我后臺需要綁定的數據的屬性名稱。對于AngularJs,在body標簽處聲明了一個控制器MyController,之后在script中對這個控制器里面的saveUser 對象屬性進行了初始化并且定義了一個方法getUser,它是傳遞參數的關鍵。之后制定了當點擊提交按鈕以后會把數據傳遞出去。
看一下getUser方法,看上去很像ajax的提交數據方式,指定了請求的方法是Post,請求的地址url以及請求中要發送的數據data,這里我將MyController控制器中的對象屬性作為數據進行傳遞,這個對象在傳輸的時候會自動的將其結構轉換成Json格式進行傳遞
下面貼上后臺Controller的代碼
package com.baobaotao.web; import com.baobaoto.domain.AngularUser; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value="/AngularJS") public class TestAngularJS { @RequestMapping("/intro.do") public ModelAndView intro(){ ModelAndView mav = new ModelAndView(); mav.setViewName("AngularJsTest"); return mav; } @RequestMapping(value="/getUser.do", method=RequestMethod.POST) public String getUser(@RequestBody AngularUser angularUser){ System.out.println("ID" + angularUser.getId()); System.out.println("name" + angularUser.getName()); System.out.println("age" + angularUser.getAge()); return null; } }
頁面上的請求映射到了這里的getUser方法,因為頁面上提出的請求方法是post,所以我們這里也設定RequestMapping的method為post,最為關鍵的就是@RequestBody這個注釋,其可以將傳來的Json格式的數據與Bean中的屬性值進行直接綁定,也就是說這里的AngularUser 對象內的屬性已經成功的被賦值了,這里貼上AngularUser Bean定義
package com.baobaoto.domain; public class AngularUser { Long id; String name; String age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
部署到服務器上運行,直接點擊提交按鈕以后后臺控制臺結果
ID1
nameJohn
age16
之后我們將input中的數值改變為2、David、17,點擊提交按鈕控制臺結果
ID2
nameDavid
age17
測試成功
從后臺獲取數據
這個要容易些,對原有的內容適當修改就可以了
頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html ng-app=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../angular.js"></script> <title>AngularJSTest</title> </head> <body ng-controller="MyController"> <p>User</p> <p>ID</p> <input id="id" name="id" ng-model="saveUser.id"> <br> <p>Name</p> <input id="id" name="name" ng-model="saveUser.name"> <br> <p>age</p> <input id="id" name="age" ng-model="saveUser.age"> <br> <ul> <li ng-repeat="x in infos"> {{ x.ID + x.name + x.age }} </li> </ul> <button ng-click="getUser()">提交</button> <script> function MyController($scope, $http){ $scope.saveUser = { id:1, name:"John", age:"16" }; $scope.getUser = function(){ $http({ method: "POST", url: "http://localhost:8080/SpringMVC/AngularJS/getUser.do", data: $scope.saveUser }).success(function (data){ $scope.infos = data; }) }; } </script> </body> </html>
這里增加了一個ul標簽用來接收從后臺傳過來的數據,里面存儲的是一個Json數組,這個數組在當我們點擊按鈕之后觸發的回調函數中進行賦值,而回調的這個函數的參數data就是我們從后臺獲取到的數據,具體data是怎樣的要看后臺Controller中返回的數值是怎樣的。這里我們返回的是一個Json數組
package com.baobaotao.web; import com.baobaoto.domain.AngularUser; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller @RequestMapping(value="/AngularJS") public class TestAngularJS { @RequestMapping("/intro.do") public ModelAndView intro(){ ModelAndView mav = new ModelAndView(); mav.setViewName("AngularJsTest"); return mav; } @RequestMapping(value="/getUser.do", method=RequestMethod.POST) @ResponseBody public List<Map<String, String>> getUser(@RequestBody AngularUser angularUser){ System.out.println("ID" + angularUser.getId()); System.out.println("name" + angularUser.getName()); System.out.println("age" + angularUser.getAge()); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); for(int i = 0; i < 5; i++){ Map<String, String> map = new HashMap<String, String>(); map.put("ID", String.valueOf(i)); map.put("name", String.valueOf(i)); map.put("age", String.valueOf(i)); list.add(map); } return list; } }
上面是修改過的Controller,我將返回值改為了一個list,里面的數據是Map這樣就剛好符合Json數組的數據模式了,當然最重要的是這里在方法前需要添加一個@ResponseBody 注釋,它可以把返回的值轉化為Json格式的數據
好了,運行一下程序試試,點擊提交按鈕,出現了結果
測試成功
上面這兩種是最簡單的方式實現了AngularJs和springmvc的結合使用,基本的功能算是實現了
以上就是如何在AngularJs中結合SpringMVC使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。