服务器请求转发:
request.getRequestDispatcher(“xxx.jsp”).forward(request,response);
1.客户端和服务器之间进行一次请求,地址栏不会改变,将该请求在服务器内部转发;
2.表单提交的数据可以传递到转发页面,但如果想要继续传递到其它页面,则需要再次执行转发语句;
3.从数据库查询出来的数据非表单提交的数据,只能通过URL重写的方法提交,并使用request.getParameter()方法接收;
客户端重定向:
response.SendRedirect(“xxx.jsp”);
1.客户端和服务器进行两次请求,地址栏会改变
2.两次请求无关,参数无法传递到下一页面,除非使用URL重写的方式附带参数,并用request.getParameter();
3.中文数据会产生乱码,在提交之前需要进行URLEncoder.encode()手动编码,并且在接收时自动转码;
请求转发和重定向的区别
(1)请求次数不同
请求转发过程中只有一次请求,数据不丢失,可以自动传递到下一页面
重定向过程中有两次请求,而且这两次请求之间毫无任何关联,因此数据无法传递到下一页面,除非使用URL重写的方式附加参数,传递中文数据时,还必须手工调用URLEncoder.encode()方法进行url编码
(2)跳转的位置不同
请求转发在服务器内部完成,客户端根本不知道,所以浏览器地址栏内容不变,只能在当前项目范围内跳转
重定向相当于在客户端重新发送了新的请求,所以浏览器地址栏内容改变,跳转的位置不限
(3)根目录"/"的意义不同
请求转发的根目录"/“表示Web项目的根目录下
request.getRequestDispatcher(”/index.jsp").forward(request, response) //跳转到http://localhost/Web项目名/index.jsp
重定向的根目录"/“表示跳转到服务器的根目录下
response.sendRedirect(”/index.jsp") //跳转到http://localhost/index.jsp