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

Spring mvc 組件介紹

這篇具有很好參考價值的文章主要介紹了Spring mvc 組件介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 組件介紹

1.1 DispatcherServlet

統(tǒng)一收口,接收請求,響應結果,相當于轉發(fā)器,中央處理器。
有了 DispatcherServlet 減少了其它組件之間的耦合度。

1.2 HandlerMapping-處理器映射器

根據(jù)請求的url查找Handler,既負責完成客戶請求到 Controller 映射。
SpringMVC提供了不同的映射器實現(xiàn)不同的映射方式,
例如:配置文件方式、實現(xiàn)接口方式、注解方式等。

1.3 HandlerAdapter-處理器適配器

按照特定規(guī)則去執(zhí)行Handler。

1.4 Handler-處理器 也叫 Controller

Handler 是繼 DispatcherServlet 前端控制器的后端控制器,
在 DispatcherServlet 的控制下,Handler對具體的用戶請求進行處理。

1.5 視圖解析器ViewResolver

進行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(view)

ViewResolver負責將處理結果生成View視圖,ViewResolver首先根據(jù)邏輯視圖名解析成物理視圖名,即具體的頁面地址,再生成View視圖對象,最后對View進行渲染將處理結果通過頁面的展示給用戶。
SpringMVC框架提供了很多View視圖類型,
包括:JSTLView、freemarkerView、pdfView等等.

1.6 視圖View

View是一個接口,實現(xiàn)類支持不同的View類型(jsp、freemarker…),
一般情況下需要通過頁面標簽或者頁面模板技術將模型數(shù)據(jù)通過頁面展示給用戶,需要由程序員根據(jù)業(yè)務需求開發(fā)具體的頁面。

總結: 需要我們開發(fā)的工作只有處理器 Handler 的編寫以及視圖比如JSP頁面的編寫。

2. 組件配置說明

2.1 配置前端控制器(DispatcherServlet)

在web project的web.xml中配置:

<!-- 配置前端控制器DispatcherServlet -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--springmvc.xml 是自己創(chuàng)建的SpringMVC全局配置文件,用contextConfigLocation作為參數(shù)名來加載 
        如果不配置 contextConfigLocation,那么默認加載的是/WEB-INF/servlet名稱-servlet.xml,在這里也就是 
        springmvc-servlet.xml 參數(shù)多個值使用逗號隔開,如:a.xml,b.xml -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
?
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--第一種配置:*.do,還可以寫*.action等等,表示以.do結尾的或者以.action結尾的URL都由前端控制器DispatcherServlet來解析 
        第二種配置:/,所有訪問的 URL 都由DispatcherServlet來解析,但是這里最好配置靜態(tài)文件不由DispatcherServlet來解析,需要對靜態(tài)資源單獨處理 
        錯誤配置:/*,注意這里是不能這樣配置的,因為如果這樣寫,最后轉發(fā)到 jsp 頁面的時候,仍然會由DispatcherServlet進行解析, 而這時候會找不到對應的Handler,從而報404?。。?-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

2.2 配置處理器映射器(HandlerMapping)

在 springmvc.xml 文件中配置,是請求的 URL 怎么能被 SpringMVC 識別,從而去執(zhí)行我們編寫好的 Handler。

(1) 第一種方法

<!-- 配置Handler 通過name的值為url來請求-->   
<bean name="/hello2" class="com.beiyou.controller.HelloController2" />

//Handler
//我們的這個controller 就是一個Handler(執(zhí)行器)
public class HelloWord2 implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv=new ModelAndView();
        //如果xml統(tǒng)一配置路徑,可以簡寫程文件名
        mv.setViewName("success");
        mv.addObject("msg","今天天氣很冷");
        return mv;
    }
}

這樣配置的話,那么請求的 URL,必須為 http://ip:port/hello2

(2) 第二種方法

<!-- 配置Handler  通過key值做為url來訪問對應的bean-->   
<bean id="hello2" class="com.beiyou.controller.HelloController2" />
<bean id="hello3" class="com.beiyou.controller.HelloController3" />
<!-- 簡單URL配置處理器映射器 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello2">hello2</prop>
            <prop key="/hello3">hello3</prop>
        </props>
    </property>
</bean>

這種配置請求的 URL可以為 http://ip:prot/項目名/hello,或者http://ip:port/項目名/hello2

2.3 配置處理器適配器(HandlerAdapter)

在 springmvc.xml 文件中配置,用來約束我們所需要編碼的 Handler類。

第一種

編寫 Handler 時必須要實現(xiàn) Controller,否則不能被適配器解析。

<!-- 配置處理器適配器,所有適配器都得實現(xiàn) HandlerAdapter接口 處理器必須實現(xiàn)controller接口的handler-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

第二種

編寫 Handler 時必須要實現(xiàn) HttpRequestHandler

<!-- 配置處理器適配器第二種方法,這樣配置所有Handler都必須實現(xiàn) HttpRequestHandler接口-->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />

??

1、如果沒有指明,則可以同時處理實現(xiàn)Controller接口和HttpRequestHandler接口的handler。

2、如果指明其中一種,則要求所有的hander類都必須實現(xiàn)對應的接口,否則無法訪問。

2.4 處理器(Handler,即我們的Controller)

在 springmvc.xml 文件中配置.,就是請求的 URL
到我們這里所編寫的 Handler 類的某個方法進行一些業(yè)務邏輯處理。
兩個處理器適配器來約束 Handler,通過上面兩種配置分別編寫兩個 Handler:

(1) 第一種

實現(xiàn)Controller 接口

//Handler
//我們的這個controller 就是一個Handler(執(zhí)行器)
public class HelloWord implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv=new ModelAndView();
        //如果xml統(tǒng)一配置路徑,可以簡寫程文件名
        mv.setViewName("success");
        mv.addObject("msg","今天天氣很冷");
        return mv;
    }
}

(2) 第二種 HttpRequestHandler

public class HelloController2 implements HttpRequestHandler {
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setAttribute("msg", "測試數(shù)據(jù)");
     request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request, response);
    }
}

? 通常我們使用第一種方式來編寫 Handler ,但是第二種如果不需要渲染視圖,我們可以通過 response 修改相應內容,比如返回 json 數(shù)據(jù):如下圖:

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json字符串");
//controller示例
public class HelloWord2 implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
?
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("json字符串");
    }
}

2.5 配置視圖解析器(ViewResolver)

1.簡單配置:

<!-- 配置視圖解析器 進行jsp解析,默認使用jstl標簽,classpath下得有jstl的包-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
<!--如果這樣配,那么在 Handler 中返回的必須是完整路徑(含完整文件名)。-->

2.完整配置:

<!--配置視圖解析器  -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 返回視圖頁面的前綴 -->
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <!-- 返回頁面的后綴 -->
    <property name="suffix" value=".jsp"></property>
</bean>

如果這樣配,那么在 Handler 中只需要返回在 pages 文件夾下的jsp 頁面名稱就可以了。

3. 基本配置

3.1 常規(guī)配置(Controller加載控制)

  • SpringMVC的處理器對應的bean必須按照規(guī)范格式開發(fā),未避免加入無效的bean可通過bean加載過濾器進行包含設定或排除設定,表現(xiàn)層bean標注通常設定為@Controller

xml方式

<context:component-scan base-package="com.by">
        <!--指定包掃描的包含controller-->
    <context:include-filter
                            type="annotation"
                            expression="org.springframework.stereotype.Controller"/>
    <!--開啟注解掃描-->
</context:component-scan>

context:include-filter有兩個必須的屬性:

type: 配置filter的類型,這個類型一共有以下五個值:

assignable — 指定掃描某個接口派生出來的類
annotation — 指定掃描使用某個注解的類
aspectj — 指定掃描AspectJ表達式相匹配的類
custom — 指定掃描自定義的實現(xiàn)了
expression: 根據(jù)type的不同,這個表達式的配置方式也不同。

1、assignable 的用法

創(chuàng)建接口類:

//標簽
public interface Label {
}

Seller類: 注意,我們在Seller類上方添加了標準注解@Component,所以Seller類會被spring加載

//供應商
@Component
public class Seller {
}

ManuFacture類:ManuFacture類沒有標注注解,理論上不會被Spring加載。但是ManuFacture類實現(xiàn)了接口Lable

//廠商
public class ManuFacture implements Label{
}

spring-mvc.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: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.xsd
        http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
?
    <context:component-scan base-package="com.by.pojo">
        <!-- 通知spring將實現(xiàn)接口Label的類也加載進來 -->
        <context:include-filter type="assignable"
                                expression="com.by.pojo.Label"/>
    </context:component-scan>
    <!--開啟注解掃描-->
    <mvc:annotation-driven/>
</beans>

測試類:

public class AppTest {
?
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring-mvc.xml");
        System.out.println(ac.getBean(Seller.class));
        System.out.println(ac.getBean(ManuFacture.class));
    }
}

加入servlet-api: 使用完刪除

 <dependency>
      <groupId>tomcat</groupId>
      <artifactId>servlet-api</artifactId>
      <version>5.5.23</version>
    </dependency>

2、annotation — 指定掃描使用某個注解的類

創(chuàng)建一個注解接口類: 類似@Controller

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnno {
   
}

ManuFacture加上我們配置的注解

@DemoAnno
public class ManuFacture {
}

spring-mvc.xml配置:

   <!-- 通知spring將有指定注解的類加載進來 -->
<context:include-filter type="annotation" expression="com.by.pojo.DemoAnno"/>

測試類不變:直接運行

**3、aspectj-**指定掃描AspectJ表達式相匹配的類:比如要求加載某個類的派生類

這里需要添加AspectJ的依賴:

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.3.20</version>
    </dependency>

我們添加一個新的CommBar類:

public class CommBar {
}

繼續(xù)修改我們的ManuFacture類,不實現(xiàn)接口,不需要注解,只要繼承CommBar類即可。

public class ManuFacture extends CommBar{
}

mvc.xml配置

<!-- 通知spring所有繼承和擴展自指定類的類全部加載進來 -->
 <context:include-filter type="aspectj" expression="com.by.pojo.CommBar+"/>

直接測試運行

**4、custom—**指定掃描自定義的實現(xiàn)了org.springframework.core.type.filter.TypeFilter接口的類

繼續(xù)修改我們的ManuFacture類,不實現(xiàn)接口,不需要注解,不繼承任何類。

public class ManuFacture {
}

我們添加一個MyFilter實現(xiàn)TypeFilter接口:

public class MyFilter implements TypeFilter {
    @Override
    public boolean match(MetadataReader metadataReader,
                 MetadataReaderFactory metadataReaderFactory) throws IOException {
        //這里判斷讀取的類型是否是ManuFacture,如果是就返回true,否則返回false;
        // 返回true就會被spring加載,否則不加載
     if(metadataReader.getClassMetadata().getClassName().equals(ManuFacture.class.getName())){
          return true;
        }
        return false;
    }
}

mvc配置類:

 <!-- 通知spring根據(jù)我們配置的MyFilter類進行加載 這里的 expression要配置我們自己的MyFilter -->
  <context:include-filter type="custom" expression="com.by.pojo.MyFilter"/>

直接運行即可

回到之前的配置:

<context:component-scan base-package="com.by">
        <!--指定包掃描的包含controller-->
    <context:include-filter
                            type="annotation"
                            expression="org.springframework.stereotype.Controller"/>
    <!--開啟注解掃描-->
</context:component-scan>

controller中編寫:

@Controller
public class HelloWord2  {
    @RequestMapping("/hello2")
    public ModelAndView handleRequest() throws ServletException, IOException {
        ModelAndView mv=new ModelAndView();
        mv.setViewName("success");
        mv.addObject("msg","給不了的永遠都是空的");
        return mv;
    }
}

使用 @EnableWebMvc 注解 代替配置

<mvc:annotation-driven> 和 @EnableWebMvc 解析
這兩個起到的作用是類似的(避免重復注冊,二選一即可), 都是注冊了大部分spring mvc開發(fā)所需的bean(HandlerMapping,HandlerAdapter等等),
還有根據(jù)包存在添加messageConverter(例如jackson,以支持@ResponseBody).

配置類編寫

@Configuration
//開啟 Spring MVC注解驅動
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    /*
    配置視圖解析器
    */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        WebMvcConfigurer.super.configureViewResolvers(registry);
        //注冊到視圖配置中
        registry.viewResolver(resourceViewResolver());
    }
    /**
     * 配置請求視圖映射
     */
    private InternalResourceViewResolver resourceViewResolver(){
        InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
        //請求視圖的前綴
        viewResolver.setPrefix("/WEB-INF/");
        //請求視圖的后綴
        viewResolver.setSuffix(".jsp");
        return  viewResolver;
    }
}

controller編寫:文章來源地址http://www.zghlxwxcb.cn/news/detail-538468.html

@Controller
public class HelloWord3  {
    @RequestMapping("/hello3")
    public ModelAndView query() {
        ModelAndView mv=new ModelAndView();
        //如果xml統(tǒng)一配置路徑,可以簡寫程文件名
        mv.setViewName("success");
        mv.addObject("msg","使用配置類操作");
        return mv;
    }
}

到了這里,關于Spring mvc 組件介紹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【SpringMVC】基于 Spring 的 Web 層MVC 框架

    【SpringMVC】基于 Spring 的 Web 層MVC 框架

    ??歡迎來到@邊境矢夢°的csdn博文?? ??本文主要梳理SpringMVC : 基于 Spring 的 Web 層MVC 框架??? ??我是邊境矢夢°,一個正在為秋招和算法競賽做準備的學生?? ??喜歡的朋友可以關注一下 ?????? ,下次更新不迷路?? Ps: 月亮越亮說明知識點越重要 (重要性或者難度越大

    2024年02月08日
    瀏覽(20)
  • SpringMVC-2-Spring MVC攔截器詳解:從入門到精通

    SpringMVC-2-Spring MVC攔截器詳解:從入門到精通

    能夠編寫攔截器并配置攔截器 1.1 攔截器概念和作用 攔截器(Interceptor)是一種動態(tài)攔截方法調用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行 作用: 在指定的方法調用前后執(zhí)行預先設定的代碼 阻止原始方法的執(zhí)行 總結:增強 核心原理:AOP思想 1.2 攔截器和過濾器的區(qū)別

    2024年02月12日
    瀏覽(32)
  • SpringMVC-1-解密Spring MVC:構建優(yōu)雅、靈活的Web應用的秘訣

    SpringMVC-1-解密Spring MVC:構建優(yōu)雅、靈活的Web應用的秘訣

    能夠編寫SpringMVC入門案例 了解SpringMVC原理 思考:SpringMVC框架有什么優(yōu)點? SpringMVC是一種基于Java實現(xiàn)MVC模型的輕量級Web框架 優(yōu)點 使用簡單,開發(fā)便捷(相比于Servlet) 天然的與Spring框架集成(如IOC容器、AOP等) 請求處理簡化:支持用戶請求數(shù)據(jù)自動映射封裝 響應處理簡化:

    2024年02月12日
    瀏覽(21)
  • Spring MVC學習隨筆-Spring MVC介紹

    Spring MVC學習隨筆-Spring MVC介紹

    學習視頻:孫哥說SpringMVC:結合Thymeleaf,重塑你的MVC世界?。八从械腤eb開發(fā)探索之旅 概念: SpringMVC是基于Spring Framework衍生而來的MVC框架,主要解決了原有MVC框架開發(fā)過程中,控制器(Controller)的問題 SpringMVC是一個MVC框架 MVC是一個架構思想,在JavaEE開發(fā)中多用于Web開發(fā)

    2024年02月05日
    瀏覽(26)
  • Spring MVC組件

    Spring MVC組件

    用戶請求到達前端控制器,它就相當于mvc模式中的c, dispatcherServlet 是整個流程控制的中心,由它調用其它組件處理用戶的請求 ,dispatcherServlet 的存在降低了組件之間的耦合性。 HandlerMapping負責根據(jù)用戶請求找到 Handler 即處理器 ,SpringMVC 提供了不同的映射器實現(xiàn)不同的映射

    2024年02月03日
    瀏覽(21)
  • 【Spring MVC】Spring MVC的功能使用和相關注解介紹

    【Spring MVC】Spring MVC的功能使用和相關注解介紹

    Spring MVC主要有三個功能: 連接 獲取參數(shù) 輸出數(shù)據(jù) 對于 Spring MVC 來說,掌握了以上 3 個功能就相當于掌握了Spring MVC。 連接的功能:將?戶(瀏覽器)和 Java 程序連接起來,也就是訪問?個地址能夠調?到我們的Spring 程序。 先創(chuàng)建一個SpringMVC項目,過程和SpringBoot項目創(chuàng)建相

    2024年02月16日
    瀏覽(22)
  • Spring MVC介紹

    Spring MVC介紹

    MVC 模式,全稱為 Model-View-Controller(模型-視圖-控制器)模式,它是一種軟件架構模式,其目標是將軟件的用戶界面(即前臺頁面)和業(yè)務邏輯分離,使代碼具有更高的可擴展性、可復用性、可維護性以及靈活性。 通常情況下,一個完整的 Java Web 應用程序,其結構如下圖Jav

    2024年02月10日
    瀏覽(26)
  • Spring MVC請求處理流程和九大組件

    Spring MVC請求處理流程和九大組件

    需求:前端瀏覽器請求url: http://localhost:8080/demo/handle01,前端??顯示后臺服務器的時間 開發(fā)過程 配置DispatcherServlet前端控制器 開發(fā)處理具體業(yè)務邏輯的Handler(@Controller、@RequestMapping) xml配置?件配置controller掃描,配置springmvc三?件 將xml?件路徑告訴springmvc(DispatcherSer

    2024年02月07日
    瀏覽(21)
  • 73.是否可以把我們所需的Bean都放入Spring-mvc子容器里面來管理(springmvc的spring-servlet.xml中配置全局掃描)?

    可以 , 因為父容器的體現(xiàn)無非是為了獲取子容器不包含的bean, 如果全部包含在子容器完全用不到父容器了, 所以是可以全部放在springmvc子容器來管理的。 雖然可以這么做不過一般應該是不推薦這么去做的,一般人也不會這么干的。如果你的項目里有用到事物、或者aop記得也

    2024年02月21日
    瀏覽(25)
  • JavaWeb框架:Spring MVC介紹

    JavaWeb框架:Spring MVC介紹

    MVC(Model View Controller,模型-視圖-控制器) ,作為一種設計模式,用于應用程序的分層開發(fā)。 Spring MVC ,由 Spring 框架提供的基于 MVC 設計模式的一個輕量級 Web 開發(fā)框架。Spring MVC 提供了一個前端控制器 DispatcherServlet 來分派請求,然后通過配置處理程序映射、視圖解析等,使

    2024年02月12日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包