SpingMVC詳解-創(chuàng)新互聯(lián)

文章目錄
  • SpringMVC
    • 1. SpringMVC是什么?
      • 1.1 MVC定義
      • 1.2 創(chuàng)建SpringMVC項(xiàng)目
    • 3.SpringMVC的主要三個(gè)功能
      • 3.1SpringMVC的連接功能
        • 3.1.2注解介紹
        • 3.1.3 @RequestMapping默認(rèn)可以接收所有http請(qǐng)求
        • 3.1.4@GetMapping 和 PostMapping只能默認(rèn)是GET和POST
      • 3.2 獲取參數(shù)功能
        • 3.2.1 傳遞單個(gè)參數(shù)
        • 3.2.2 獲取多個(gè)參數(shù)
        • 3.2.3獲取對(duì)象
        • 3.2.4獲取表單參數(shù)
        • 3.2.5@RequestBody接收J(rèn)SON對(duì)象
        • 3.2.6 上傳文件@RequestPart
        • 3.2.7獲取Cookie/Session/Header
        • 3.2.8 使用參數(shù)重命名
        • 3.2.9 特殊的URL地址和獲取參數(shù)的方式:使用@PathVariable
      • 3.3返回?cái)?shù)據(jù)
      • 3.3.1請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)

創(chuàng)新互聯(lián)公司的客戶來(lái)自各行各業(yè),為了共同目標(biāo),我們?cè)诠ぷ魃厦芮信浜?,從?chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對(duì)我們的要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。專業(yè)領(lǐng)域包括網(wǎng)站制作、成都網(wǎng)站制作、電商網(wǎng)站開發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開發(fā)。SpringMVC 1. SpringMVC是什么?

SpringMVC全稱Spring Web MVC,Spring Web MVC又簡(jiǎn)稱Spring Web或Spring MVC,它是一個(gè)基于Servlet API的框架

一個(gè)經(jīng)典問題:Spring/SpringBoot/SpringMVC的區(qū)別

答:我們說的Spring就是Spring farmework ,Spring farmework它里面包含很多模塊,它的最早核心功能就是IOC容器,能夠去除代碼的一個(gè)耦合性,SpringBoot在創(chuàng)建之初的目的就是為Spring服務(wù)的,就是為了快速開發(fā)Spring框架嘛,相比于Spring來(lái)說,SpringBoot有很多優(yōu)點(diǎn),比如說它內(nèi)置了tomcat容器,可以更容易地添加依賴,發(fā)布也很簡(jiǎn)單,可以擺脫xml文件,它將Spring的功能升上了一個(gè)層次,所以后面大家都很喜歡SpringBoot了,都用SpringBoot了,后面很多插件也都是專門為SpringBoot去做的,但是SpringBoot底層還是基于Spring實(shí)現(xiàn)的;SpringMVC全稱Spring Web MVC,Spring Web MVC又簡(jiǎn)稱Spring Web或Spring MVC,它是一個(gè)基于Servlet API的框架,SpringMVC是隨著Spring的誕生而誕生的,它最早是Spring里的一個(gè)外部模塊而已,就是說Spring它有很多很多模塊,其中就有一個(gè)是基于http協(xié)議,那些request,response這些http請(qǐng)求,這個(gè)就是SpringMVC

1.1 MVC定義

MVC 是 Model View Controller 的縮寫,它是軟件?程中的?種軟件架構(gòu)模式,它把軟件系統(tǒng)分 為模型、視圖和控制器三個(gè)基本部分。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qcPiXxwp-1670216730082)(../md文件圖片備份/image-20221204203745876.png)]

  • Model(模型)是應(yīng)?程序中?于處理應(yīng)?程序數(shù)據(jù)邏輯的部分。通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。

  • View(視圖)是應(yīng)?程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。

  • Controller(控制器)是應(yīng)?程序中處理?戶交互的部分。通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù), 控制?戶輸?,并向模型發(fā)送數(shù)據(jù)。

最早SpringMvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面;
現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了,現(xiàn)在要加注解才能返回?cái)?shù)據(jù),

MVC和SpringMVC的聯(lián)系

MVC是一種思想,SpringMVC是對(duì)MVC思想的具體實(shí)現(xiàn),總結(jié)來(lái)說SpringMVC是一個(gè)實(shí)現(xiàn)了MVC模式并繼承了Servlet API的web框架。

1.2 創(chuàng)建SpringMVC項(xiàng)目

在創(chuàng)建 Spring Boot 項(xiàng)?時(shí),我們勾選的 Spring Web 框架其實(shí)就是 Spring MVC 框架,如下圖所 示:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dSjLwWyI-1670216730083)(../md文件圖片備份/image-20221204202721572.png)]

學(xué)習(xí) Spring MVC 是因?yàn)樗?切項(xiàng)?的基礎(chǔ),我們以后創(chuàng)建的所有 Spring、Spring Boot 項(xiàng)?基本都是基于 Spring MVC 的。

3.SpringMVC的主要三個(gè)功能
  1. 連接的功能:將?戶(瀏覽器)和 Java 程序連接起來(lái),也就是訪問?個(gè)地址能夠調(diào)?到我們的 Spring 程序。

  2. 獲取參數(shù)的功能:?戶訪問的時(shí)候會(huì)帶?些參數(shù),在程序中要想辦法獲取到參數(shù)。

  3. 輸出數(shù)據(jù)的功能:執(zhí)?了業(yè)務(wù)邏輯之后,要把程序執(zhí)?的結(jié)果返回給?戶。

對(duì)于 Spring MVC 來(lái)說,掌握了以上 3 個(gè)功能就相當(dāng)于掌握了 Spring MVC。

3.1SpringMVC的連接功能

在 Spring MVC 中使? @RequestMapping 來(lái)實(shí)現(xiàn) URL 路由映射,也就是瀏覽器連接程序的作?。 接下來(lái)要實(shí)現(xiàn)的功能是訪問地址:http://127.0.0.1:8080/web/hi,能打印“Hi springMvc”信息。

代碼如下:

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")//路由注冊(cè),當(dāng)使用/web可以訪問到當(dāng)前類
public class WebController {@RequestMapping("/hi")//路由注冊(cè),當(dāng)使用/web/hi可以訪問到當(dāng)前方法
    public Object sayHi() {return "Hi springMvc";
    }
}
3.1.2注解介紹

@RequestMapping 是 Spring Web 應(yīng)?程序中最常被?到的注解之?,它是?來(lái)注冊(cè)接?的路由映射的。

路由映射:所謂的路由映射指的是,當(dāng)?戶訪問?個(gè) url 時(shí),將?戶的請(qǐng)求對(duì)應(yīng)到程序中某個(gè)類 的某個(gè)?法的過程就叫路由映射。

@RequestMapping 即可修飾類,也可以修飾?法,當(dāng)修飾類和?法時(shí),訪問的地址是類 + ? 法。

@ResponseBody 表示當(dāng)前類返回的是非靜態(tài)頁(yè)面,而是數(shù)據(jù)

@Controller 表示是一個(gè)控制器,要在spring啟動(dòng)時(shí)加載并注冊(cè)

@ResponseBody和@Controller有一個(gè)組合注解@RestController,使用@RestController可以代替@ResponseBody和@Controller

3.1.3 @RequestMapping默認(rèn)可以接收所有http請(qǐng)求

如果沒有指定請(qǐng)求方式,@RequestMapping將接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP請(qǐng)求方式。

下面展示 @RequestMapping設(shè)置只接收post請(qǐng)求

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
    public Object sayHello() {return "Hi SpringMVC";
    }
}

@RequestMapping(value = “/hello” ,method = RequestMethod.POST),這個(gè)是關(guān)鍵

3.1.4@GetMapping 和 PostMapping只能默認(rèn)是GET和POST

GET請(qǐng)求三種寫法

// 寫法1

@RequestMapping("/index")

// 寫法2

@RequestMapping(value = "/index",method = RequestMethod.GET)

// 寫法3

@GetMapping("/index")

Post請(qǐng)求兩種寫法

// 寫法1

@RequestMapping(value = "/index",method = RequestMethod.POST)

// 寫法2

@PostMapping("/index")
3.2 獲取參數(shù)功能 3.2.1 傳遞單個(gè)參數(shù)

寫法一:基于servlet的request來(lái)獲取參數(shù)(不推薦這么寫)

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get1_0")
    public Object getParam1_0(HttpServletRequest request, HttpServletResponse response) {return "Hi" + request.getParameter("name");//通過servlet里的request獲取參數(shù),但是不推薦這樣用
    }
}

特殊說明:在Spring MVC中默認(rèn)內(nèi)置隱藏了兩個(gè)參數(shù),一個(gè)是Request(HttpServletRequest),一個(gè)是Response(HttpServletResponse)對(duì)象,所以如果想要使用這兩個(gè)參數(shù),只需要在方法中申明即可獲取到

寫法二:在 Spring MVC 中可以直接??法中的參數(shù)來(lái)實(shí)現(xiàn)傳參(推薦寫法)

?如以下代碼:

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get1")
    public Object getParam1(Integer age) {   return "value: "+age;
    }
}

3.2.2 獲取多個(gè)參數(shù)
@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {
    
    @RequestMapping("/get2")
    public Object getParam2(String name,Integer age) {
        return "name:: "+name + " | age:"+ age;
    }
}

Spring MVC中當(dāng)傳遞多個(gè)參數(shù)的時(shí)候,傳遞參數(shù)的順序是不影響程序的執(zhí)行的,獲取參數(shù)結(jié)果和參數(shù)的名稱有關(guān),和順序無(wú)關(guān)

3.2.3獲取對(duì)象

Spring MVC 可以?動(dòng)實(shí)現(xiàn)參數(shù)對(duì)象的賦值,但是要設(shè)置getter和setter方法,但是只要加@Data注解就自動(dòng)加了

@Data
public class Student {private Integer id;
    private String name;
    private Integer age;
    private String sex;
}
@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/get3")
    public String getParam3(Student student) {return student.toString();
    }
}

在這里插入圖片描述

在沒有其他注解下,傳的參數(shù)要和Student里屬性名字一樣

3.2.4獲取表單參數(shù)

參數(shù)請(qǐng)求的類型:

  • URL傳參
  • ajax傳參
  • form表單傳參

這里以form表單傳參為例

用參數(shù)來(lái)接收form表單的參數(shù)

登錄 用戶:
密碼:
@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {   @RequestMapping("/login")
    public String login(String name,String password) {return "用戶名:" +name+" | 密碼:"+password+"";
    }
}

在這里插入圖片描述

用對(duì)象來(lái)獲取form表單的參數(shù)

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/req")
    public String req(User user) {return user.toString();
    }
}

在這里插入圖片描述

3.2.5@RequestBody接收J(rèn)SON對(duì)象
@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/login3")
    public Maplogin3(@RequestBody User user) {Mapresult = new HashMap<>();
        result.put("name",user.getName());
        result.put("password",user.getPassword());
        return result;
    }
    
}

在這里插入圖片描述

@RequestBody可以用來(lái)獲取JSON對(duì)象

3.2.6 上傳文件@RequestPart

使用postman上傳文件
在這里插入圖片描述

后端寫代碼來(lái)接收

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/req2")
    public String req2(String name, @RequestPart("myfile")MultipartFile file) throws IOException {//保存文件
        file.transferTo(new File("D:/1/img.pong"));
        return "success";
    }

}
3.2.7獲取Cookie/Session/Header

瀏覽器會(huì)默認(rèn)將當(dāng)前網(wǎng)站的所有cookie發(fā)送給后端

原因:http協(xié)議無(wú)狀態(tài)

傳統(tǒng)獲取 header/cookie

@RequestMapping("/param10")
@ResponseBody

public String param10(HttpServletResponse response, HttpServletRequest requ
est) {String name = request.getParameter("name");
 // 獲取所有 cookie 信息

 Cookie[] cookies = request.getCookies();
 String userAgent = request.getHeader("User-Agent");
 return name + ":"+userAgent;
}

使用注解獲取 Cookie—@CookieValue

@Controller //我是一個(gè)控制器,我要在spring啟動(dòng)時(shí)加載并注冊(cè)
@ResponseBody //當(dāng)前類返回的是非靜態(tài)頁(yè)面,因?yàn)樽钤鐂pringmvc設(shè)計(jì)時(shí)是返回一個(gè)視圖,所以默認(rèn)是返回一個(gè)靜態(tài)頁(yè)面,要加注解才能返回?cái)?shù)據(jù);但是現(xiàn)在前后端分離了,要返回?cái)?shù)據(jù)了
@RequestMapping("/web")
public class WebController {@RequestMapping("/cookie")
    public String cookie(@CookieValue("name") String name) {return "cookie"+name;

    }

}

獲取Header——@RequestHeader

@RequestMapping("/header")

public String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;
}

Session 存儲(chǔ)和獲取

Session 存儲(chǔ)和 Servlet 類似,是使? HttpServletRequest 中獲取的,如下代碼所示:

@RequestMapping("/setSession")
    public String setSession(HttpServletRequest request) {// 獲取 HttpSession 對(duì)象,參數(shù)設(shè)置為 true 表示如果沒有 session 對(duì)象就創(chuàng)建session

        HttpSession session = request.getSession(true);
        if(session!=null){session.setAttribute("username","小盧");
        }
        return "session 存儲(chǔ)成功";
    }

獲取Session可以使? HttpServletRequest

@RequestMapping("/sess")
@ResponseBody

public String sess(HttpServletRequest request) {// 如果 session 不存在,不會(huì)?動(dòng)創(chuàng)建

 HttpSession session = request.getSession(false);
 String username = "";
 if(session!=null && session.getAttribute("username")!=null){username = (String) session.getAttribute("username");
 }
 return "username:"+username;
}

也可以使用注解@SessionAttribute

@RequestMapping("/getSession")
    public String getSession(@SessionAttribute(value = "username",required = false) String name) {return "username: " + name;
    }

**@SessionAttribute(value = “username”,required = false **:required不設(shè)置它,默認(rèn)是true,如果這個(gè)session不存在會(huì)報(bào)錯(cuò);如果設(shè)置為false,session沒有就沒有了,不會(huì)去報(bào)錯(cuò)

3.2.8 使用參數(shù)重命名
@RequestMapping("/gettime")
    public String getTime(@RequestParam(value = "t",required = false)String time) {return "time: "+time;//此時(shí)只能識(shí)別t參數(shù),并將參數(shù)t的值,設(shè)置給time變量,此時(shí)即使使用time參數(shù),也是讀取不到前端的參數(shù)的,它現(xiàn)在只認(rèn)參數(shù)名為t的參數(shù)
    }

required設(shè)置參數(shù)是否必傳,如果是true就需要必傳,不然就會(huì)報(bào)錯(cuò);設(shè)置為false不傳不會(huì)報(bào)錯(cuò)

3.2.9 特殊的URL地址和獲取參數(shù)的方式:使用@PathVariable

從url中獲取參數(shù)

@RequestMapping("/login4/{name}/{password}")
    public String login4(@PathVariable("name") String name,@PathVariable("password") String password) {return "name: "+name+" | password"+ password;
    }

在這里插入圖片描述

3.3返回?cái)?shù)據(jù)

返回?cái)?shù)據(jù)比較簡(jiǎn)單,基本上上面獲取完代碼后都會(huì)返回,這里就不展開,主要講請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)

3.3.1請(qǐng)求重定向和請(qǐng)求轉(zhuǎn)發(fā)

forward VS redirect

return 不但可以返回?個(gè)視圖,還可以實(shí)現(xiàn)跳轉(zhuǎn),跳轉(zhuǎn)的?式有兩種:

  • forward 是請(qǐng)求轉(zhuǎn)發(fā);
  • redirect:請(qǐng)求重定向。
// 請(qǐng)求重定向

@RequestMapping("/index")

public String index(){return "redirect:/index.html";
}

// 請(qǐng)求轉(zhuǎn)發(fā)

@RequestMapping("/index2")

public String index2(){return "forward:/index.html";
}

舉個(gè)例子說明一下forward和redirect吧

比如說,小盧同學(xué)告訴他媽媽說我想要買新鍵盤,如果小盧他媽媽說好,我?guī)湍闳ベI,這就是forward請(qǐng)求轉(zhuǎn)發(fā);如果他媽媽給他個(gè)地址讓他自己去買,這就是請(qǐng)求redirect重定向

也就是說,轉(zhuǎn)發(fā)是服務(wù)器幫轉(zhuǎn)的,而重定向是讓瀏覽器重新請(qǐng)求另一個(gè)地址

forward和redirect具體區(qū)別:

  1. 請(qǐng)求重定向(redirect)將請(qǐng)求重新定位到資源;請(qǐng)求轉(zhuǎn)發(fā)(forward)服務(wù)端轉(zhuǎn)發(fā)
  2. 請(qǐng)求重定向地址發(fā)生變化,請(qǐng)求轉(zhuǎn)發(fā)地址不發(fā)生變化
  3. 請(qǐng)求重定向與直接訪問新地址效果一樣,不存在原來(lái)的外部資源不能訪問;請(qǐng)求轉(zhuǎn)發(fā)服務(wù)器端轉(zhuǎn)發(fā)有可能造成原外部資源不能訪問(請(qǐng)求轉(zhuǎn)發(fā)如果資源和轉(zhuǎn)發(fā)的??不在?個(gè)?錄下,會(huì)導(dǎo)致外部資源不可訪問)

舉個(gè)例子forward不能訪問到外部資源

@Controller

@RequestMapping("/user")

public class UserController {@RequestMapping(value = "/index")
 public String sayHi(){return "forward:/index.html";
 }
}

在這里插入圖片描述

在目錄中當(dāng)請(qǐng)求轉(zhuǎn)向到index.html后,因?yàn)閔ello.js和index.html不在同一個(gè)目錄,所以會(huì)導(dǎo)致獲取不到hello.js;改成請(qǐng)求重定向就能獲取到

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

文章標(biāo)題:SpingMVC詳解-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://bm7419.com/article30/gdopo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、標(biāo)簽優(yōu)化微信公眾號(hào)、網(wǎng)站改版、網(wǎng)站策劃用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管