SpringMVC入門案例及請求流程圖(關於處理器或視圖解析器或處理器映射器等的初步配置)

SpringMVC簡介:SpringMVC也叫Spring Web mvc,屬於表現層的框架。Spring MVC是Spring框架的一部分,是在Spring3.0後發佈的css

Spring結構圖html

SpringMVC請求流程圖前端

 

 

 

SpringMVC請求流程圖語述:java

request-------->DispatcherServler(中央調度器/前端控制器)-----> HandlerMapping(處理器映射器)------>返回一個執行鏈----->將執行鏈轉交給HandlerAdaptor(處理器適配器)----->調度Handler(處理器)-----> ModelAndView----->先將結果交給HandlerAdaptor,而後再由HandlerAdaptor轉交給 DispatcherServler--------->DispatcherServler調度ViewResolver(視圖解析器)---->交給DispatcherServler-------> 尋找View---->View作出響應(response)web

 SpringMVC的第一個入門案例spring

用戶提交一個請求,服務器端處理器在接收到這個請求後,給出一條歡迎信息,在頁面中顯示。編程

第一步:導入jar包spring-mvc

在原有Springjar包基礎上添加2個jar包緩存

spring-webmvc-4.2.0.RELEASE.jar  做用:對Spring mvc的實現服務器

spring-context-support-4.2.0.RELEASE.jar  做用:包含支持UI模板,郵件服務,緩存Cache等方面的類

分析配置步驟:

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

2.處理器映射器(HandlerMapping)

3.處理器適配器 (HandlerAdaptor)

4.處理器

5.視圖解析器(ViewResolver)

 註冊中央調度器

關於urlpattern的說法:

最好配成*.do

不能配成/*             沒法訪問*.jsp等動態資源

最好也不要配成/      沒法訪問靜態資源

不得不配成/           Restful編程 rest

問題:/*配法出現404問題

解釋:Ⅰ:不能配置爲/*

DispatcherServlet會將向動態頁面請求,即向jsp頁面的跳轉請求也當作是一個普通的Controller請求。

中央調度器會調用處理器映射器爲其查找相應的處理器。固然是找不到的。jsp頁面會報404錯誤 結論:/*會攔截動態資源

Ⅱ:方案一:使用Tomcat默認的Servlet解決

不得不配成/  解釋:上圖中:紅色標註第三中配置

方案二:使用MVC的default-servlet-handler

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

方式三:使用MVC的resource解決

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

Location:靜態資源所在目錄 mapping: 對資源的請求 注意:須要Tomcat7支持

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name></display-name>

    <!-- 1. 配置中央調度器(前端控制器) -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 3.1指定配置文件applicationContext.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <!-- 3.2Tomcat啓動的時候,Service對象已經到內存 下面該數字要大於等於1,0或者是負數,跟沒設置是同樣的 -->
        <load-on-startup>1</load-on-startup>

    </servlet>
    <!-- 第一種,能夠查看圖片 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    
    
    
    <!--第二種配置  和applicationContext.xml中的<mvc:default-servlet-handler/> 結合使用-->
    <!--<servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping> -->
    
    
    
    
    <!-- 
    第三種配置
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.JPG</url-pattern>
  </servlet-mapping>
  <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>*.png</url-pattern>
  </servlet-mapping> -->


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
配置中央調度器代碼

定製處理器:

package cn.happy.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
//一個類怎麼就能成爲一個Controller
public class YController implements Controller{//處理器
    //handleRequest 處理請求
    //ModelAndView  返回值類型
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg", "明天放假一天");
        //處理一道
        //mv.setViewName("WEB-INF/jsp/index.jsp");
        mv.setViewName("index");
        
        return mv;
    }
}
定製處理器

jsp頁面搭建:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    

  </head>
  
  <body>
       第一個Springmvc程序
    <!-- 頁面上如何獲取 -->
    <img alt="girl" src="images/18.jpg" width="300px" height="300px">
      ${msg }
  </body>
</html>
index.jsp頁面

大配置中:註冊處理器和視圖解析器

 訪問頁面:

 配置式開發--BeanNameUrlHandlerMapping

配置式開發--SimpleUrlHandlerMapping

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.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
        ">
        <!-- 配置處理器映射器 --> 
        <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        </bean> -->
        <!-- 註冊處理器映射器 -->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           <property name="mappings">
               <props>
                  <prop key="/hello.do">firstController</prop>
                  <prop key="/say.do">firstController</prop>
               </props>          
           </property>
        </bean>
        
        <!-- 註冊處理映射器 -->
       <!--  <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="urlMap">
               <map>
                 <entry key="/hello.do">
                   <value>firstController</value>
                 </entry>
                 <entry key="/say.do">
                   <value>firstController</value>
                 </entry>
               </map>
            </property>
        </bean>  -->
     
        <bean id="firstController" class="cn.happy.controller.YController"></bean>
        
        
       <!-- 處理/請求路徑下靜態資源沒法訪問的問題 -->
       <!-- <mvc:default-servlet-handler/> -->
      
      <!-- 方案四:TOmcat7的支持 -->
     <!--  <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> -->
        
     <!-- 註冊處理器   請求地址-->
     <!-- 該配置須要和 Controller中的mv.setViewName全路徑-->
     <bean id="/hello.do" class="cn.happy.controller.YController"></bean> 
     
     
      <!-- 視圖解析器 ViewResolver -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <!-- 前綴 jstl  struts2 -->
     <property name="prefix" value="/WEB-INF/jsp/"></property>
     <!--後綴  -->
     <property name="suffix" value=".jsp"></property>
     </bean> 
</beans>  
applicationContext.xml大配置文件

相關文章
相關標籤/搜索