SpringMVC視訊學習筆記
學習MVC框架的流程
1、搭建環境
2、如何完成Controller和Viewer的對映
3、如何把值傳遞給Controller
6、頁面標籤
7、檔案上傳
8、深入一下原始碼
基於SpringMVC實現簡單的使用者管理
1、搭建環境
1.匯入jar包
a.匯入spring的jar包
b.匯入commons-logging-xxx.jar
2.配置web.xml
<servlet>
<servlet-name>springmvc</servlet-name >
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 如果不配置這個,那麼 就必須在/WEB-IN/下建立檔名為springmvc-servlet的.xml檔案-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 在src目錄下或自己建立的"Source Floder"目錄下新建springmvc.xml -->
<param-value>classpath:springmvc.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 >
3.建立springmvc.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/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">
</beans>
1.使用非註解方式進行配置,在springmvc.xml新增如下程式碼
<!-- 非註解方式 -->
<bean name="/welcome.html" class="com.wen.controller.WelcomeController"></bean>
<!-- 配置檢視解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
WellcomeController.java程式碼如下:
public class WelcomeController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req,
HttpServletResponse resp) throws Exception {
System.out.println("Welcome");
ModelAndView mav = new ModelAndView();
//則返回的檢視為/WEB-INF/jsp/welcome.jsp
mav.setViewName("welcome");
//在wellcome.jsp中可以使用${msg}獲取'welcome to spring MVC'
mav.addObject("msg", "welcome to spring MVC");
return mav;
}
}
上面這種非註解方式來對映檢視的方式幾乎不會使用
2.使用註解方式
springmvc.xml的配置如下:
<!-- 使用註解方式 -->
<!-- 開啟註解 -->
<mvc:annotation-driven/>
<!-- 掃描包 -->
<context:component-scan base-package="com.wen.controller"/>
<!-- 配置檢視解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
HelloController.java程式碼如下:
//@RequestMapping表示用哪個url來對應
@RequestMapping(value={"/hello","/"})
//@RequestParam註解引數
//如http://xxx/hello?username=zhangsan
//使用Map<String, Object> context來將資料傳遞到hello.jsp頁面
public String hello(@RequestParam(value="username",required=false)String name, Map<String, Object> context){
System.out.println("hello " + name);
context.put("username", name);
return "hello";
}
但更建議使用Model來傳遞資料,程式碼如下
@RequestMapping(value="welcome")
public String welcome(String username,Model model){
//使用model.addAttribute來傳遞資料
//如http://xxx/welcome?username=zhangsan
model.addAttribute("msg", "welcome to spring MVC");
model.addAttribute("name", username);
return "welcome";
}
4、REST簡介
REST的風格不等於使用了REST技術
user為路徑,120為user_id
查詢使用者:user/120———————查詢id=120的使用者
刪除使用者:user/120/delete————刪除id=120的使用者
更新使用者:user/120/update———–更新id=120的使用者資訊
一些技巧
當jsp頁面中需要使用標籤庫時(如:需要使用< c:forEach>)
1.首先需要匯入jstl-1.x.jar包
2.需要在jsp頁面中加入如下程式碼:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.同時,需要在springmvc.xml的檢視解析器配置中加入如下程式碼:
<!-- 當要使用taglib標籤庫是,需要配置這個屬性。但spring3.0.5之後預設會加上這個屬性 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
如果要使用驗證,則需要匯入下面這個包
JSR303使用幫助
用法舉例:
在User.java中的get方法上面使用驗證註解
在Controller方法中:
在add.jsp中:
結果如下:
下面是一個列子
User.java
public class User {
private String username;
private String password;
private String nickname;
private String email;
//預設建構函式
public User(){
}
public User(String username, String password, String nickname, String email) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
this.email = email;
}
//省略setter和getter方法
add.jsp 新增使用者的頁面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>新增使用者</title>
</head>
<body>
<!-- modelAttribute="user",會自動將表單中的值新增到User中 -->
<!-- 此時沒有寫action,直接提交給/add,但此時是POST方式提交,會 使用method=RequestMethod.POST註解的方法-->
<sf:form method="post" modelAttribute="user">
<!-- path相當於input中的name屬性 -->
Username:<sf:input path="username"/><br>
Password:<sf:password path="password"/><br>
Nickname:<sf:input path="nickname"/><br>
Email:<sf:input path="email"/><br>
<input type="submit" value="新增使用者"/>
</sf:form>
</body>
</html>
UserController.java
@Controller
@RequestMapping("/user")
public class UserController {
private Map<String, User> users = new HashMap<String, User>();
//預設建構函式
public UserController(){
users.put("zs", new User("zs", "123", "張三", "[email protected]"));
users.put("ls", new User("ls", "123", "李四", "[email protected]"));
users.put("we", new User("we", "123", "王五", "[email protected]"));
users.put("sj", new User("sj", "123", "世傑", "[email protected]"));
users.put("yp", new User("yp", "123", "一平", "[email protected]"));
users.put("ww", new User("ww", "123", "微微", "[email protected]"));
}
@RequestMapping(value="/users", method=RequestMethod.GET)
public String list(Model model){
model.addAttribute("users", users);
return "user/list";
}
//連線到add頁面時是GET請求,會訪問這段程式碼
@RequestMapping(value="/add", method=RequestMethod.GET)
public String add(Model model){
//必須新增一個User,不然在add.jsp中
//modelAttribute="user"的user無法獲取
model.addAttribute(new User());
//伺服器端跳轉:自動加上"forward:"
return "user/add";
}
//除了上面一種方式,我更喜歡下面這種
//@RequestMapping(value="/add", method=RequestMethod.GET)
//public String add(@ModelAttribute("user") User user){
// return "user/add";
//}
//在具體新增使用者時,是POST請求,會訪問這段程式碼
@RequestMapping(value="/add", method=RequestMethod.POST)
public String add(User user){
users.put(user.getUsername(), user);
//客戶端跳轉:使用"redirect:"
return "redirect:/user/users";
}
}
因為在頁面中使用了中文,需要在web.xml中新增字元編碼過濾器
<!-- 編碼過濾器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2016-9-20 23:28:32 未完待續
接續:
5、REST風格例項
1.顯示某個使用者的資訊
list.jsp
UserController.java
//顯示某個使用者的方法
//@PathVariable String username表示使用路徑中的{username}來最為引數
@RequestMapping(value="/{username}", method=RequestMethod.GET)
public String show(@PathVariable String username, Model model){
//通過username獲得User物件
//在show.jsp頁面中通過${user}來獲取物件
model.addAttribute(users.get(username));
return "user/show";
}
2.更新某個使用者的資訊
list.jsp 使用者列表頁面
UserController.java
update.jsp
刪除使用者
list.jsp 使用者列表頁面
UserController.java
6、其他功能
1.登入
login.jsp
UserController.java(將圖片拖出,放大看)
UserException.java
上面這種異常處理只能處理區域性異常,不太好用,所以需要進行前期的異常處理,可以在springmvc.xml配置檔案中來配置。
error.jsp
新增靜態檔案,如main.css
由於在web.xml中配置的DispatchServlet攔截的路徑為”/”
所以靜態檔案也將被servlet攔截,從而無法獲取
所以需要在在springmvc.xml中為靜態檔案進行配置,配置如下
在頁面中引入靜態檔案:
顯示結果如下:
7、檔案上傳
1.匯入檔案上傳所需的Jar包
*這裡儘量用最新的jar包,將我用的commons-io-1.4換成commons-io-2.x.jar版本
不然後面會有問題*
2.add.jsp中表單的寫法
3.控制層中的寫法
4.(很重要)需要在springmvc中進行配置,不然無法上傳檔案
5.上面的控制層並沒有真正的實現檔案上傳
只是在控制檯列印了上傳檔案的一些資訊
現在我們來實現真正的上傳檔案
這個需要貼上程式碼:
//在具體新增使用者時,是POST請求,會訪問這段程式碼
@RequestMapping(value="/add", method=RequestMethod.POST)
public String add(@Valid User user,BindingResult br, @RequestParam("attach") MultipartFile attach,
HttpServletRequest req) throws IOException{//一定要緊跟Validate之後寫驗證結果類
if(br.hasErrors()){
//如果有錯誤直接挑戰到add檢視中
return "user/add";
}
//獲得"resources/upload"的實際路徑
String realpath = req.getSession().getServletContext().getRealPath("/resources/upload");
System.out.println(realpath);
//獲得檔案要儲存的路徑和檔名
String pathname = realpath + "/" + attach.getOriginalFilename();
//建立檔案
File f = new File(pathname);
FileUtils.copyInputStreamToFile(attach.getInputStream(), f);
System.out.println(attach.getName()+","+attach.getOriginalFilename()+","+attach.getContentType());
users.put(user.getUsername(), user);
//客戶端跳轉:使用"redirect:"
return "redirect:/user/users";
}
上傳成功
8、多檔案上傳
1.對add.jsp稍加改動
2.對UserController.java稍加改動
上傳成功
但是,這裡有一個問題需要特別注意
怎麼解決?很簡單,看下面
好了,檔案上傳就講到這裡就應該差不多了吧,呵呵。
9、使用JSON
終於講到這裡了,真是要哭了,555555~~~
springmvc怎麼返回JSON資料?
1.匯入jackson的jar包
2.編寫Controller
3.結果比較
使用@RequestBody註解和jackson :
不使用它們:
相關推薦
SpringMVC視訊學習筆記
學習MVC框架的流程 1、搭建環境 2、如何完成Controller和Viewer的對映 3、如何把值傳遞給Controller 6、頁面標籤 7、檔案上傳 8、深入一下原始碼 基於SpringMVC實現簡單的
Linux視訊學習筆記(一)--系統分割槽
宣告:本系列文章是博主根據 “兄弟連新版Linux視訊教程”做的筆記和視訊截圖,只為學習和教學使用,不適用任何商業用途。 PS:如果對Linux感興趣,建議去看《細說Linux》,沈超老師和李明老師的教學風格我很喜歡:) 視訊2.1-VMWare虛擬機器安裝與使用
css深入理解之float浮動慕課視訊學習筆記
浮動的特性:包裹與破壞 包裹的特點:收縮堅挺隔絕,江湖人稱BFC 1.浮動具有破壞性,會讓父元素高度塌陷 2.浮動使高度塌陷不是bug,而是標準 3.浮動的原本作用僅僅是為了實現文字環繞效果 4. 給圖片加了float:left後, 5.清除浮動是清除浮動所帶來的的影響
SpringMVC知識點學習筆記
1、概述: ① SpringMVC是一個模型-檢視-控制器(MVC)的Web框架建立在中央前端控 制器ServletDispatcherServlet),他負責傳送每個請求到合適的處理程式, 使用檢視來最終返回響應結果的概述。SpringMVC是Spring產品組合的一部 分,他享有Sp
tensorflow視訊學習筆記
卷積(Convolution)神經網路——影象,語言(具有連續性),視訊處理,自然語言處理,藥物分析,推薦relu激勵函式 迴圈(Reccurent)神經網路——資料的關聯,推薦relu和tanh激勵函式 激勵函式(activation function 掰彎利器——非線性)——必須是可微分的,
NVIDIA CUDA初級教程視訊 - 學習筆記(一)CPU體系架構概述
一句話:CPU大量用於資料搬運而非數值運算,用流水線和分支提高效率 周斌老師:NVIDIA CUDA初級教程視訊第2集 【計算機組成原理】 Q:什麼是CPU? A:是執行指令、處理資料的器件,用於完成基本的邏輯和算術指令,現在增加了複雜功能(記憶體介面、外部裝置介面),包含大量電晶體(上
C# WPF 基礎教程 視訊學習筆記(一)
1.[STAThread()] 代表單執行緒 2.using語句允許程式設計師指定使用資源的物件應當何時釋放資源 3.Border 一般用於裝載面板 Padding 邊框和內部內容中間新增空間 CornerRadius可以使邊框具有一個圓角 4.DockP
C# WPF 基礎教程 視訊學習筆記(四)
1.文字控制元件 普通文字框控制元件 TextBox VerticalScrollBarVisibility 是否顯示滾動條 選中字元開始 this.TxtSelection.SelectionStart 選中字元開始 this.TxtSelection.SelectionE
# 精進第一週1.0,觀看Axure視訊學習筆記
精進第一週1.0,觀看Axure視訊學習筆記: **授課人:zsp** 1.從安裝開始:安裝連結:https://mp.weixin.qq.com/s?__biz=MzIwMjE1MjMyMw==&mid=502715211&idx=1&
Linux視訊學習筆記(五)--許可權管理命令、檔案搜尋命令、幫助命令、使用者管理命令、壓縮解壓命令
宣告:本系列文章是博主根據 “兄弟連新版Linux視訊教程”做的筆記和視訊截圖,只為學習和教學使用,不適用任何商業用途。 PS:文章基於Linux版本CentOS6.9,如果對Linux感興趣,建議去看《細說Linux》,沈超老師和李明老師的教學風格我很喜歡:) 4.
Java張孝祥視訊 學習筆記 多執行緒
/*************************************************************************************/ 此部落格
JPA視訊學習筆記
JPA 一、 06年就出來了 Java Persistence API 是Sun官方提出的Java持久化規範 為開發人員提供一種物件/關係對映工具來管理java應用中的關係資料 作用:簡化現有持久化開發工作 整合ORM技術 A
開發板的I/O在哪裡——韋東山嵌入式Linux視訊學習筆記01
一般來說,串列埠就是開發板的I/O(輸入輸出)介面。我們可以通過串列埠向板子傳送命令,也可以通過串列埠把板子的狀態資訊打印出來。 板載串列埠和PC的連線 如果板子上有串列埠,且電腦上也有串列埠,那直接用串列埠線相連就可以。對於沒有串列埠的膝上型電腦,可以
移動端測試教程視訊學習筆記
3塊錢從馬雲家買了一大票視訊教程,涉及到Appium、介面測試、效能測試的視訊和文件一大堆。雖然視訊的年頭稍微老了點,但相信對於萌新來說還是有幫助的。 以下是看視訊的筆記,俗話說好記性不如爛筆頭,記下來以後找起來也容易。先從移動端的看起,這篇blog是記錄移動端相關的那些視
用OpenJTAG燒寫程式到Flash—— 韋東山嵌入式Linux視訊學習筆記03
說明:本文僅在Windows環境下實驗。 韋東山的JZ2440(v2),可以選擇從Nor Flash啟動,也可以選擇從Nand Flash啟動,不管從哪裡啟動,都需要Flash上有程式,沒有程式的話,板子就是一塊磚頭。 按照常規思維,板子上應該有一個Boot
Django2.0:【Django2.0教程】02.入門儀式:Hello World 視訊學習筆記
進入到需要放置專案的路徑,使用如下命令建立專案: $ django-admin startproject mysite 這裡,mysite為專案名稱,也可以是其他的名字。進入到mysite目錄之後,可以看到目錄結構如下: . ├── mana
Django2.0:【Django2.0教程】08.常用的模版標籤和過濾器 視訊學習筆記
繼續搭建blog blog/views.py from django.shortcuts import render_to_response, get_object_or_404 from .models import Blog, BlogType d
SAP BW星型模型——視訊學習筆記02
關鍵點: SAP經典星形模型與SAP BW星形模型的理解。 課程內容 SAP星型模型 形成資訊立方體 多維度(角度)分析資料 注意區別 舉例 SAP經典星形模型與SAP BW星形模型的對比
Django2.0:【Django2.0教程】14.優化分頁展示 視訊學習筆記
當前頁高亮 修改blog/templates/blog/blog_list.html: ... <ul class="pagination"> <li> {# 上一頁 #} {% if pa
Django2.0:【Django2.0教程】04.使用模版顯示內容 視訊學習筆記
檢視文章頁面:唯一標示id article/migrations/0001_initial.py的內容如下: # Generated by Django 2.0.5 on 2018-05-11 06:54 from django.db import m