初識Spring MVC

1、spring MVC 簡介css

1.  Spring MVC也叫Spring Web mvc,屬於表現層的框架。Spring MVC是spring框架的一部分,是在Spring3.0後發佈的。html

2.spring MVC架構前端

(1)java

         

(2)web

                                      

3.spring MVC請求流程spring

    request---------->DispatcherServlet(中央調度器/前端控制器)--------->HandlerMapping(處理器映射器)------------>返回一個執行鏈--------->將執行鏈轉交給 HandlerAdaptor(處理器適配器)------->編程

調度Handler(處理器)--------->ModelAndView--------->先將結果交給HandlerAdaptor,而後再由HandlerAdaptor轉交給DispatcherServlet--------->DispatcherServlet調度ViewResolver(試圖解析器)-------->交給DispatcherServlet--------->尋找View-------->View作出響應(response)。spring-mvc

4.SpringMVC第一個入門案例服務器

  案例:用戶提交一個請求,服務器端處理器在接受到這個請求後,給出一條歡迎信息,在頁面中顯示。架構

01.導入jar包

   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>


<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.2.0.RELEASE</version>
</dependency>

02. 配置步驟

1〉在web.xml中配置前端控制器

2〉處理器映射器(HandlerMapping,有默認值,所以能夠不用配置)

3〉處理器適配器(HandlerAdaptor,有默認值,所以能夠不用配置)

4〉處理器

5〉試圖解析器(ViewResovler,有默認值,所以能夠不用配置)

03.註冊前端控制器

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.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>

</web-app>

04.定製處理器

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("/index.jsp");  //邏輯視圖名
        return mv;
    }
}

05.jsp頁面的搭建

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>Hello World!</h2>
</body>
</html>

06.applicationContext.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:mv="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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <bean id="/hello.do" class="cn.happy.controller.FirstController"></bean>
</beans>

5.第一個案例的提高----〉試圖解析器

01.在applicationContext.xml中加入:

    <!--試圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前綴-->
        <property name="prefix" value="/"></property>
        <!--後綴-->
        <property name="suffix" value=".jsp"></property>
    </bean>

02.將定製處理器中的邏輯試圖名修改一下:

  mv.setViewName("index");  //邏輯視圖名

6.關於urlpattern的說法

  01.最好配成*.do,不能配成/*,(沒法訪問*.jsp等動態資源),最好也不要配成/(沒法訪問靜態資源),不得不配成/。一切源於Restful編程

  02.不能配置爲/*  : DispatcherServlet會將向動態頁面請求,即向jsp頁面跳轉請求也看成是一個普通的Controller請求。中央調度器會調用處理器映射器爲其查找相應的處理器。固然是找不到的。jap頁面回報404錯誤。  結論:  /* 會攔截動態資源。

7.解決動態資源沒法訪問的三種方法:

01.不得不配成/,使用Tomcat默認的Servlet解決,在web.xml中加入以下代碼:

  <!--解決靜態資源方案 一    -->

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.pdb</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

02. 使用MVC的default-servlet-handler,會將對靜態資源訪問的請求經過HandlerMapping映射到默認的Servlet請求處理器DefaultServletRequestHandler對象。而該處理器調用了Tomcat的DefaultServlet來處理靜態資源的訪問請求。固然須要引入mvc約束。

 xmlns:mv="http://www.springframework.org/schema/mvc"

<!--解決靜態資源方案二  放在映射器下面-->
    <mv:default-servlet-handler/>

03.使用MVC的resource解決

      在spring3.0.4以後,spring定義了專門用於處理靜態資源請求處理器ResourceHttpRequestHandler。而且添加了<mvc:resource/>標籤,專門用於解決靜態資源沒法訪問問題。

<!--解決靜態資源方案三-->
    <mv:resources mapping="/image/**" location="/image/"/>

 Location:靜態資源所在的目錄

    mapping:對資源的請求 

相關文章
相關標籤/搜索