您现在的位置是:首页 > 技术教程 正文

SpringWeb

admin 阅读: 2024-03-29
后台-插件-广告管理-内容页头部广告(手机)

文章目录

  • SpringWeb概述
    • 特点
    • 运行流程
    • 组件
  • SpringWeb搭建
  • 接收数据
  • 获取请求数据 四种方法
  • 返回json
  • 中文乱码处理
  • 拦截器

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.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>5.2.2.RELEASEversion> dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 配置 DispatcherServlet
    在 web.xml 文件中配置 DispatcherServlet
    配置 spring 核心请求分发器
<servlet> <servlet-name>springservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:spring.xmlparam-value> init-param> <load-on-startup>0load-on-startup> servlet> <servlet-mapping> <servlet-name>springservlet-name> <url-pattern>/url-pattern> servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 开启 SpringMVC 注解
<mvc:annotation-driven>mvc:annotation-driven>
  • 1
  • 2
  • 处理器类搭建
    @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对象接收,需要添加依赖
<dependency> <groupId>javax.servletgroupId> <artifactId>javax.servlet-apiartifactId> <version>4.0.1version> <scope>providedscope> dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
@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"; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

  • Spring自动封装

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

@GetMapping(path = "/login") public String login(String account,Integer password){ System.out.println(account); System.out.println(password); return "success"; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 使用@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"; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 使用实体类对象接收
@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"; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

返回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 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

<dependency> <groupId>com.fasterxml.jackson.coregroupId> <artifactId>jackson-databindartifactId> <version>2.14.2version> dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

中文乱码处理

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

<filter> <filter-name>characterEncodingFilterfilter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> <init-param> <param-name>encodingparam-name> <param-value>UTF-8param-value> init-param> filter> <filter-mapping> <filter-name>characterEncodingFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

拦截器

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜