<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
需求一:圖片列表查詢,從後臺返回資料,將資料展示在頁面上
需求二:新增圖片,將新增圖書的資料傳遞到後臺,並在控制檯列印
說明:此次案例的重點是在SpringMVC中如何使用RESTful實現前後臺互動,所以本案例並沒有和資料庫進行互動,所有資料使用假
資料來完成開發。
我們的基本步驟:
建立一個Web的Maven專案
pom.xml新增Spring依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.nefu</groupId> <artifactId>springmvc_try</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
建立對應的設定類
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[0]; } protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } protected String[] getServletMappings() { return new String[]{"/"}; } //亂碼處理 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); return new Filter[]{filter}; } } @Configuration @ComponentScan("com.nefu.controller") //開啟json資料型別自動轉換 @EnableWebMvc public class SpringMvcConfig { }
編寫模型類Book
public class Book { private Integer id; private String type; private String name; private String description; //setter...getter...toString略 }
編寫BookController
@Controller public class BookController { }
專案結構:
步驟1:編寫Controller類並使用RESTful進行設定
@RestController @RequestMapping("/books") public class BookController { @PostMapping public String save(@RequestBody Book book){ System.out.println("book save ==> "+ book); return "{'module':'book save success'}"; } @GetMapping public List<Book> getAll(){ System.out.println("book getAll is running ..."); List<Book> bookList = new ArrayList<Book>(); Book book1 = new Book(); book1.setType("計算機"); book1.setName("SpringMVC入門教學"); book1.setDescription("小試牛刀"); bookList.add(book1); Book book2 = new Book(); book2.setType("計算機"); book2.setName("SpringMVC實戰教學"); book2.setDescription("一代宗師"); bookList.add(book2); Book book3 = new Book(); book3.setType("計算機叢書"); book3.setName("SpringMVC實戰教學進階"); book3.setDescription("一代宗師嘔心創作"); bookList.add(book3); return bookList; } }
步驟2:使用PostMan進行測試
測試新增
{
"type":"計算機叢書",
"name":"SpringMVC終極開發",
"description":"這是一本好書"
}
測試查詢
步驟1:拷貝靜態頁面
將資料功能頁面下的所有內容拷貝到專案的webapp
目錄下
步驟2:存取pages目錄下的books.html
開啟瀏覽器輸入http://localhost/pages/books.html
(1)出現錯誤的原因?
SpringMVC攔截了靜態資源,根據/pages/books.html去controller找對應的方法,找不到所以會報404的錯誤。
(2)SpringMVC為什麼會攔截靜態資源呢?
(3)解決方案?
SpringMVC需要將靜態資源進行放行。
@Configuration public class SpringMvcSupport extends WebMvcConfigurationSupport { //設定靜態資源存取過濾,當前類需要設定為設定類,並被掃描載入 @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { //當存取/pages/????時候,從/pages目錄下查詢內容 registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); registry.addResourceHandler("/js/**").addResourceLocations("/js/"); registry.addResourceHandler("/css/**").addResourceLocations("/css/"); registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/"); } }
該設定類是在config目錄下,SpringMVC掃描的是controller包,所以該設定類還未生效,要想生效需要將SpringMvcConfig設定類進行修改
@Configuration @ComponentScan({"com.nefu.controller","com.nefu.config"}) @EnableWebMvc public class SpringMvcConfig { } //或者 @Configuration @ComponentScan("com.nefu") @EnableWebMvc public class SpringMvcConfig { }
注意:
此處有人可能會想著把SpringMvcSupport設定類上的@Configuration註解給去掉,然後在SpringMvcConfig檔案中使用@Import進行引入這樣是不行的!因為這樣的話實際上是讓SpringMvcConfig引入SpringMvcSupport設定類中所有的bean,但是你SpringMvcSupport設定類中就重寫了一個方法,壓根就沒有bean。所以不能使用。 例如像下面這種才可以使用:
@Configuration public class ImportedConfig { @Bean public ImportedBean getImportedBean(){ return new ImportedBean(); } }
具體的@Import註解使用規則,可以參考下面的連結:
步驟3:修改books.html頁面
<!DOCTYPE html> <html> <head> <!-- 頁面meta --> <meta charset="utf-8"> <title>SpringMVC案例</title> <!-- 引入樣式 --> <link rel="stylesheet" href="../plugins/elementui/index.css" rel="external nofollow" > <link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css" rel="external nofollow" > <link rel="stylesheet" href="../css/style.css" rel="external nofollow" > </head> <body class="hold-transition"> <div id="app"> <div class="content-header"> <h1>圖書管理</h1> </div> <div class="app-container"> <div class="box"> <div class="filter-container"> <el-input placeholder="圖書名稱" style="width: 200px;" class="filter-item"></el-input> <el-button class="dalfBut">查詢</el-button> <el-button type="primary" class="butT" @click="openSave()">新建</el-button> </div> <el-table size="small" current-row-key="id" :data="dataList" stripe highlight-current-row> <el-table-column type="index" align="center" label="序號"></el-table-column> <el-table-column prop="type" label="圖書類別" align="center"></el-table-column> <el-table-column prop="name" label="圖書名稱" align="center"></el-table-column> <el-table-column prop="description" label="描述" align="center"></el-table-column> <el-table-column label="操作" align="center"> <template slot-scope="scope"> <el-button type="primary" size="mini">編輯</el-button> <el-button size="mini" type="danger">刪除</el-button> </template> </el-table-column> </el-table> <div class="pagination-container"> <el-pagination class="pagiantion" @current-change="handleCurrentChange" :current-page="pagination.currentPage" :page-size="pagination.pageSize" layout="total, prev, pager, next, jumper" :total="pagination.total"> </el-pagination> </div> <!-- 新增標籤彈層 --> <div class="add-form"> <el-dialog title="新增圖書" :visible.sync="dialogFormVisible"> <el-form ref="dataAddForm" :model="formData" :rules="rules" label-position="right" label-width="100px"> <el-row> <el-col :span="12"> <el-form-item label="圖書類別" prop="type"> <el-input v-model="formData.type"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="圖書名稱" prop="name"> <el-input v-model="formData.name"/> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="描述"> <el-input v-model="formData.description" type="textarea"></el-input> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormVisible = false">取消</el-button> <el-button type="primary" @click="saveBook()">確定</el-button> </div> </el-dialog> </div> </div> </div> </div> </body> <!-- 引入元件庫 --> <script src="../js/vue.js"></script> <script src="../plugins/elementui/index.js"></script> <script type="text/javascript" src="../js/jquery.min.js"></script> <script src="../js/axios-0.18.0.js"></script> <script> var vue = new Vue({ el: '#app', data:{ dataList: [],//當前頁要展示的分頁列表資料 formData: {},//表單資料 dialogFormVisible: false,//增加表單是否可見 dialogFormVisible4Edit:false,//編輯表單是否可見 pagination: {},//分頁模型資料,暫時棄用 }, //勾點函數,VUE物件初始化完成後自動執行 created() { this.getAll(); }, methods: { // 重置表單 resetForm() { //清空輸入框 this.formData = {}; }, // 彈出新增視窗 openSave() { this.dialogFormVisible = true; this.resetForm(); }, //新增 saveBook () { axios.post("/books",this.formData).then((res)=>{ }); }, //主頁列表查詢 getAll() { axios.get("/books").then((res)=>{ this.dataList = res.data; }); }, } }) </script> </html>
到此這篇關於SpringMVC通過RESTful結構實現頁面資料互動的文章就介紹到這了,更多相關SpringMVC RESTful內容請搜尋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