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

    原文链接:http://www.cnblogs.com/brolanda/p/4265749.html

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

      上篇中理解了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基础配置完成

  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/xqx-qyy/p/7630039.html
Copyright © 2011-2022 走看看