国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

這篇具有很好參考價(jià)值的文章主要介紹了Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

學(xué)習(xí)視頻:孫哥說SpringMVC:結(jié)合Thymeleaf,重塑你的MVC世界?。八从械腤eb開發(fā)探索之旅

第二章、第一個(gè)SpringMVC程序的開發(fā)

2.1開發(fā)版本

  1. JDK1.8+
  2. Maven3.6+
  3. IDEA2021+
  4. SpringFramework 5.1.4
  5. Tomcat8.5.29
  6. MySQL5.7.18

按照父子項(xiàng)目的結(jié)構(gòu),管理和創(chuàng)建項(xiàng)目,創(chuàng)建一個(gè)空Project作為父項(xiàng)目,pom文件如下

<?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.baizhi</groupId>
    <artifactId>baizhi-mvc-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>baizhi-mvc-01</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

創(chuàng)建子項(xiàng)目Module:

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

子項(xiàng)目pom文件:

<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">
    <parent>
        <artifactId>baizhi-mvc-parent</artifactId>
        <groupId>com.baizhi</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>baizhi-mvc-01</artifactId>
    <packaging>war</packaging>

注意:初次創(chuàng)建web項(xiàng)目時(shí),WEB-INF包下的web.xml引入的servlet規(guī)范的版本還是2.3,而我們使用的tomcat8至少需要3.0以上的規(guī)范,所以需要修復(fù),刪除此文件后在Project Settings設(shè)置,如圖:

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

Tomcat配置

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

2.2 環(huán)境搭建

2.2.1 引入相關(guān)jar

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.1.1</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.19</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.13</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.3.27</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.8</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.3</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.36</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>org.logback-extensions</groupId>
        <artifactId>logback-ext-spring</artifactId>
        <version>0.1.5</version>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.30</version>
    </dependency>
</dependencies>

注意:SpringMVC比前面所學(xué)習(xí)的Spring,就多引入了一個(gè)jar包,叫做spring-webmvc.jar

2.2.2 配置文件

SpringMVC的配置文件,就是Spring的配置文件

注意事項(xiàng):

  1. 名字可以隨便命名,本次課程取名dispatcher.xml
  2. 放置路徑可以根據(jù)需要,隨意放置,本次課程放置在資源文件夾的根下.

2.2.3 初始化配置

  • web.xml
<!--
 alt+insert快捷鍵引入Spring提供的dispatcherServlet-->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <!-- 整個(gè)SpringMVC的核心-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--指定SpringMVC配置文件的路徑-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dispatcher.xml</param-value>
    </init-param>
    <!--本Servlet會(huì)在tomcat啟動(dòng)時(shí)創(chuàng)建-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  1. DispatcherServlet稱為前端控制器(中央控制器)
  2. DispatcherServlet的核心作用:
    1. 用于創(chuàng)建Spring的工廠(容器)

      等效于:ApplicationContext ctx = new ClassPathXmlApplicationContext(”dispatcher.xml”);
      因?yàn)镈ispatcherServlet封裝的Spring工廠只能讀取xml,所以無法遷移到純注解編程

    2. 控制SpringMVC內(nèi)部的運(yùn)行流程

SpringMVC的配置文件dispatcher.xml

<!--設(shè)置注解掃描的路徑-->
    <context:component-scan base-package="com.baizhi"/>

    <!--引入SpringMVC的核心功能-->
    <mvc:annotation-driven/>

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

mvc:annotaion-driven這段配置的主要作用:引入SpringMVC的核心功能

主要引入了2個(gè)核心類型:1.RequestMappingHandlerMapping 2.RequestMappingHandlerAdapter

  1. RequestMappingHandlerMapping實(shí)現(xiàn)了HandlerMapping接口

    它會(huì)處理@RequestMapping注解,并將其注冊到請求映射表中

  2. RequestMappingHandlerAdapter實(shí)現(xiàn)了 HandlerAdapter接口

    它是處理請求的適配器,確定調(diào)用某個(gè)符合要求的控制器類中具體服務(wù)的方法

SpringMVC對mvc:annotaion-driven的封裝

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

context:component-scan

  1. 進(jìn)行注解掃描

  2. DispatcherServlet所創(chuàng)建的工廠需要讀取XML的配置文件,不能使用純注解的開發(fā)。所以目前使用Spring配置文件+基礎(chǔ)注解的形式,進(jìn)行開發(fā)

    基礎(chǔ)注解可以用:@Component @Service @Repository,@Controller,@Scope,@Transsactional等

    高級注解無效:@Configuration,@Bean,@ComponentScan

2.3編程思路

2.3.1 思路分析

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

基本流程

  1. 開發(fā)一個(gè)類在上面加入@Controller注解
  2. 提供一個(gè)控制器方法:參數(shù)是HttpServletRequest,HttpServletResponse,返回值是String的,同時(shí)加入@RequestMapping注解定義請求路徑
  3. 在控制方法中,完成核心開發(fā)功能,把對應(yīng)JSP頁面的路徑,作為方法的返回值返回

2.3.2 編碼

@Controller
public class FirstController {

    @RequestMapping("/first")
    public String first(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("FirstController.first");
        return "/result.jsp";
    }
}
必須要進(jìn)行@Controller注解的掃描,配置文件中:<context:component-scan base-package="com.baizhi"/>

2.3.3 一個(gè)控制器中,提供多個(gè)服務(wù)方法

  • Servlet作為控制器,一個(gè)類中只能提供一個(gè)服務(wù)方法

    在原來的Servlet開發(fā)中,明確控制器的方法必須實(shí)現(xiàn)接口規(guī)定的service(HttpServletRequest request, HttpServletResponse response)方法,一個(gè)類中只能實(shí)現(xiàn)一次,所以一個(gè)類中只能有一個(gè)服務(wù)方法

    Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

  • SpringMVC的控制器,一個(gè)類中可以提供多個(gè)對外服務(wù)的方法

    1. SpringMVC控制器,沒有對于方法名的限制,所以可以提供多個(gè)服務(wù)方法
      http://localhost:8989/basic/first
      http://localhost:8989/basic/second
      @Controller
      public class FirstController {
      
          @RequestMapping("/first")
          public String first(HttpServletRequest request, HttpServletResponse response) {
              System.out.println("FirstController.first");
              return "/result.jsp";
          }
          @RequestMapping(value="/second")
          public String second(HttpServletRequest request, HttpServletResponse response) {
              System.out.println("FirstController.second");
              return "/result.jsp";
          }
      }
      

2.3.4 注意

SpringMVC中我們開發(fā)的Controller,也稱之為Handler(SpringMVC內(nèi)部的叫法)

2.4 第一個(gè)程序的細(xì)節(jié)分析

2.4.1 一種類型的SpringMVC控制器被創(chuàng)建幾次?

  1. 回顧:Servlet控制器被創(chuàng)建的次數(shù)

    一種類型的Servlet,只會(huì)被Tomcat創(chuàng)建一次,所以Servlet是單實(shí)例。

  2. Servlet是單實(shí)例并不是單例設(shè)計(jì)模式

  3. SpringMVC的控制器被Spring創(chuàng)建的次數(shù)

    控制器創(chuàng)建的次數(shù),是由@Scope注解決定的,可以是一次也可以是多次

  4. 默認(rèn)情況下SpringMVC的控制器只會(huì)被創(chuàng)建一次,會(huì)存在線程安全的問題

2.4.2@RequestMapping注解

核心作用:為控制器方法提供外部訪問的url路徑

http://localhost:8989/basic/first

@RequestMappring(”/first”)
public String first(HttpServletRequest request, HttpServletResponse response)

  • 路徑分隔符 /可以省略

    @RequestMapping(value="suns/second")
    public String second(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("FirstController.second");
        return "/result.jsp";
    }
    # 注意 多級目錄開頭可以不寫/
    
  • 在一個(gè)控制器方法上映射多個(gè)路徑

    @Controller
    public class FirstController {
        @RequestMapping(**value={"first","third"}**)
        public String first(HttpServletRequest request, HttpServletResponse response) {
            System.out.println("FirstController.first");
            return "/result.jsp";
        }
    }
    
  • Controller類上加入@RequestMapping注解

    http://localhost:8989/basic/user/first
    http://localhost:8989/basic/user/second
    @Controller
    @RequestMapping("/user")
    public class FirstController {
    
        @RequestMapping("/addUser")
        public String addUser(HttpServletRequest request, HttpServletResponse response) {
            System.out.println("FirstController.addUser");
            return "/result.jsp";
        }
        @RequestMapping(value="/deleteUser")
        public String deleteUser(HttpServletRequest request, HttpServletResponse response) {
    	        System.out.println("FirstController.deleteUser");
            return "/result.jsp";
        }
    }
    

設(shè)計(jì)目的
Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

滿足單一職能原則,可以更好的按照功能,進(jìn)行不同模塊的區(qū)分,有利于項(xiàng)目的管理。

  • @RequestMapping限定用戶的請求方式
    • 請求方式

      1. 所謂請求方式指的就是Web開發(fā)中的 POST請求與GET請求

        回顧:Web開發(fā)中的POST請求與GET請求的區(qū)別

      兩種請求提交數(shù)據(jù)的區(qū)別

      1. GET請求:通過請求行(地址欄)提交數(shù)據(jù)(QueryString),明文數(shù)據(jù)提交,不安全,提交的數(shù)據(jù)量?。ú怀^2048字節(jié))
      2. POST請求:通過請求體提交數(shù)據(jù),密文提交(不是加密,指的是一般用戶不可見),相對安全,提交數(shù)據(jù)量大(理論上沒有限制)

兩種請求發(fā)起方式的區(qū)別

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

  • RequestMapping如何限定用戶的請求方式

    1. 默認(rèn)情況下:@RequestMapping注解接受所有請求方式的訪問(Post、Get、…

    2. 通過@RequestMapping的參數(shù)可以限定某個(gè)控制器方法只接受特定的請求方式

      @RequestMapping(value = "/m1",method = {RequestMethod.POST})

    3. 可以同時(shí)限定多種請求方式的訪問

      @RequestMapping(value = "/m1",method = {RequestMethod.POST,RequestMethod.GET})

    4. 當(dāng)用戶發(fā)起了@RequestMapping不支持的請求操作

      SrpingMVC在服務(wù)器端拋出一個(gè)405錯(cuò)誤 Method Not Allowed

  • Http協(xié)議中其他的請求方式【了解】

    1. 除常規(guī)的POST、GET請求外,Http協(xié)議還提供了其他的請求方式:PUT、DELETE、OPTIONS….
    2. @RequestMapping注解,默認(rèn)情況也支持其他請求方式的訪問,同時(shí)也可以根據(jù)需要進(jìn)行限定
    3. 除POST、GET這2種請求方式外,其他的請求方式在瀏覽器支持的不好,所以可以使用專屬工具(PostMan)或者庫進(jìn)行測試
    4. 其他的請求方式,大多數(shù)不支持響應(yīng)視圖技術(shù)(JSP,Thymeleaf),只能返回簡單字符串或者JSON數(shù)據(jù)

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

2.4.3 控制器方法參數(shù)

SpringMVC在控制器方法參數(shù)設(shè)計(jì)的過程中,非常靈活,可以支持多種參數(shù)的設(shè)置方式,非常強(qiáng)大,它也把這種設(shè)計(jì),叫做數(shù)據(jù)綁定??梢栽O(shè)置無參,也可以設(shè)置多個(gè)參數(shù)

  • 代碼

    
    @RequestMapping("first")
    public String first(HttpServletRequest request, HttpServletResponse response)
    
    @RequestMapping("first")
    public String first(HttpServletRequest request)
    
    @RequestMapping("first")
    public String first(HttpServletResponse response)
    
    @RequestMapping("first")
    public String first(HttpServletRequest request, HttpServletResponse response, HttpSession session)
    
    @RequestMapping("first")
    public String first()
    
    注意:HttpSession也可以單獨(dú)使用 或者 組合使用
    			ServletContext(application) 不能應(yīng)用在控制器方法中 做形參
    獲取方法:session.getServletContext();
    					request.getSession().getServletContext();
    

    思考:上述五種代碼形式,在后續(xù)開發(fā)中最常用哪種?

        前四種不推薦的原因:與Servlet API存在耦合
    

    第五種不推薦的原因:無法接受client的請求參數(shù)

2.4.4 視圖解析器(頁面跳轉(zhuǎn))

  • 目前頁面跳轉(zhuǎn)存在的問題

    控制器中的跳轉(zhuǎn)路徑與實(shí)際視圖路徑存在耦合

    Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

  • 視圖解析器ViewResolver

    通過視圖解析器可以解決跳轉(zhuǎn)路徑的耦合

    Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

    視圖解析器將前綴(路徑)和后綴(文件類型)進(jìn)行封裝,跟返回的頁面Name進(jìn)行拼接,因此能訪問,并解耦合

    @Controller
    @RequestMapping("/view")
    public class ViewController {
        @RequestMapping("m1")
        public String m1(HttpSession session) {
            System.out.println("session = " + session);
            return "result";
        }
    }
    

    配置文件:

    Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

    注解開發(fā)

    @Configuration
    public class AppConfig {
    
        @Bean
        public InternalResourceViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/");
            viewResolver.setSuffix(".jsp");
            return viewResolver;
        }
    }
    
    **注意:
    		1. AppConfig配置Bean應(yīng)該放置到<context:component-scan/>掃描的路徑下
    		2.結(jié)合前面所講,目前因?yàn)镈ispatcherServlet封裝的Spring工廠(容器)只能讀取xml,所以無法進(jìn)行純注解替換。**
    

    2.4.5 SpringMVC配置文件的默認(rèn)設(shè)置【了解】

Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)

下一章:Spring MVC學(xué)習(xí)隨筆-控制器(Controller)開發(fā)詳解:接受客戶端(Client)請求參數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-747382.html

到了這里,關(guān)于Spring MVC學(xué)習(xí)隨筆-第一個(gè)Spring MVC程序(父子項(xiàng)目結(jié)構(gòu)、Tomcat配置、ViewResolver)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包