当前位置: 首页 > news >正文

SpringMVC

SpringMVC配置

  1. 引入Maven依赖 (springmvc)
  2. web.xml配置DispatcherServlet
  3. 配置 applicationContext 的 MVC 标记
  4. 开发Controller控制器

几点注意事项:

  1. 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建SpringIOC容器并初始化DispatcherServlet
  2. 增加ContextConfigLocation地址
  3. @RequestMapping也可以加在方法上,意思上不区分Get/Post请求类型,当然也可加上Method=RequestMethod.Get等设置
  4. @RequestParam可以映射参数,另外值得注意的是如果使用Map传递参数,当使用复合参数时,会丢失参数(数据绑定)

转换器 使用

转换器很简单,其实就是一个java方法,这里关注的重点是如何配置转换器

package com.dfbz.converter;import com.dfbz.entity.Student;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;import java.text.ParseException;
import java.text.SimpleDateFormat;/*** @author lscl* @version 1.0* @intro:*/
@Component              // 放入IOC容器
public class StringToStudentConverterimplements Converter<String, Student> {           // String: 什么参数需要转换   Student: 转换为什么类型SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** 前端只要传递了String类型的表单** @param str* @return*/@Overridepublic Student convert(String str) {// id:name:age:birthday--->1:zhangsan:20:birthdaytry {String[] studentInfo = str.split(":");Student student = new Student();student.setId(Integer.parseInt(studentInfo[0]));student.setName(studentInfo[1]);student.setAge(Integer.parseInt(studentInfo[2]));student.setBirthday(sdf.parse(stu`在这里插入代码片`dentInfo[3]));return student;} catch (ParseException e) {e.printStackTrace();}return null;}
}

配置如下:

<?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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="com.dfbz"/><!--静态资源放行--><mvc:default-servlet-handler/><!--在SpringMVC提供的converts中加上我们的--><bean id="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><ref bean="stringToStudentConverter"/></set></property></bean><!-- 指定使用定制的converts--><mvc:annotation-driven conversion-service="conversionService"/>
</beans>

中文乱码处理

中文乱码主要有三种情况,这里分别介绍处理方式

  1. Get乱码:在server.xml增加URIEncoding属性
  2. Post乱码:web.xml配置characterEncodingFilter过滤器
  3. Response乱码:Spring配置StringHttpMessageConverter转换器

响应产生结果

  1. 方法上加@ResponseBody注解,同时参数使用String ,则数据自动展示在页面不进行跳转
  2. 采用ModelAndView返回,则会利用模板引擎进行数据渲染,使用ModelAndView可以将数据绑定到模板引擎上,而默认模板引擎是JSP;

值得注意的是:
ModelAndView参数放在当前请求中,所以页面跳转使用的是请求转发,或者使用重定向则会丢失数据
使用示例为:

 	ModelAndView mav = new ModelAndView ("/show.jsp");mav.setObject("key",value);

或者是

 	ModelAndView mav = new ModelAndView ();mav.setViewName("/show.jsp");mav.setObject("key",value);

另外我们可以通过String +ModelMap 实现ModelAndView

SpringMVC整合FreeMarker

步骤:

  1. 引入FreeMarker依赖(POM.xml)
  2. application.xml中引入FreeMarker(ViewResolver)
  3. 配置FreeMarker参数(模板路径,设置选项等)

Rest :表现层状态转换(WEB下以URL传递)

对应的开发风格是Restful , 使用URL作为用户交互入口
url命名要求: 语义明确,名词,不超过两级,区分单复数

几个重要点:

  1. 当使用@RestController后不再需要@ResponseBody注解
  2. 路径变量:@PostMapping(“/test/{name}”),则使用@PathVariable接

简单请求与非简单请求

简单请求:标准结构HTTP请求:Get/Post
非简单请求:非标准:PUT/DELETE 或者其他拓展

两者最大区别在于 非简单请求在请求前需要发送预检请求
如果使用非简单请求,则需要配置formContextFilter

Json序列化

返回类型为Object时,使用FastJson将数据转换为String
但是针对于时间处理时不太理想,此时需要使用@JsonFormat处理时间类型

跨域问题

什么是跨域

受浏览器同源策略保护机制,当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。称之为 CORS,(URL头包含Access-control-* 时表明请求支持跨域)
如何解决跨域问题:

  1. @CrosOrigin注解 ——Controller跨域注解(局部的)
@CrossOrigin(origins="http://localhost:8080")@GetMapping("/persons")public List<Person> findPersons() {}
  1. 配置 < mvc:cors > ——SpringMVC全局跨域配置
 <mvc:cors><mvc:mapping path="/restful/**" allowed-origins="http://localhost:8080" max-age="3600"/></mvc:cors>

拦截器

开发流程:

  1. maven 依赖加入Servlet-api
  2. 实现HandleInterceptor接口
  3. ApplicationContext配置拦截地址
    注意
    HandleInterceptor接口 含有三个方法:分别是处理前,处理完成未响应,产生响应文本之后

示例配置:

 <mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/**.ico"/><mvc:exclude-mapping path="/**.jpg"/><mvc:exclude-mapping path="/**.gif"/><mvc:exclude-mapping path="/**.css"/><mvc:exclude-mapping path="/**.js"/><bean class="com.imooc.restful.interceptor.MyInterceptor1"/><!-- 排除资源--></mvc:interceptor></mvc:interceptors><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/**.ico"/><mvc:exclude-mapping path="/**.jpg"/><mvc:exclude-mapping path="/**.gif"/><mvc:exclude-mapping path="/**.css"/><mvc:exclude-mapping path="/**.js"/><bean class="com.imooc.restful.interceptor.AccessHistoryInterceptor"/></mvc:interceptor></mvc:interceptors>

此处配置了两个拦截器,多个执行器如何执行
例如先配置了 A,再配置了B拦截器
请求-> A-Pre -> Bpre ->Bph -> Aph ->AfterB ->AfterA

Spring MVC 一个请求的完整过程

在这里插入图片描述

Spring Task定时任务——>底层使用Cron表达式
使用也很简单:① 加注解 @Scheduled ② 加配置 < task:annotation-driven >

相关文章:

SpringMVC

SpringMVC配置 引入Maven依赖 &#xff08;springmvc&#xff09;web.xml配置DispatcherServlet配置 applicationContext 的 MVC 标记开发Controller控制器 几点注意事项&#xff1a; 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建Spring…...

C++模板基础(二)

函数模板&#xff08;二&#xff09; ● 模板实参的类型推导 – 如果函数模板在实例化时没有显式指定模板实参&#xff0c;那么系统会尝试进行推导 template<typename T> void fun(T input, T input2) {std::cout << input << \t << input2 << …...

什么是linux内核态、用户态?

目录标题为什么需要区分内核空间与用户空间内核态与用户态如何从用户空间进入内核空间整体结构为什么需要区分内核空间与用户空间 在 CPU 的所有指令中&#xff0c;有些指令是非常危险的&#xff0c;如果错用&#xff0c;将导致系统崩溃&#xff0c;比如清内存、设置时钟等。如…...

day8—选择题

文章目录1.Test.main() 函数执行后的输出是&#xff08;D&#xff09;2. JUnit主要用来完成什么&#xff08;D&#xff09;3.下列选项中关于Java中super关键字的说法正确的是&#xff08;A&#xff09;1.Test.main() 函数执行后的输出是&#xff08;D&#xff09; public clas…...

ngx错误日志error_log配置

ngx之error_log 日志配置格式&#xff1a; 常见的错误日志级别 错误日志可配置位置 关闭error_log配置 设置debug 日志级别的前提&#xff1a; ngx之error_log 日志配置格式&#xff1a; error_log 存放路径 日志级别 例&#xff1a; error_log /usr/local/log…...

1.11、自动化

自动化 一、java 手机自动化 首先new DesertCapabilities&#xff08;这是一个类&#xff09; setCapability – 设置信息 获取appium的驱动对象 new AppiumDriver – 本机IP地址:端口号/wd/hub,前面的设置值信息 driver.findElementById() – 通过id找位置 click() – 点击 &…...

函数的定义与使用及七段数码管绘制

函数的定义 函数是一段代码的表示 函数是一段具有特定功能的、可重用的语句组 函数是一种功能的抽象&#xff0c;一般函数表达特定功能 两个作用&#xff1a;降低编程难度 和 代码复用 求一个阶乘 fact就是 函数名 n就是参数 return就是输出部分即返回值 而函数的调用就是…...

怎么压缩pdf文件大小?pdf文件太大如何压缩?

喜爱看小说的小伙伴们都会在网上下载很多的pdf格式电子书以方便随时阅览&#xff0c;但是pdf的电子书一般都过于的冗长&#xff0c;下载后的储存也是一个问题&#xff0c;怎么pdf压缩大小呢&#xff1f;可以试试今天介绍的这款pdf在线压缩工具来进行pdf压缩&#xff08;https:/…...

阿里云Linux服务器登录名ecs-user和root选择问题

阿里云服务器Linux系统登录名可以选择root或ecs-user&#xff0c;root具有操作系统的最高权限&#xff0c;但是root会导致的安全风险比较大&#xff0c;ecs-user比较安全&#xff0c;但是如果系统后续依赖root权限就会比较麻烦&#xff0c;从安全的角度&#xff0c;建议选择ecs…...

【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦

目录 一、前言二、SAE配置1、创建配置项2、配置SAE Nginx服务效果1、【云原生】 初体验阿里云Serverless应用引擎SAE(一),部署Nginx服务 2、【云原生】 初体验阿里云Serverless应用引擎SAE(二),前端Nginx静态文件持久化到对象存储OSS 本篇 3、【云原生】 初体验阿里云Se…...

Oracle用户密码过期,修改永不过期

修改密码有效过期时间&#xff0c;可以通过以下四步设置&#xff0c;如果再第一步发现本身的密码过期时间为无限期的&#xff0c;那就请各位小伙伴绕过&#xff0c;如果发现不是无期限的&#xff0c;那么必须设置第四步&#xff0c;才会生效。 目录 第一步&#xff1a;查询密码…...

welearn 视听说1-4

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…...

【git】将本地项目同步到远程

前提&#xff1a;git已经安装&#xff0c;并与账号完成密钥绑定 在github上创建一个新仓库 在项目文件夹下&#xff0c;右击选择git bash here &#xff0c;打开一个终端对话框 git init (在项目目录下出现隐藏的.git文件夹&#xff0c;目的是把该项目文件夹变成git可管理…...

10-链表练习-LeetCode82删除排序链表中的重复元素II

题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 示例 2&#xff1a; 输入&#xff1a;head …...

贯穿设计模式第五话--接口隔离原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…...

C语言计算机二级/C语言期末考试 刷题(四)

在空闲时间整理了一些C语言计算机二级和C语言期末考试题库 整理不易&#xff0c;大家点赞收藏支持一下 祝大家计算机二级和期末考试都高分过 系列文章&#xff1a; C语言计算机二级/C语言期末考试 刷题&#xff08;一&#xff09; C语言计算机二级/C语言期末考试 刷题&#x…...

JDK8中Stream接口的常用方法

参考答案 Stream 接口中的方法分为中间操作和终端操作&#xff0c;具体如下。 中间操作&#xff1a; filter&#xff1a;过滤元素map&#xff1a;映射&#xff0c;将元素转换成其他形式或提取信息flatMap&#xff1a;扁平化流映射limit&#xff1a;截断流&#xff0c;使其元…...

ThingsBoard源码解析-数据订阅与规则链数据处理

前言 结合本篇对规则链的执行过程进行探讨 根据之前对MQTT源码的学习&#xff0c;我们由消息的处理入手 //org.thingsboard.server.transport.mqtt.MqttTransportHandlervoid processRegularSessionMsg(ChannelHandlerContext ctx, MqttMessage msg) {switch (msg.fixedHeade…...

探究Transformer模型中不同的池化技术

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎

1.前言 在9.0的系统rom定制化开发中,在产品开发中,一些内置的app需要用到tts语音播报功能,所以需要用到讯飞语音引擎作为默认的系统tts语音引擎功能,所以就需要 了解系统关于tts语音引擎默认的设置方法,然后在设置讯飞语音引擎为默认的tts语音引擎来实现tts语音播报功能的…...

2026 年 TanStack npm 供应链遭入侵:42 个包 84 版本受影响,多方面待解决问题待明确

总结2026 年 5 月 11 日 19:20 至 19:26 UTC 期间&#xff0c;攻击者通过结合“Pwn Request”模式的 pull_request_target、跨越分叉↔主库信任边界的 GitHub Actions 缓存投毒&#xff0c;以及从 GitHub Actions 运行器进程中提取 OIDC 令牌&#xff0c;在 42 个 tanstack/* n…...

工业缺陷检测实战:用‘非均衡’数据增强搞定样本不足与类别不平衡难题

工业缺陷检测实战&#xff1a;破解样本不足与类别失衡的数据增强策略 在半导体、汽车零部件等精密制造领域&#xff0c;一个肉眼难辨的微小缺陷可能导致整批产品报废。传统人工质检不仅效率低下&#xff0c;且漏检率常高达15%-30%。当我们尝试用深度学习构建缺陷检测系统时&…...

Spring Boot项目接入Claude的3种生产级方案,含安全沙箱、审计日志与LLM调用熔断机制

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Spring Boot项目接入Claude的3种生产级方案&#xff0c;含安全沙箱、审计日志与LLM调用熔断机制 在高可用AI服务场景中&#xff0c;将Claude大模型能力安全、可控、可观测地集成进Spring Boot应用&…...

不止于Java:在Termux的Ubuntu子系统里,我这样配置Python/Node.js多语言开发环境

不止于Java&#xff1a;在Termux的Ubuntu子系统里配置Python/Node.js多语言开发环境 将手机变成便携式开发工作站早已不是天方夜谭。通过Termux和proot-distro搭建的Ubuntu子系统&#xff0c;开发者可以在Android设备上构建完整的Linux开发环境。与局限于单一语言的解决方案不同…...

工程师的调试礼仪:如何避免一次问候毁掉两小时工作成果

1. 项目概述&#xff1a;一次关于“Bug礼仪”的职场博弈在硬件开发的深水区&#xff0c;尤其是在产品临近交付的冲刺阶段&#xff0c;工程师与管理者之间的互动&#xff0c;往往比电路板上的信号完整性更考验“设计”。这不是一个关于具体芯片型号或调试命令的技术教程&#xf…...

告别硬件依赖:用Virtual ZPL Printer构建完整的标签打印测试环境

告别硬件依赖&#xff1a;用Virtual ZPL Printer构建完整的标签打印测试环境 【免费下载链接】Virtual-ZPL-Printer An ethernet based virtual Zebra Label Printer that can be used to test applications that produce bar code labels. 项目地址: https://gitcode.com/gh…...

2026盘古石取证初赛(APK取证)

APK取证1.分析方俊朗phone.E01检材&#xff0c;筛选优质客户应用将用户查询记录存储在一个加密的本地数据库中。请问该加密数据库的文件名是什么&#xff1f;[答案格式&#xff1a;12_abc.db]题目说了这边是筛选优质客户&#xff0c;其实和手机取证最后一题一样的&#xff0c;先…...

京东自动评价工具:3分钟解决购物评价难题的智能助手

京东自动评价工具&#xff1a;3分钟解决购物评价难题的智能助手 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为购物后的评价烦恼吗&#xff1f;每次收到京东的"待评价"提醒&…...

如何将Claude Code的配置无缝迁移至Taotoken平台以解决封号困扰

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何将Claude Code的配置无缝迁移至Taotoken平台以解决封号困扰 Claude Code 作为一款高效的编程助手&#xff0c;其核心能力依赖于…...

告别SVN提交冲突!手把手教你配置TortoiseSVN 1.10.5的忽略列表与清理功能

告别SVN提交冲突&#xff01;手把手教你配置TortoiseSVN 1.10.5的忽略列表与清理功能 团队协作开发中&#xff0c;版本控制系统是必不可少的工具。Subversion&#xff08;SVN&#xff09;作为一款经典的集中式版本控制系统&#xff0c;至今仍在许多项目中发挥着重要作用。然而&…...