SpringMVC-02——【使用注解实现SpringMVC、以及注解说明】

4、使用注解开发SpringMVC

基本的一些流程创建web项目、导入pom依赖、编写代码、参数。

编写代码

  1. web.xml

    • 注册DispatcherServlet
    • 关联springMVc配置文件
    • 设置启动级别为1
    • 映射路径为/
    <?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">
        <!-- 配置DispatchServlet : 这个是springMVC的核心:请求分发器:前端控制器   -->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--  DispatcherServlet 要绑定spring的配置文件   -->
            <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>
        <!--
            在springMVC中   /   /*
            /:  只配置所有的请求,不会配置jsp页面
            /*: 置所有的请求,包括jsp页面
          -->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    
  2. springmvc-servlet.xml

    <?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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            https://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 自动扫描包、让指定包下的注解生效、由ioc容器统一管理   -->
        <context:component-scan base-package="com.wei.controller"/>
        <!-- 让SpringMvc不处理静态资源  如 .css  .js等等...   -->
        <mvc:default-servlet-handler/>
        <!--
            支持mvc注解驱动
            在spring中一般 彩用@RequestMapping注解来完成映射关系
            要想使@RequestMapping注解生效
            必须向上下文中注册DefaultAnnotationHandlerMapping
            和一个AnnotationMethodHandLerAdapter实例
            这两个实例分别在类级别和方法级别处理。
            而annotation-driven配置帮助我们自动完成上述两个实例的注入。
        -->
        <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>
    
  3. 创建controller.java

    @Controller
    public class HelloController {
    
        @RequestMapping("/hello")
        public String Hello(Model model){
            //在模型中添加msg属性和值、可以在jsp页面中直接获取
            model.addAttribute("msg","SpringMVC");
            // return走的是视图解析器 /WEB-INF/jsp/hello.jsp
            return "hello";
        }
    }
    
  4. hello.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${msg}
    </body>
    </html>
    
  5. 测试结果

在这里插入图片描述

小结:

  • 实现步骤
    • 创建web项目
    • 导入pom约束
    • 编写web.xml、注册DispatcherServlet
    • 编写springMVC文件
    • 编写controller文件
    • 测试结果
  • 使用SpringMVC必须要配置三大件
    • 处理器映射器、处理器适配器、视图解析器
    • 通常我们只需要配置视图解析器、而处理器映射器处理器适配器只需要我们开启注解驱动即可

5、Controller、RESTful风格

控制器Controller

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
  • 控制器负责解析用户的请求并将其转换为一个模型。
  • 在Spring MVC中-一个控制器类可以包含多个方法
  • 在Spring MVC中,对于Controller的配置方式有很多种

5.1、实现接口方式

有一个接口controller实现类这个类就是一个控制器类它负责返回一个model

  1. 编写实现Controller接口的类

    public class ControllerTest1 implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView vm = new ModelAndView();
            vm.addObject("msg","ControllerTest1");// 模型
            vm.setViewName("test");//视图
            return vm;
        }
    }
    
  2. 将这个bean注入到spring中

    <bean id="/t1" class="com.wei.controller.ControllerTest1"/>
    
  3. 编写前端jsp/这里要注意的是路径要和视图解析器对应上、否者找不到这个视图

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    ${msg}
    
    </body>
    </html>
    
  4. 配置tomcat测试结果

在这里插入图片描述

  1. 小结

    1. 实现接口Controller定义控制器是较老的办法
    2. 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller; 定义的方式比较麻烦;

5.2、注解Controller

  • @Cpntroller注解类型用于声明Spring类的实例是一个控制器

  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

    <!-- 自动扫描包、让指定包下的注解生效、由ioc容器统一管理   -->
    <context:component-scan base-package="com.wei.controller"/>
    
  • 增加一个controller类、使用注解实现

    @Controller
    public class ControllerTest2{
        @RequestMapping("/t1")
       public String controllerTest2(Model model){
            //springMVC会实例化一个model向视图值传值
            model.addAttribute("msg","ControllerTest2");
            //返回视图的位置
            return "test";
       }
    }
    
  • 测试结果

在这里插入图片描述

5.3、@RequestMapping

@RequestMapping注解用于映射url到控制器类或-个特定的处理程序方法。可用于类或方法上。于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@Controller
@RequestMapping("/test")
public class ControllerTest2{
    @RequestMapping("/t2")
    public String controllerTest2(Model model){
        //springMVC会实例化一个model向视图值传值
        model.addAttribute("msg","ControllerTest2");
        //返回视图的位置
        return "test";
    }
}

从上面代码可以看出使用了两个一个在类上一个在方法上、如果在类上加了、访问路径就要加上类上的路径

如:

http://localhost:8080/test/t2

如没有在类上加

http://localhost:8080/t2

可以看出他就是多了一层关系、在访问时要加上而已。

其他@RequestMapping中还可以加其他参数

如:

@RequestMapping(value = "commit/{a}/{b}",method = RequestMethod.GET)

限定请求方式、限定为get请求、不是get请求则报错

RequestMethod.GET — 》 这个get可以换成post等等一些值里面可以设置:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE : 请求方式

还有可以使用这种注解—》@GetMapping("/t1") : 设置资源访问路径、并设置请求的方式为get请求

  • 还有其他的几种注解对应的是各种请求方式
    • @GetMapping
    • @PostMapping
    • @PutMapping
    • @DeleteMapping
    • @PatchMapping

5.4、RESTful风格

什么是RESTful风格:他仅仅就是一个风格、是请求的一种风格

如:

http://localhost:8080/t2?name=小明&age=15   以前的提交url

http://localhost:8080/t2/name/小明/age/15   RESTful风格

代码测试

  1. 创建一个controller类

    @Controller
    public class RestFulController {
    }
    
  2. 使用@PathVariable注解跟@RequestMapping注解中的{a}/{b}的值对应上

    @Controller
    public class RestFulController {
        @RequestMapping("commit/{a}/{b}")
        public String Test(@PathVariable int a, @PathVariable int b, Model model){
            int count = a+b;
            model.addAttribute("msg","结果是"+count);
            return "test";
    
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值