SpringMVC
SpringMVC配置
- 引入Maven依赖 (springmvc)
- web.xml配置DispatcherServlet
- 配置 applicationContext 的 MVC 标记
- 开发Controller控制器
几点注意事项:
- 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建SpringIOC容器并初始化DispatcherServlet
- 增加ContextConfigLocation地址
- @RequestMapping也可以加在方法上,意思上不区分Get/Post请求类型,当然也可加上Method=RequestMethod.Get等设置
- @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>
中文乱码处理
中文乱码主要有三种情况,这里分别介绍处理方式
- Get乱码:在server.xml增加URIEncoding属性
- Post乱码:web.xml配置characterEncodingFilter过滤器
- Response乱码:Spring配置StringHttpMessageConverter转换器
响应产生结果
- 方法上加@ResponseBody注解,同时参数使用String ,则数据自动展示在页面不进行跳转
- 采用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
步骤:
- 引入FreeMarker依赖(POM.xml)
- application.xml中引入FreeMarker(ViewResolver)
- 配置FreeMarker参数(模板路径,设置选项等)
Rest :表现层状态转换(WEB下以URL传递)
对应的开发风格是Restful , 使用URL作为用户交互入口
url命名要求: 语义明确,名词,不超过两级,区分单复数
几个重要点:
- 当使用@RestController后不再需要@ResponseBody注解
- 路径变量:@PostMapping(“/test/{name}”),则使用@PathVariable接
简单请求与非简单请求
简单请求:标准结构HTTP请求:Get/Post
非简单请求:非标准:PUT/DELETE 或者其他拓展
两者最大区别在于 非简单请求在请求前需要发送预检请求
如果使用非简单请求,则需要配置formContextFilter
Json序列化
返回类型为Object时,使用FastJson将数据转换为String
但是针对于时间处理时不太理想,此时需要使用@JsonFormat处理时间类型
跨域问题
什么是跨域
受浏览器同源策略保护机制,当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。称之为 CORS,(URL头包含Access-control-* 时表明请求支持跨域)
如何解决跨域问题:
- @CrosOrigin注解 ——Controller跨域注解(局部的)
@CrossOrigin(origins="http://localhost:8080")@GetMapping("/persons")public List<Person> findPersons() {}
- 配置 < mvc:cors > ——SpringMVC全局跨域配置
<mvc:cors><mvc:mapping path="/restful/**" allowed-origins="http://localhost:8080" max-age="3600"/></mvc:cors>
拦截器
开发流程:
- maven 依赖加入Servlet-api
- 实现HandleInterceptor接口
- 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依赖 (springmvc)web.xml配置DispatcherServlet配置 applicationContext 的 MVC 标记开发Controller控制器 几点注意事项: 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建Spring…...

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

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

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

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

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

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

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

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

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

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

welearn 视听说1-4
词汇题(55道) 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词,主句谓语动词think over后面缺宾语,后面的宾语从句谓语动…...

【git】将本地项目同步到远程
前提:git已经安装,并与账号完成密钥绑定 在github上创建一个新仓库 在项目文件夹下,右击选择git bash here ,打开一个终端对话框 git init (在项目目录下出现隐藏的.git文件夹,目的是把该项目文件夹变成git可管理…...

10-链表练习-LeetCode82删除排序链表中的重复元素II
题目 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2: 输入:head …...

贯穿设计模式第五话--接口隔离原则
🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳 从今天开始,将…...

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

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

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

探究Transformer模型中不同的池化技术
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

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

直流无刷电机驱动的PWM频率
以下来源:Understanding the effect of PWM when controlling a brushless dc motorhttps://www.controleng.com/articles/understanding-the-effect-of-pwm-when-controlling-a-brushless-dc-motor/ Brushless dc motors have an electrical time constant τ of a…...

机房动环监控4大价值,轻松解决学校解决问题
不管是政府机构、学校、企业还是医院均有配备机房。机房一般配备服务器、计算机、存储设备、机柜组、UPS、精密空调等关键设备。 传统的机房在事故发生时,无法及时发现并处理,影响范围大,造成严重的损失。因此,一套智慧机房动环监…...

用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Burpsuite详细教程
Burpsuite是一种功能强大的Web应用程序安全测试工具。它提供了许多有用的功能和工具,可以帮助用户分析和评估Web应用程序的安全性。在本教程中,我们将介绍如何安装、配置和使用Burpsuite,并提供一些常用的命令。 第一步:安装Burp…...

目标检测:FP(误检)和FN(漏检)统计
1. 介绍 目标检测,检测结果分为三类:TP(正确检测),FP(误检),FN(漏检), 尤其是针对复杂场景或者小目标检测场景中,会存在一些FP(误检),FN(漏检)。 如何对检测的效果进行可视化,以帮助我们改进模型,提高模型recall值。 步骤 (1): 数据需要准备为yolo格式(2) 训练数据获得…...
【MySQL专题】04、性能优化之读写分离(MyCat)
1、MyCat概述 从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native&…...

信息系统项目管理师第四版知识摘编:第5章 信息系统工程
第5章 信息系统工程信息系统工程是用系统工程的原理、方法来指导信息系统建设与管理的一门工程技术学科,它是信息科学、管理科学、系统科学、计算机科学与通信技术相结合的综合性、交叉性、具有独特风格的应用学科。5.1软件工程软件工程是指应用计算机科学、数学及管…...

【2023春招】西山居游戏研发岗笔试AK
120min,一共三道算法、两道填空、10道不定项选择 算法题部分 T1-二叉树后序遍历 题面 一个节点数据为整数的二叉搜索树,它的遍历结果可以在内存中用一个整数数组来表示。比如,以下二叉树,它每个节点的左子节点都比自己小,右子节点都比自己大,对它进行后序遍历,结果可以…...

什么是分布式,分布式和集群的区别又是什么?
1. 什么是分布式 ? 分布式系统一定是由多个节点组成的系统。 其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。 这些连通的节点上部署了我们的节点,并且相互的操作会有协同。 分布式系统对于用户而言&a…...

Cellchat和Cellphonedb细胞互作一些问题的解决(error和可视化)
今日的内容主要解决两个问题,一个是cellchat的代码报错问题,因为已经有很多人提出这个问题了。第二个是Cellphonedb结果的可视化,这里提供一种免费的很实用的快捷可视化方法。其实这些问题只要自己思考都是能明白的。 Cellchat和cellphonedb细…...