在我们学习SSM框架时,总会遇到一些知道怎么做却不知道为什么这么做的知识点,今天我就来总结一下~~~~~
1:如何进行转发,重定向,以及这两者该如何选择?
(1)转发:forward 一般发生于查询过后,将查询结果进行转发
return "forward:/jump/test1";//跳转至jump/test1.jsp去
(2) 重定向:redirect 一般发生于增删改之后,为防止重复提交
return "redirect:/index.jsp";//重定向至index.jsp中
2.Model中的数据,EL表达式如何获取
Model是SpringMVC中封装的一个对象,其本质和request基本一致,所存作用域也相同,所以在EL表达式中可以直接在requestScope中取值
${requestScope.xxx}
3.SpringMVC为什么会有静态资源问题
在SpringMVC中,我们采用了核心对象DisptcherServlet(前端控制器)而它的url-pattern为“ / ”,和Tomcat内置的处理静态资源的DefaultServlet的url-pattern的一样,二者互相冲突,根据最近原则,tomcat的默认配置被抵消,所以静态资源我们就没办法在访问到了
解决方案1:
DispathcerServlet采用其他的url-pattern
此时,所有访问handler的路径都要以 action结尾!!
<servlet>
<servlet-name>mvc9</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc9</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
当然,这里我们也不选择action,像do啊,ac啊,这里可以随便取,但我们要给每一个handler加上该后缀(也太麻烦了,反正我是不用)
4.如何将我们返回的对象响应成JSON
放我们想要将我们返回的对象转换为JSON时,我们可以给每一个handler都加上一个@RespnseBody注解,这样在编译的时候就可以自动帮我们转化成JSON了,当然,我们也可以直接在类前面加上一个@RestController这样,每个handler返回的对象就可以都转换为JSON了,String除外
5.如何接受json参数
至于如何接受JSON参数,首先我们要在前端设置传送来的数据是一个JSON(设置ContentType为Application/json),其次,我们需要前端传过来的请求的类型是"post"这样,我们就可以使用@RequestBody注解,将前端传过来的JSON串直接解析为我们的java对象,大大方便我们的编程
6.SpringMVC工厂和Spring工厂关系
Spring工厂和SpringMVC都是一个Bean工厂,而Spring工厂属于父工厂
而SpringMVC工厂属于子工厂,被Spring工厂包含在内
7.Rest两个核心原则
1 每个资源都有唯一的标识
2 每个请求都有明确的对应的动词
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
8.Get、Post、Put、Delete分别对应那种操作
get 对应 查找
post 对应 增加
put 对应 修改
delete 对应 删除
9.域的标识是什么?
1: 使用的协议
2:IP地址
3:端口号
10:ajax跨域请求有什么风险?
为什么AJAX访问不能跨域呢?要讲清楚这个问题,首先要谈谈Cookie
1.客户向A网站的服务器发送登录请求,并携带账号密码数据
2.A网站的服务器校验账号密码正确后,返回响应并给本地添加了Cookie
3.之后客户再次向A网站发起请求会自动带上A网站存储在本地的cookie
4.A网站的服务器从cookie中获取账号密码数据后,返回登陆成功界面。解决方案:响应头中添加:
Access-Control-Allow-Origin: http://localhost:8080
即可
被访问方,添加此响应头;响应头中设置访问方的域
或在被访问方的Controller类或方法上,添加注解:
@CrossOrigin("http://localhost:8080")
public class SysUserController {
....
}
3. 跨域携带cookie
A 不仅要能访问 B,还能在请求中携带B的cookie,进而保证B中运行时有cookie可用
被访问方:B
指定好允许的域
@CrossOrigin(value = "http://localhost:8080")
public class SysUserController {
....
}
访问方:A
withCredentials: true
$.ajaxSetup({
xhrFields: {
withCredentials: true
}
});
$.getJSON("http://localhost:8989/web/sys/user/info...);
$.get(...)
$.post(...)
$.ajax(...)
或者
$.ajax({
type: "POST",
url: "http://localhost:8989/web/sys/login",
...,
xhrFields: {
withCredentials: true
}
});
或者
var xhr = new XMLHttpRequest();
// 跨域携带cookie
xhr.withCredentials=true;