浅谈ssm框架中的请求转发和重定向
ssm究竟是什么
ssm框架由spring、springmvc、mybatis构成,spring的作用就是减少各层之间的耦合度,将对象交给ioc容器进行管理。。springmvc则是将各层的作用清晰的凸显出来,controller就是负责视图渲染,service层则是进行逻辑处理。mybatis则是让对数据库的操作变得更加清晰,并且我们可以利用动态sql语句来实现各种灵活的功能。
controller到底该怎么去写
在这次考核的时候,页面到底由谁跳转的问题我纠结了好久,最后还是因为前端对thymeleaf不太了解,所以页面跳转交给了前端,考核前我也问了学长,有些页面无需跳转但是要获取数据的可以通过响应结果集返回给前端,但是页面跳转要尽量交给后端。考核后我回过头再去看代码发现写的啥都不是,所以controller到底该怎么写?
这是我考核时放在controller中的内容
String upload = "";
//判断验证码是否正确
if (code.equals(map.get(recipe.getAuthor()))) {
//判断文件是否为空
if (!recipe.getFile().isEmpty()) {
//上传cos云
upload = uploadCosService.upload(recipe.getFile());
if (upload.contains("图片格式不正确")) {
return BaseResponse.error("图片格式不正确");
}
}
//将cos云的图片地址写入实体类
recipe.setRecipe_picture(upload);
//修改菜谱数量
Integer integer = recipeService.selectRecipeNumsById(recipe.getAuthor());
recipeService.updateRecipeNums(integer + 1, recipe.getAuthor());
//将日期写入实体类
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
recipe.setTime(formatter.format(date));
//将菜谱写入数据库
int i = recipeService.insertRecipe(recipe);
//判断是否上传成功
if (i > 0) {
//返回菜谱id,用于上传材料与步骤
int i1 = recipeService.selectRecipeId(upload);
return BaseResponse.success("上传成功!", i1);
} else {
return BaseResponse.error("上传失败!");
}
} else {
return BaseResponse.error("验证码错误");
}
要注意controller的任务是决定要显示哪一个View,定义和调用Model。
简单说就是接受前端的数据,根据前端的数据查询出相应的信息并通过视图返回给前端,当然也可以直接返回数据。
这是考核后的
if (recipe != null && code != null) {
return recipeService.insertRecipe(recipe, code);
} else {
return BaseResponse.error("数据错误");
}
controller只需要对数据进行简单的判断,之后再将其传入service对其进行校验以及逻辑判断,当然controller不是只用来返回数据的,还有视图。
理解重定向与请求转发
1.什么是重定向呢
注意浏览器的地址栏,重定向是由前台进行跳转,地址栏会改变,并且不会保存上次请求的数据,这是为什么呢,因为重定向进行了两次请求,两次响应,即服务器对浏览器的请求进行响应,响应的结果就是向另一个页面发出访问请求,并进行响应。
2.请求转发
请求转发的地址栏并不会去改变,请求转发是服务器内部进行的跳转,浏览器并不知道服务器内部的转发行为,只是发送了请求并得到了响应,因为重定向只发送了一次请求,所以可以在两个页面之间共享数据,可以用el表达式或者thymeleaf获取。
最后,它俩的区别还有转发只能跳转本站点资源,重定向可以跳转到任意URL
总结
看着自己在不断进步真的很快乐,但是最近有点累也是真的,考核的时候学长提的问题回答不上来的沮丧感是有的,把他们拾起来被宰身上的感觉确是很舒服的,加入未来的感觉真的很不错,继续跟大家一起变优秀吧!