浅谈servlet中重定向与请求分派

来源:互联网 发布:kmeans聚类算法python 编辑:程序博客网 时间:2024/06/10 03:49

重定向

工作流程

客户端向服务端发送一个请求,servlet决定一个请求应当重定向到一个完全不同的URL,servlet向浏览器发送一个响应,响应有一个状态码”301“,还有一个"Location"首部,这个首部是一个URL。“301”状态码告诉浏览器需要重定向,此时浏览器使用前一个响应中"Location"首部的值(实际上是一个URL)建立一个新的请求。这是可以看到浏览器地址栏上的URL改变。

重定向在servlet实现方法:response.sendRedirect( )

sendRedirect()可使用相对URL或者绝对URL
假设客户原来键入的是http://www.servlet.com/myApp/cool/test.do
sendRedirect("foo/test.do")
现在指向:http://www.servlet.com/myApp/foo/test.do(相对于myApp)
sendRedirect("/foo/test.do")  如果以一个斜线开头的相对于Web应用本身建立完整URL
现在指向:现在指向:http://www.servlet.com/foo/test.do
注意:
sendRedirect取一个String,而不是URL对象!
不能子啊响应已经提交之后才调用sendRedirect,换句话说,如果已经向流中写了东西,再想重定向就太晚了。

分派转发:
分派转发工作流程:

客户端向服务端发送一个请求,servlet决定这个请求应该交给Web应用的另一个部分处理,浏览器以正常方式得到响应,把他显示给用户。由于浏览器地址栏没有变化,所以用户不知道是另一部分生成的响应。

在servlet中是通过RequestDispatcher实现的。

RequestDispatcher,它只有两个方法forward()和include()这两个方法都取请求和响应对象为参数。forward()是常用的,include一般在JSP页面中调用。
RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forward(request,response);

区别:
重定向让客户来完成工作,而请求分派要求服务器上的某某来完成任务。
请求分派地址栏上的URL没有任何改变,重定向地址栏上URL会发生改变。


0 0
原创粉丝点击