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基础配置完成

  • 相关阅读:
    dblink && 视图 数据库二合一
    oracle mybatis 逆向工程 应当注意的问题
    关于使用vue搭建前后端分离的项目,部署过程遇到的问题
    详解vue静态资源打包中的坑与解决方案
    bootstarap table 分页导出 vue版
    react中两个控件不是父子关系该怎么传递消息或任意控件怎么传递消息
    虚拟DOM中key的作用
    修改Antd的List列表的单个数据行
    移动端开发如何关闭手机键盘
    在一行显示两个数据,左边的数据右对齐,右边的数据左对齐
  • 原文地址:https://www.cnblogs.com/xqx-qyy/p/7630039.html
Copyright © 2011-2022 走看看