SpringWeb

一、SpringWeb概述

以前的ssm spring strust2 mybatis

​ ssh spring strust2 hibernate

现在 ssm spring springweb mybatis

springweb 是spring框架中,对java后端web层进行了封装,和spring框架可以无缝对接,是基于servlet API的实现。

SpringWeb特点

  • SpringWEB 是 spring 家族原生产品,与 IOC 容器等基础设施无缝对接.
  • 基于原生的 Servlet,提供了一个前端控制器 DispatcherServlet ,开发者无须额外开发控制器对象.
  • 可以自动绑定用户输入,并正确地转换数据类型.
  • 代码清新简洁,大幅度提升开发效率.
  • 内部组件化程度高,可插拔式组件即插即用.
  • 性能卓著,尤其适合现代大型、超大型互联网项目要求.

SpringWeb运行流程

前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在

web.xml 中配置。

**作用:**统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理

用户的请求.

处理器映射器:HandlerMapping(不需要程序员开发),由框架提供。

作用:根据请求的 url 查找 Handler(处理器/Controller)

**处理器适配器:**HandlerAdapter(不需要程序员开发),由框架提供。

作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。

**处理器:**Handler(也称之为 Controller,需要工程师开发)。

注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可

以去正确执行 Handler。

作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

得死派克servlet 接收所有前端发送请求

在这里插入图片描述

二、SpringWeb搭建

1.导入 jar包

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

2.配置 DispatcherServlet


    <!--配置spring核心请求 分发servlet 由他接收所有请求,进行分配调度-->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern><!--表示任何请求都可以进入到DispatcherServlet-->
    </servlet-mapping>

3.开启 springMVC注解

spring.xml

<mvc:annotation-driven></mvc:annotation-driven>

4.处理器类搭建

@RestController用于标记在一个类上,使用它标记的类就是一个 SpringWEB控制器类。

spirng中配置了指定扫描的 basepackage后,spring会自动扫描 这些包以及子包中使用了@RestController标识的类, 然后将类加到spring IOC容器中,注入依赖。

@RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上。

@RestController
@RequestMapping(path = "/loginCtl")
public class LoginControler {

三、接收请求

1.@RequestMapping

@RestController 用来标注web层的类,它的作用就是与请求相匹配,如果匹配上了,所修饰的方法才会被执行.
@RequestMapping(path = “/loginCtl”) 可以使用在类上,也可以使用在方法上 不能重复,请求的路径为 “http://localhost:8080/ssm/loginCtl, 请求方式没有限制,即可以是GET也可以是 POST,还能是其它的几个。
@RequestMapping 使用value path定义映射地址
@RequestMapping(path = “/loginCtl”,method = RequestMethod.POST)
method 指定访问此方法的请求方式

@PostMapping @GetMapping,指定请求方式为get或者post

2.获取请求数据

2.1spring 自动封装

框架会自动把请求参数名为account和password的值封装到方法参数account和password中去

/*
    自动封装, 要求形参的名字与请求中类型的名字一致,   请求数据类型与形参类型相匹配
 */
    @GetMapping(path = "/login")
    public String login(String account,String pssword){
        System.out.println("account");

        return "success";
    }

2.2.使用 request 对象接收

在处理中如果需要使用到 HttpServletRequest 对象只需要定义即可

@GetMapping(path = "/login")
public String login(HttpServletRequest request, HttpSession httpSession) {
    System.out.println(request.getParameter("account"));
              //使用request和httpSession中的方法获得请求的参数
 }

2.3@RequestParam参数绑定

使用@RequestParam(“”)进行参数绑定,@RequestHeader(“”)

    @PostMapping(path = "/login2")
    public String login2(@RequestParam("acc") String account){
        System.out.println(122);
        return "success2";
    }

@RequestParam 注解还有两个属性:

  1. required:参数是否必须。代表页面是否必须传递该参数。如果该值为

true,但没有传递参数,会报错。

  1. defaultValue:默认值。代表如果页面没有传递该参数,使用 defaultValue

的值代替。

    @PostMapping(path = "/login2")
    public String login2(
            @RequestParam(value = "acc",required = true,defaultValue = "tom")
                    String account){
        System.out.println(122);
        return "success2";
    }

2.4使用实体对象类接收

@RequestBody如果前端传递内容为 json 格式 使用@RequestBody 将 Json 字符串转换为后端 Java 对象, 导入关于json的jar包

    @PostMapping(path = "/login")
    public String login(@RequestBody Admin admin){
        System.out.println(1);
        System.out.println(admin.getAccount());
        System.out.println(admin.getPassword());
        Admin a=new Admin();
        CommonResult commonResult=new CommonResult(200,a,"登陆成功");
        return "success";
    }

HandlerAdapter 会将这个对象的实例创建出来,然后从请求参数中取出这些参数然后放到实体对象中(数据封装)
注意:请求参数的名称要和实体类的属性名相同,且实体类中最好要添加属性的get和set方法

四、拦截器

SpringWeb中的拦截器,类似Servlet中的过滤器,拦截用户请求并做出响应处理

Spring 中的拦截器与过滤器有着本质的区别,过滤器是 servlet 规范中定义并实现的,在进入到 servlet 之前截获请求.而拦截器是 spring 中定义的一种拦截机制, 是对进入到处理器的请求进行拦截。

1.定义拦截器

SpringWeb中定义了拦截器接口,HandlerInterceptor,该接口中定义了三个方法,这三个方法的调用时在 SpringMVC 框架内部完成的, 调用这个三个方法的时候,其参数的值也是从框架内部传递进来的。

public class DemoInterceptor implements HandlerInterceptor {
    /*
        当请求到达处理器之前 进行拦截处理
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("我是 拦截器");
        // true 离开拦截器 继续向后执行
        // false 不想后执行
        return false;
    }
}

2.注册拦截器

<!--拦截器配置-->
<mvc:interceptors>
	<mvc:interceptor>
   	    <!--哪些请求进入拦截器-->
    	<mvc:mapping path="/**"/>
    	<!--哪些请求不进入拦截器-->
    	<mvc:exclude-mapping path="/loginCtl/login"/>
    	<mvc:exclude-mapping path="/loginCtl/login1"/>
        <!--拦截器地址-->
    	<bean class="com.ffyc.ssm.util.DemoInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>
<!--拦截器配置-->
<mvc:interceptors>
	<mvc:interceptor>
   	    <!--哪些请求进入拦截器-->
    	<mvc:mapping path="/**"/>
    	<!--哪些请求不进入拦截器-->
    	<mvc:exclude-mapping path="/loginCtl/login"/>
    	<mvc:exclude-mapping path="/loginCtl/login1"/>
        <!--拦截器地址-->
    	<bean class="com.ffyc.ssm.util.DemoInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值