zoukankan      html  css  js  c++  java
  • Spring-MVC理解之二:前置控制器

    一、前置控制器配置与讲解  

      上篇中理解了IOC容器的初始化时机,并理解了webApplicationContext和SevletContext和servlet的param等的概念和关系。

      现在记录,如何配置前置控制器:

        <servlet>
            <servlet-name>MainServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:spring/applicationContext-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>MainServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

      对于url-pattern配置成*.do等形式的前置控制器配置,不记录了,只记录REST风格的配置。

      <url-pattern>/</url-pattern>这种方式的配置,那么tomcat会把所有访问该应用的请求都分配给org.springframework.web.servlet.DispatcherServlet来进行处理。

    package com.brolanda.educloud.core.login.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    @RequestMapping(value="/login")
    public class LoginController {
        @RequestMapping(value="/validate",method=RequestMethod.GET)
        public String validateUser(){
            return "home/home";
        }
    }

    我们在系统内创建一个controller,并配置对应的url请求路径,其中在Controller上配置的@RequestMapping(value="/login"),是说http://ip:port/app/login的request都转到这个控制器上,然后在validateUser方法上配置的 @RequestMapping(value="/validate",method=RequestMethod.GET),是告诉前置控制器,http://ip:port/app/login/validta的request请求都转向LoginController 的validateUser()方法进行处理。

    二、静态资源配置

      ok,到此,理解了前置控制器对请求的转发,与使用注解的方式标注Controller。那么问题来了,所有的请求都会转给前置控制器,而前置控制器的工作原理就是针对每个请求找到相应的Controller进行处理,并返回消息。那么,针对静态资源的请求,前置控制器就只好报异常了,因为它确实找不到。

      所以,我们需要告诉静态资源的请求如何处理,有两种方式:

    方式一:使用容器的默认处理器。

    <mvc:default-servlet-handler />

    此配置告诉DispatcherServlet,对于找不到Controller的请求,就把它交给tomcat的默认处理器就行处理,而tomcat的默认处理器会把请求的资源返回给客户端。

    方式二:在前置控制器的配置文件中指明静态资源的请求路径,该路径下的请求一律直接返回资源即可。

    <mvc:resources location="/resources/" mapping="/resources/**"/>

    此配置告诉DispatcherServlet,任何http://ip:port/app/resources/**的请求都将其定位到/resources/目录下,并寻找对应的目录文件,作为资源文件返回给客户端。

      其中,两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)。

    例如:

    1. 访问,浏览器显示webapp/resources/test.png

    2. 访问,浏览器显示webapp/resources/scripts/test.js

    3. 访问,浏览器显示webapp/resources/css/2012/test.css

      三种访问url,如果只配一个*就只第一个能访问,现在配置两个*那么1、2、3均可访问。

    三、视图配置

      controller可以返回很多类型的信息,目前我用到的就是json、和jsp,那么,如果返回的jsp,我们需要如何配置呢?

        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="jspViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/resources/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>

      prefix是前缀信息,suffix是后缀信息

      controller处理完之后,返回了login,那么会返回客户端http://ip:port/app/resources/jsp/login.jsp页面信息。

    至此,spring-mvc基础配置完成

  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/brolanda/p/4265749.html
Copyright © 2011-2022 走看看