1. HTTP状态代码浏览器访问网页时,浏览者的浏览器会向有网页的服务发出请求。 在浏览器接受并显示网页之前,此网页所在的服务将返回包含HTTP状态代码的英语HTTP状态代码。
200 -请求成功
301 -资源(例如,网页)被永久移动到其他URL
404 -请求的资源(例如网页)不存在
500 -内部服务器错误
2. HTTP状态代码分类HTTP状态代码由三个十进制数组成,前十进制数定义状态代码类型,后两个数字不起分类作用。 HTTP状态代码有五种类型:
HTTP状态代码一览表:
3.3.Java中的重定向和转发Java中的连接跳转方式有重定向和转发“重定向”重定向两种
重定向是将request直接传输到其他组件进行处理。 在response.sendRedirect () )之后,response已提交,无法使用response。
response.sendredirect (在" redirect " fiddler中查看网页以获取信息:
3358本地主机:7080/test/testd
GET /test/testd HTTP/1.1
主机: localhost :7080
用户代理: Mozilla/5.0 (windows nt 6.1; WOW64; rv:52.0 ) Gecko/20100101 Firefox/52.0
accept :文本/html,application/xhtml xml,application/xml; q=0.9,//; q=0.8
接受语言: en-us,en; q=0.5
接受编码: gzip,deflate
连接: keep-alive
升级安装请求:1
HTTP/1.1 302
位置: redirect
内容长度: 0
Date: Mon,26 Jun 2017 09:15:23 GMT
浏览器手动设置302后,向redirect发送了请求,浏览器在一个重定向中发送了两次请求。
默认response.sendRedirect返回302,即使设置了status code,它也最后返回302。 (在Tomcat 8.5中测试)
如果想返回301,只能手动设定。
response.set status (http servlet response.sc _ moved _ permanently;
stringnewlocn=request.getservletcontext (.getcontextpath ) ) '/redirect ';
response.setheader(「location”,newLocn );
4.301/302区别什么是1,301转向? 301重定向是什么?
301重定向(或301重定向、301跳转)是服务器在用户或搜索引擎向网站服务器发出浏览请求时返回的HTTP数据流的标头信息)中的一种状态代码
什么是2,302重定向?
302重定向也称为“302”,表示临时迁移。 英文名为302 redirect。 也称为“临时重定向”(temporary redirect ),它指示web浏览器显示请求显示的不同URL,并在一个网页经历短期URL变化时使用。 其中一个临时重定向是服务器端重定向,由搜索引擎蜘蛛正确处理。
301重定向和302重定向之间的区别
302重定向是临时重定向,搜索引擎捕获新内容并保留旧网址。 由于服务器返回了302代码,搜索引擎认为新的网址是临时的。
301重定向是永久重定向,搜索引擎在捕获新内容的同时,用重定向后的站点替换旧站点。
4、为什么302重定向与劫持网站有关
当从站点a创建302并重定向到站点b时,主机服务器的隐含意思是站点a可以随时改变主意,以重新显示其内容或将其移动到其他位置。 大多数搜索引擎在收到302重定向时,通常只需要抓住所需的网址即可。 也就是说,网址b。 搜索引擎遇到302转向时,如果100%捕获目标站点b,就不用担心站点URL劫持。 问题是,搜索引擎,特别是谷歌,不一定总是捕获目标网站。
例如,a站点可能很短,但创建302并重定向到b站点,b站点是一个长而混乱的URL站点,还可能包含问号等参数。 当然,Web站点更用户友好,Web站点难看,不友好。 此时谷歌很可能还在显示网址a。 不,因为搜索引擎排名算法是程序
是人,在遇到302 重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL 劫持的可能性。也就是说,一个不道德的人在他自己的网址A 做一个302 重定向到你的网址B,出于某种原因, Google 搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B 上的内容,这种情况就叫做网址URL 劫持。你辛辛苦苦所写的内容就这样被别人偷走了。 5.异常处理1.异常处理介绍
Spring在web项目中,如果在请求处理时出现异常,那输出会是Servlet响应。这时异常需要以某种方式转换为响应。
Spring将异常转换为响应的方式:
a.特定的Spring异常将自动映射为指定的HTTP状态码;
b.异常上添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码;
c.方法上添加@ExceptionHandler注解,使其处理异常。
2.异常处理代码
1 @RequestMapping(“getPathVariable/{id}”)
2 public String getPathVariable(
3 @PathVariable(“id”) String id){
4 if(“error”.equals(id)){
5 throw new SpittleException();
6 }
7 return “index”;
8 }
1
2
3
4
5
6
7
8
1 package com.taozhiye.controller;
2
3 import org.springframework.http.HttpStatus;
4 import org.springframework.web.bind.annotation.ResponseStatus;
5
6 @ResponseStatus(
7 // 404
8 value = HttpStatus.NOT_FOUND,
9 reason = “Spittle not found”
10 )
11 public class SpittleException extends RuntimeException {
12
13 }
正常情况下,当id为error时,会报错,这时是500错误,我们可以通过@ResponseStatus注解,映射到404状态码上,进行简单的异常处理。
第二种方法是报相应的异常,直接跳转到错误页面。
1 package com.taozhiye.controller;
2
3 import org.springframework.web.bind.annotation.ControllerAdvice;
4 import org.springframework.web.bind.annotation.ExceptionHandler;
5
6
7
8 @ControllerAdvice
9 public class AppExcepitonHandler {
10
11 @ExceptionHandler(Exception.class)
12 public String deal(){
13 System.out.println(“出现异常”);
14 return “index”;
15 }
16 }
3.重定向传值
1 @RequestMapping(“getPathVariable/{id}”)
2 public String getPathVariable(
3 @PathVariable(“id”) String id,
4 Model model,
5 RedirectAttributes model2){
6 if(“error”.equals(id)){
7 throw new SpittleException();
8 }else if(“findAll”.equals(id)){
9 /**
10 * 重定向传参数:
11 * 相当于把参数写到session中,
12 * 如果重定向到controller的时候,用@ModelAttribute接收
13 * 如果重定向到页面,可以直接接收
14 /
15 model2.addFlashAttribute(“flash”, “flash”);
16 /*
17 * 通过url模板进行重定向
18 /
19 return “redirect:/{id}”;
20 }else if(“index”.equals(id)){
21 // model.addAttribute(“id”, id);
22 /*
23 * 转发不可以使用模板
24 /
25 // return “/{id}”;
26 model2.addFlashAttribute(“flash”, “flash”);
27 /*
28 * 通过url模板进行重定向
29 */
30 return “index”;
31 }else{
32 return “ajax1”;
33 }
34 }
@RequestMapping("/findAll")
@ResponseBody
public List findAll(@ModelAttribute(“flash”) String flash){
System.out.println(“flash:”+flash);
return userService.findUserAll();
}
@RequestMapping("/index")
@ResponseBody
public List index(Map<String, Object> map,@ModelAttribute(“flash”)String flash){
System.out.println(“flash:”+flash);
return userService.findUserAll();
}
重定向传参数:
相当于把参数写到session中,
如果重定向到controller的时候,用@ModelAttribute接收
如果重定向到页面,可以直接接收