1. 程式人生 > >SpringMVC視訊學習筆記

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