首页 > 其他分享 >SpringWeb

SpringWeb

时间:2024-03-18 20:31:53浏览次数:14  
标签:请求 SpringWeb System 处理器 println login out

文章目录

SpringWeb概述

SpringWeb是Spring框架中的一部分,是对java后端web层进行了封装,和Spring框架可以无缝对接,是基于Servlet API的实现。

特点

  • 与IOC容器等无缝对接
  • 基于原生的Servlet,提供了一个前端控制器DispatcherServlet,开发者不用再开发控制器对象
  • 可以自动绑定用户输入,并正确地转换数据类型
  • 代码清新简洁,大幅度提升开发效率

运行流程

  • 用户发送请求到前端控制器 DispatcherServlet
  • DispatcherServlet 收到请求调用 HandlerMapping(处理器映射器)
  • HandlerMapping 解析请求地址,生成处理器对象及处理器拦截对象(如果有),返回给DispatcherServlet
  • DispatcherServlet 调用 HandlerAdapter(处理器适配器)
  • HandlerAdapter 经过适配调用具体的处理器(Handler/Controller)
  • Controller 执行完向前端响应结果

组件

  • 前端控制器DispatcherServlet,由框架提供,在web.xml中配置
    作用:统一处理请求和响应,整个流程的控制中心
  • 处理器映射器HandlerMapping,不需要程序员开发,由框架提供
    作用:根据请求的URL查找Controller
  • 处理适配器HandlerAdapter
    作用:按照其规则去执行Handler
  • 处理器Handler(Controller),需要程序员自己开发。
    作用:接收用户请求信息,处理请求,也称后端控制器

SpringWeb搭建

  • 导包
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.2.2.RELEASE</version>
</dependency>
  • 配置 DispatcherServlet
    在 web.xml 文件中配置 DispatcherServlet
    配置 spring 核心请求分发器
 <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>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 开启 SpringMVC 注解
<!--开启springweb注解-->
    <mvc:annotation-driven></mvc:annotation-driven>
  • 处理器类搭建
    @RestController 用于标记在一个类上,使用它标记的类就是一个 SpringWEB控制器类。
    Spring 配置中指定了自动扫描的 basepackage 后,Spring 会扫描这些包以及子包中的使用了@RestController 标识的类,然后将类加入到 Spring IOC 容器中,注入依赖。
    @RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上。

接收数据

  • @RestController 用来标注web层的类
  • @RequestMapping(path = "/loginCtl") 可以使用在类上,也可以使用在方法上,为类或方法定义访问地址,不能重复。可以使用path也可以使用value。method 用来定义访问此方法请求方式method = RequestMethod.POST,如果定义为post请求,通过地址栏访问 报错405 方法不允许
  • @PostMapping
  • @GetMapping

获取请求数据 四种方法

  • 使用request对象接收,需要添加依赖
  <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
 @GetMapping(path = "/login")
    public String login(HttpServletRequest request){
        System.out.println(request.getParameter("account"));
        System.out.println(request.getMethod());
        System.out.println(request.getRequestURL());
        return "666";
    }

在这里插入图片描述

  • Spring自动封装

Spring 会自定进行数据封装,这里要注意的是,处理器接收参数的形参名称必须和表单的属性保持一致,否则会接收失败!形参和名字和类型必须与请求中的一致
在这里插入图片描述

    @GetMapping(path = "/login")
    public String login(String account,Integer password){
        System.out.println(account);
        System.out.println(password);
        return "success";
    }
  • 使用@RequestParam(“”)进行参数绑定,@RequestHeader(“”)请求头
	public String login(String account,
						@RequestParam("pwd") Integer password,
						@@RequestHeader("User-Agent") String UserAgent){
        System.out.println(account);
        System.out.println(password);
        return "success";
    }
  • 使用实体类对象接收
    @PostMapping(path = "/login")
    public CommonResult login(@RequestBody Admin admin) {
        System.out.println(admin.getAccount());
        System.out.println(admin.getPassword());
        Admin a = loginService.login(admin);
        return "success";
    }

返回json

当请求参数为json时,参数列表必须用一个类来接收,需要在前面添加@RequestBody

如果前端传递内容为 json 格式 使用@RequestBody 将 Json 字符串转换为后端 Java 对象

 	@PostMapping(path = "/login")
    public CommonResult login(@RequestBody Admin admin) {
        System.out.println(admin.getAccount());
        System.out.println(admin.getPassword());
        Admin a = new Admin();
        CommonResult commonResult = new CommonResult(200, a, "登录成功");
        return commonResult;//springweb中,自动返回一个对象,可以自动将对象转化为json
    }

但是必须在项目中导入相应的转 json 组件才可以直接将响应的对象转为 json

<!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.2</version>
        </dependency>

属性类型为 Date 类型需要指定转换格式

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday

中文乱码处理

SpringWeb为我们提供了过滤器,在web.xml中配置

	<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

拦截器

Spring中的拦截器是 spring 中定义的一种拦截机制, 是对进入到处理器的请求进行拦截实现。

  1. 编写一个类,继承 HandlerInterceptorAdapter

当请求到达控制器之前被执行
true–继续向下执行,到达下一个拦截器,或控制器
false–不会继续向下执行

ublic class DemoInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入到拦截器");
        return true;
    }
}
  1. 注册拦截器
 <!--拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/loginCtl/login"/><!--不进入拦截器的地址-->
            <mvc:exclude-mapping path="/loginCtl/test2"/>
            <bean class="com.ffyc.ssm.util.DemoInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

标签:请求,SpringWeb,System,处理器,println,login,out
From: https://blog.csdn.net/Wasd_222/article/details/136785947

相关文章

  • [SpringSecurity5.6.2源码分析三]:SpringWebMvcImportSelector
    1、SpringWebMvcImportSelector• SpringSecurity支持在SpringMVC进行参数解析的时候填充参数,支持以下的对象• 通过@AuthenticationPrincipal,获取UserDetails• 通过@CurrentSecurityContext,获取SecurityContext• 通过参数类型为CsrfToken获取CsrfToken• 究其原因是因为Spr......
  • SpringBoot:SpringWeb项目+Vue项目dist包整合成jar包
    接到需求做一个小功能项目,其中还要配备前端页面,并且将前端打包进后端jar包内,由jar包运行。项目结构将Vue打包之后的dist文件放到resouces资源路径下修改pom文件将下面的build配置替换掉pom中的build<build><finalName>自定义项目jar名称(可以用${project.artifatId})</finalNam......
  • SpringWeb Flux入门
    新建项目,加入依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframew......
  • SpringWebFlux~webclient响应式HttpClient
    1.webClientSpringWebFlux包括WebClient对Http请求的响应式,非阻塞。WebClient实例创建方式:1.1通过静态工厂方法创建响应式WebClient实例WebClient.create()WebClient.create(StringbaseUrl)packagecom.crazymaker.springcloud.reactive.rpc.mock;importorg.......
  • SpringWeb项目越权漏洞以及解决方案
    https://blog.csdn.net/luostudent/article/details/124119997?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ER......
  • SpringWebflux框架里导出excel文档
    本demo里使用springboot2.7.0版本。@GetMapping("/download/excel/file")publicMono<Void>downloadExcelFile(ServerHttpResponseresponse,WebSessionwebSessi......