第一步还是配置web.xml,使用分发器统一处理请求和加载容器文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <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-Servlet.xml</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

 

第二步,还是一样配置要加载的容器文件

不过我们不需要再写那么多的Bean了

约束,Bean扫描注册,解析器

<?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"
       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/context
       http://www.springframework.org/schema/context/spring-context.xsd
       
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/springcon-mvc.xsd
"
>
    <!-- 目录扫描的方式注册Bean -->
    <context:component-scan base-package="cn.dai.controller" />
    <!-- 默认的Servlet处理器 不处理静态资源-->   
    <mvc:default-servlet-handler />
    <!-- MVC 注解驱动支持-->
    <mvc:annotation-driven/>    
   
    <!-- 视图解析器 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp" />
        <property name="suffix" value=".jsp" />
    </bean>
    
</beans>

 

Controller直接注解配置

package cn.dai.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author ArkD42
 * @file SpringMVC
 * @create 2020 - 05 - 06 - 20:44
 */
@Controller
public class AnnotationController {

    @RequestMapping("/toHello") // 如何设置这个请求的访问路径
    public String toHello(Model model){//方法可以空参,也可以要求获取请求参数,或者是前面的Model&View对象
        // 就比如这个模型对象,就相当于域数据
        model.addAttribute("msg","Hello AnnotationSpringMVC!!!");

        return "/hello"; // 这个return就是视图解析器要拼接的视图名称
    }
}

 

访问:

【SpringMVC】03 使用注解_spring

 

另外Controller可以实现多重路径,应该叫父子级路径

@Controller
@RequestMapping("/AnoCon") //父级路径
public class AnnotationController {

    @RequestMapping("/toHello") // 如何设置这个请求的访问路径
    public String toHello(Model model){//方法可以空参,也可以要求获取请求参数,或者是前面的Model&View对象
        // 就比如这个模型对象,就相当于域数据
        model.addAttribute("msg","Hello AnnotationSpringMVC!!!");

        return "hello"; // 这个return就是视图解析器要拼接的视图名称
    }
}

 访问

【SpringMVC】03 使用注解_java_02


 

Controller概述:

控制器负责提供应用程序的行为,通常接口或注解定义两种方法实现

控制器负责解析用户的请求并讲转换为一个模型

这个控制器可以包含若干个方法【即:若干个请求处理方法】

对控制器的配置实现也是多个方法的

 

第一种办法就是实现Controller接口,重写请求处理方法。

这样的好处是:不需要注解的配置

但是坏处是:一个类只能写一个这唯一方法,而且路径不允许配置多个,也没有父子级路径

 

第二种办法是配置注解,然后使用注解注册Controller

 

@RequestMapping 请求映射路径

注解在类上,固定为方法路径前的父级路径

注解在方法上,固定为控制器处理的请求路径

 


 

不使用视图解析器

 

使用@RestController

【SpringMVC】03 使用注解_视图解析器_03

 

对处理方法使用@ResponseBody

响应体注解

【SpringMVC】03 使用注解_视图解析器_04