springMvc简单笔记

1基本概念
2入门代码
3请求参数绑定
4常用注解

明确:
DispatcherServlet:术语:前端控制器
SpringMVC:表现层框架也是MVC设计模型的这么一个框架
功能:主要跟浏览器客户端进行数据的交互;

基本概念

MVC设计模型:在web层
M model模型:JavaBean对象:
V View视图: Jsp,html用来展示数据给用户
C Controller:控制器:Servlet把请求接收到
处理器映射器,处理器适配器,视图解析器称为SpringMVC的三大组件

简要分析springMVC和Struts2区别优势
共同点:都是表现层框架,基于MVC模型
顶层离不开ServletAip
处理机制都是一个核心控制器
区别:
MVC的入口是Servlet,而Struts2是Filter
MVC是基于方法设计(单例的),而Struts是基于类的,每次执行都会创建一个动作类(多例的)所以mvc效率更高

入门案列:

1:环境搭建
总体:创建一个项目,包目录补全,导入开发的jar包,配置前端的控制器
最后又写了一个spring的配置文件
使用骨架maven_webapp
添加键值对:archetypeCatalog:internal/解决maven工程创建过慢
jar包在springMVC第一天资料中
2web.xml中配置前端的控制器
作用:加载SpringMVC的配置文件,启动tomcat时候就把控制器实例化

Archetyoe Created Wed Application

dispatcherServlet
org…DispatcherServlet


dispatcherServlet同上保持一致
/"/"表示你发任何的请求都会经过servlet


配置过滤器;解决中文乱码


3:在resource目录下创建一个springmvc的配置文文件
约束
开启注解扫描:实例化对象
视图解析器:实例化spring中视图解析器对象。配置前缀和后缀
开启SpringMVC框架注解支持。

4编写控制器,编写一个类
添加一个@Controller:实例化自己编写的类
编写方法:前端链接对跳转到这个方法,方法上面添加路径@RequestMapping

5.前端jsp
添加一个连接:访问控制器中方法,方法上面的路径

访问jsp,来到控制器。根据访问的路径找到控制器中对应的方法,返回到控制器,控制器找到
视图解析器,视图解析器找到success.jsp

请求参数绑定

@RequestMapping(path=“hellow”)注解:
作用在方法,类上。
属性:
method{}:规定请求方式
parse{}:要求必须传输的参数,
header{}:发送请求中必须包含的请求头

绑定请求参数
请求参数绑定到javaBean中
要求:
javaBean中的属性名称和请求消息的键名一致
直接将javaBean作为方法的参数,就可以实现自动封装;
javaBean中有引用类型;想要封装,在页面input,name属性中,使用引用类型的类名点上类中的成员属性名称
请求参数绑定到List中:name=“list[0].uname”把值存到0位置上
请求参数绑定到Map中:name = “map[‘one’].uname”

自定义转换器
页面提交的数据全部都是字符串,
springMVC内部会自动将String转化成Intger
但是有些特例:
字符串转日期;
定义一个utils实现Converter<要转类型,转换后类型>
实现方法
在spring.xml中配置一个转换工厂,配置工厂属性,把自定义类配置进去
配置转化生效
获取原生ServletAPI(HttpServletRequest request,HttpServletResponse request。。。)
直接在方法参数上加参数就行了

常用注解:
RequestParams:把请求中指定名称的参数给控制器中的形参赋值
作用位置:形参类型前面
属性:
value:请求参数中的名称,
required:请求参数是否必须提供此参数:默认为ture
解决的问题:如果两端的名称不一样就封装不上的问题,

RequestBoy:用户获取请求体内容。直接使用得到key=value&key=value。。结构数据
属性
required:是否必须有请求体:默认true
作用位置:形参类型前面
get请求不适用
场景:异步提交数据时,用的是JONS数据格式

PathVaribale:用于绑定url中的占位符:
/spring/HelloController/pathVatibaleTest/刘怡
@RequestMapping(“pathVatibaleTest/{liuyi}”)
public void pathVatibaleTest(@PathVariable(“liuyi”) String msg) {
System.out.println(msg);刘怡
}
补充:{ }大括号

Requestheader:获取请求消息头;(不常用)

CookieValue:用于把指定cookie名称的值传入控制器方法参数不常用()
作用位置:方法形参上
想要拿到Cookie中的值

ModelAttribute:用于修饰方法和参数
在方法上:会在控制器方法执行之前执行
参数上:获取指定的数据给参数赋值

SessionAttr ibutes(value=“aa”):(将aa存入到Session域中)用于多次执行控制器方法间的参数共享
如果使用api那么耦合度高
作用位置:只能在类上
补充:
一. DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

4、通过ViewResolver解析逻辑视图名到具体视图实现;

5、本地化解析;

6、渲染具体的视图等;

7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析


处理器映射器,处理器适配器,视图解析器称为SpringMVC的三大组件
一、执行流程?

1、客户发起请求(request)到前端控制器
2、前端控制器请求handlermapping来查找对应的handler<控制器>
(通过xml配置和注解的方式
3、处理映射器根据查找的结果向前端控制器返回一个mapper
4、前端控制器去调用处理器去执行handler
5、处理器适配器执行handler
6、Handler执行完给处理器适配器返回一个modelandview
7,处理器适配器向前端控制器返回model and view
8,前端控制器请求视图解析器去进行视图解析
9视图解析器给前端控制器返回一个view
10前端控制器进行视图渲染
11前端控制器向用户响应结果

数据返回类型分类

1String:
两种方式:
1其实也是存在model里 使用el表达式
<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>
2使用原生API关键字:这里不会使用视图解析器,所以要加上后缀,和前缀
请求转发:
return"forward:/WEB-INF/pages/success.jsp"
重定向:不能直接访问WEB-INF下资源
return"redirect:/index.jsp"
2void:自己使用原生的servlet的api
注意:这里没有用到视图解析器;
3ModelAndView:不仅可以放数据,还能实现页面跳转
setViewName()页面跳转:
addObject()存放数据:将对象存放到对象中,也会把对象放到request对象

4ResponseBody响应json数据
1:导入jar包
2:再返回类型前加入注释@ResponseBody

文件上传:
SpringMVC框架文件上传原理分析
request到前端控制器,这里配置了一个文件解析器
,调用文件解析器,解析request请求,
再将解析后的文件upload(文件解析器对象)传入到前端控制器,
调用相关方法,传入upload,

SpringMVC跨服务器方式的文件工程
优势:速度快,正规。
创建客户端的对象
Client.create();
和图片服务器进行连接
WebSource web = client.resource(path+filename);
上传文件
web.put(upload.getBytes());

页面出现一个异常出现友好页面
springmvc异常处理
在前端控制器配上异常处理器组件
1编写自定义异常类
继承Exception
2编写异常处理器的类
实现HandlerExceptionResolver,并实现方法
处理逻辑;
3配置异常处理器

springmvc编写拦截器

1编写拦截器类
实现接口HandlerInterceptor;并重写preHandle。处理逻辑
三种方法:returen true;就是放行;
postHadle:后处理方法,controller方法执行后,success.jsp执行之前。
afterCompletion:最终执行方法。做一些资源的释放。
2配置拦截器
mvc:interceptors
mvc:interceptor
//要拦截的具体方法
<mvc:mapping path="/user/*">
//配置拦截器对象

</mvc:interceptor>
</mvc:interceptors>

使用优化算法,以优化VMD算法的惩罚因子惩罚因子 (α) 和分解层数 (K)。 1、将量子粒子群优化(QPSO)算法与变分模态分解(VMD)算法结合 VMD算法背景: VMD算法是一种自适应信号分解算法,主要用于分解信号为不同频率带宽的模态。 VMD的关键参数包括: 惩罚因子 α:控制带宽的限制。 分解层数 K:决定分解出的模态数。 QPSO算法背景: 量子粒子群优化(QPSO)是一种基于粒子群优化(PSO)的一种改进算法,通过量子行为模型增强全局搜索能力。 QPSO通过粒子的量子行为使其在搜索空间中不受位置限制,从而提高算法的收敛速度与全局优化能力。 任务: 使用QPSO优化VMD中的惩罚因子 α 和分解层数 K,以获得信号分解的最佳效果。 计划: 定义适应度函数:适应度函数根据VMD分解的效果来定义,通常使用重构信号的误差(例如均方误差、交叉熵等)来衡量分解的质量。 初始化QPSO粒子:定义粒子的位置和速度,表示 α 和 K 两个参数。初始化时需要在一个合理的范围内为每个粒子分配初始位置。 执行VMD分解:对每一组 α 和 K 参数,运行VMD算法分解信号。 更新QPSO粒子:使用QPSO算法更新粒子的状态,根据适应度函数调整粒子的搜索方向和位置。 迭代求解:重复QPSO的粒子更新步骤,直到满足终止条件(如适应度函数达到设定阈值,或最大迭代次数)。 输出优化结果:最终,QPSO算法会返回一个优化的 α 和 K,从而使VMD分解效果最佳。 2、将极光粒子(PLO)算法与变分模态分解(VMD)算法结合 PLO的优点与适用性 强大的全局搜索能力:PLO通过模拟极光粒子的运动,能够更高效地探索复杂的多峰优化问题,避免陷入局部最优。 鲁棒性强:PLO在面对高维、多模态问题时有较好的适应性,因此适合海上风电时间序列这种非线性、多噪声的数据。 应用场景:PLO适合用于优化VMD参数(α 和 K),并将其用于风电时间序列的预测任务。 进一步优化的建议 a. 实现更细致的PLO更新策略,优化极光粒子的运动模型。 b. 将PLO优化后的VMD应用于真实的海上风电数据,结合LSTM或XGBoost等模型进行风电功率预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值