• SpringMVC的核心类和注解


    1.1 DispatcherServlet

    DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充当着前端控制器的角色。

    在使用时,只需将其配置在项目的web.xml文件中,其配置代码如下。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xmlns="http://java.sun.com/xml/ns/javaee" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
             id="WebApp_ID" version="2.5">
     <servlet>
       <!-- 配置前端过滤器 -->
       <servlet-name>springmvc</servlet-name>
       <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
       </servlet-class>
       <!-- 初始化时加载配置文件 -->
       <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:springmvc-config.xml</param-value>
       </init-param>
       <!-- 表示容器在启动时立即加载Servlet -->
       <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
    </web-app>

    在上述代码中,<load-on-startup>元素和<init-param>元素都是可选的。

    如果<load-on-startup>元素的值为1,则在应用程序启动时会立即加载该Servlet;

    如果<load-on-startup>元素不存在,则应用程序会在第一个Servlet请求时加载该Servlet。

    如果<init-param>元素存在并且通过其子元素配置了Spring MVC配置文件的路径,

    则应用程序在启动时会加载配置路径下的配置文件;如果没有通过<init-param>元素配置,

    则应用程序会默认到WEB-INF目录下寻找如下方式命名的配置文件。

    servletName-servlet.xml

    其中,servletName指的是部署在web.xml中的DispatcherServlet的名称,

    在上面web.xml中的配置代码中即为springmvc,而-servlet.xml是配置文件名的固定写法,

    所以应用程序会在WEB-INF下寻找springmvc-servlet.xml。

    1.2 Controller注解类型

    org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,

    其注解形式为@Controller。该注解在使用时不需要再实现Controller接口,只需要将@Controller注解加入到控制器类上,

    然后通过Spring的扫描机制找到标注了该注解的控制器即可。

    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 FirstController implements Controller {
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
            //创建ModelAndView对象
            ModelAndView mav=new ModelAndView();
            //向模型对象中添加数据
            mav.addObject("msg","这是我的第一个SpringMVC程序");
            //设置逻辑视图名
            mav.setViewName("/jsp/first.jsp");
            //返回ModelAndView对象
            return mav;
        }
    
    }

    为了保证Spring能够找到控制器类,还需要在Spring MVC的配置文件中添加相应的扫描配置信息,

    具体如下。

    (1)在配置文件的声明中引入spring-context。

    (2)使用<context:component-scan>元素指定需要扫描的类包。

    一个完整的配置文件示例如文件所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.3.xsd">
          <!-- 指定需要扫描的包 -->
          <context:component-scan base-package="com.itheima.controller"/>
    </beans>

    <context:component-scan>元素的属性base-package指定了需要扫描的类包为com.itheima.controller。

    在运行时,该类包及其子包下所有标注了注解的类都会被Spring所处理。

    与实现了Controller接口的方式相比,使用注解的方式显然更加简单。

    同时,Controller接口的实现类只能处理一个单一的请求动作,而基于注解的控制器可以同时处理多个请求动作,

    在使用上更加的灵活。因此,在实际开发中通常都会使用基于注解的形式。

    1.3 RequestMapping注解类型

    1.3.1 @RequestMapping注解的使用

    Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的。

    这就需要使用org.springframework.web.bind.annotation.RequestMapping注解类型。

    RequestMapping注解类型用于映射一个请求或一个方法,其注解形式为@RequestMapping,可以使用该注解标注在一个方法或一个类上。

    标注在方法上

    当标注在一个方法上时,该方法将成为一个请求处理方法,

    它会在程序接收到对应的URL请求时被调用。使用@RequestMapping注解标注在方法上的示例如下。

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    @Controller
    public class FirstController {
        @RequestMapping(value="/firstController")
        public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
            //创建ModelAndView对象
            ModelAndView mav=new ModelAndView();
            //向模型对象中添加数据
            mav.addObject("msg","这是我的第一个SpringMVC程序");
            //设置逻辑视图名
            mav.setViewName("/jsp/first.jsp");
            //返回ModelAndView对象
            return mav;
        }
    }

    标注在类上

    当标注在一个类上时,该类中的所有方法都将映射为相对于类级别的请求,

    表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下。

    使用@RequestMapping注解标注在类上的示例如下

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    @Controller
    @RequestMapping(value="/hello")
    public class FirstController {
        @RequestMapping(value="/firstController")
        public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
            //创建ModelAndView对象
            ModelAndView mav=new ModelAndView();
            //向模型对象中添加数据
            mav.addObject("msg","这是我的第一个SpringMVC程序");
            //设置逻辑视图名
            mav.setViewName("/jsp/first.jsp");
            //返回ModelAndView对象
            return mav;
        }
    }

    1.3.2@RequestMapping注解的属性

    @RequestMapping注解除了可以指定value属性外,还可以指定其他一些属性,这些属性如表12-1所示。

    12.3.3 组合注解

    前面两个小节已经对@RequestMapping注解及其属性进行了详细讲解,而在Spring框架的4.3版本中,

    引入了组合注解,来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。

    其组合注解如下所示。

    · @GetMapping:匹配GET方式的请求。

    · @PostMapping:匹配POST方式的请求。

    · @PutMapping:匹配PUT方式的请求。

    · @DeleteMapping:匹配DELETE方式的请求。

    · @PatchMapping:匹配PATCH方式的请求。

    以@GetMapping为例,该组合注解是@RequestMapping(method = RequestMethod.GET)的缩写,

    它会将HTTP GET映射到特定的处理方法上。在实际开发中,传统的@RequestMapping注解使用方式如下

    1.4 ViewResolver(视图解析器)

    Spring MVC中的视图解析器负责解析视图,可以通过在配置文件中定义一个ViewResolver来配置视图解析器,其配置示例如下。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.3.xsd">
          <!-- 指定需要扫描的包 -->
          <context:component-scan base-package="com.itheima.controller"/>
       
         <!-- 视图解析器 -->
         <bean id="viewResolver"
         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <!-- 设置前缀 -->
             <property name="prefix" value="/jsp/"></property>
             <!-- 设置后缀 -->
             <property name="suffix" value=".jsp"></property>
         </bean>
    </beans>
    一纸高中万里风,寒窗读破华堂空。 莫道长安花看尽,由来枝叶几相同?
  • 相关阅读:
    js原型链
    js的__proto__,prototype、constructor属性
    百度ife2015-小白的弯路2
    百度ife2015-小白的弯路1
    Visaul Studio 密钥
    pycharm常用的一些快捷键
    python3练习题--字符串
    字符串相关方法
    python3 基本数据类型
    在python中缩进的重要性
  • 原文地址:https://www.cnblogs.com/byczyz/p/12187849.html
Copyright © 2020-2023  润新知