SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架。Spring MVC是Spring框架的一部分,是在Spring3.0后发布的

Spring结构图

SpringMVC请求流程图

 

 

SpringMVC请求流程图语述:

request-------->DispatcherServler(中央调度器/前端控制器)-----> HandlerMapping(处理器映射器)------>返回一个执行链----->将执行链转交给HandlerAdaptor(处理器适配器)----->调度Handler(处理器)-----> ModelAndView----->先将结果交给HandlerAdaptor,然后再由HandlerAdaptor转交给 DispatcherServler--------->DispatcherServler调度ViewResolver(视图解析器)---->交给DispatcherServler-------> 寻找View---->View做出响应(response)

 SpringMVC的第一个入门案例

用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示。

第一步:导入jar包

在原有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大配置文件

原文地址:https://www.cnblogs.com/WuXuanKun/p/6197953.html