Controller和RestFul风格

控制器Controller

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。

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

  • 在Spring MVC中一个控制器类可以包含多个方法

  • 在Spring MVC中,对于Controller的配置方式有很多

建议使用注解定义,方便。

原因

​ 传统的方法,实现controller接口,要在spring配置文件中配置bean,且一个bean对应一个请求路径,如果项目有上百个请求接口,那就需要上百个类和在spring配置文件中配置。

其实@Controller,@Component,@Repository,@Service,其中他们的功能等效,只不过为了分层,将注解运用于不同的地方。控制层用controller,业务层用service,数据库操作层用repository,component用于组件,比如讲一个工具类注入容器中。

代码(注解开发)

1.首先配置web.xml

<!--配置dispatchservlet,这是springmvc的核心:请求分发器,或者前端控制器-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--绑定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>

2.创建spring配置文件springmvc-servlet.xml,记住一定会要导入约束和命名空间。

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.sh.controller"/>
<!-- 让Spring MVC不处理静态资源  .css .js .html .mp3 .mp4-->
<mvc:default-servlet-handler />
<!--
            支持mvc注解驱动
            在spring中一般采用@RequestMapping注解来完成映射关系
            要想使@RequestMapping注解生效
            必须向上下文中注册DefaultAnnotationHandlerMapping
            和一个AnnotationMethodHandlerAdapter实例
            这两个实例分别在类级别和方法级别处理。
            而annotation-driven配置帮助我们自动完成上述两个实例的注入。
            -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
</bean>

3.编写界面

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

4.编写controller

/**
 * @author: songhui
 * @create: 2020-04-08 10:49
 */
@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String test(Model model){
        model.addAttribute("msg","hello ,springmvc");
        return "test";
    }

}

5.测试结果

QQ截图20200408113810.png

确实相比接口定义,实际代码减少了很多,但是接口多起来,还是挺麻烦的。由此一种新的开发模式前后端分离应运而生,前端控制页面跳转、数据绑定和UI,后端就提供前端数据接口,避免了后端开发业务的同时控制页面跳转。

RequestMapping

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

ResultFul风格

概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格 设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
功能 资源:互联网所有的事物都可以被抽象为资源 资源操作:使用POST、DELETE、PUT、GET,使用 不同方法对资源进行操作。 分别对应 添加、 删除、修改、查询。

传统方式操作资源 :通过不同的参数来实现不同的效果!方法单一,post 和 get

  • http://127.0.0.1/item/queryItem.action?id=1 查询,GET

  • http://127.0.0.1/item/saveItem.action 新 增,POST

  • http://127.0.0.1/item/updateItem.action 更新,POST

  • http://127.0.0.1/item/deleteItem.acti on?id=1 删除,GET或POST

    **使用RESTful操作资源 **: 可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能 可以不同

  • http://127.0.0.1/item/1 查询,GET

  • http://127.0.0.1/item 新增,POST

  • http://127.0.0.1/item 更新,PUT

  • http://127.0.0.1/item/1 删除,DELETE

参数的改变

传统的

@RequestMapping("/add")
public String test(int a,int b, Model model){
    int res=a+b;
    model.addAttribute("msg","结果为"+res);
    return "test";
}

结果

QQ截图20200408121253.png

restful风格

@RequestMapping("/add/{a}/{b}")
public String test(@PathVariable("a") int a,@PathVariable("b") int b, Model model){
    int res=a+b;
    model.addAttribute("msg","结果为"+res);
    return "test";
}

结果

QQ截图20200408121253.png

请求方式的差别

更改请求方式

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

QQ截图20200408122012.png

因为浏览器输入是get请求,方法不被允许。

除此之外,请求方式注解还有另一种形式

  • GetMapping

  • PostMapping

  • DeleteMapping

  • PutMapping

    请求方式和请求地址不能完全相同,否则会报错

好处

  • restful风格避免了参数的暴露

  • 简洁

  • 高效()支持缓存

发布了1 篇原创文章 · 获赞 0 · 访问量 6

猜你喜欢

转载自blog.csdn.net/weixin_43624399/article/details/105387623
今日推荐