首页 > 编程 > JSP > 正文

jsp跳转 和 serlvet跳转

2019-11-14 10:36:45
字体:
来源:转载
供稿:网友

都有客户端跳转,服务器端跳转 客户端跳转之后,request属范围不可以在使用,url发生变换 服务器端跳转,request属性范围的变量还可以使用,url不变 首先看jsp 1.客户端跳转用response.sendRedirect(“index.html”); 2.服务器端跳转用

<jsp:forward> <jsp:param name="xx" value="xx"/></jsp:forward>

再来看servlet跳转 resp和req是doGet的接受参数 1.客户端跳转也是用resp.sendRedirect(“index.html”); 2.服务器端跳转

RequestDispatcher rd = req.getRequestDispatcher("index.html");rd.forward(req,resp);

客户端跳转使用的都是response对象的sendRedirect方法 服务端跳转使用的是request对象的getRequestDispatcher的forward方法

如何记忆呢?forward是服务器内部转发 服务器端跳转是由客户端发送一个请求,请求一个服务器资源——如JSP和Servlet——,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器端跳转是客户端发送一次请求,服务器端给出一次响应,比如说我访问1.jsp,在这个1.jsp里面用jsp:forward跳转2.jsp了,这就是访问资源1.jsp,1.jsp又将请求转到2.jsp,最后是2.jsp给用户响应,所以是一次请求,一次响应,要注意的是从始至终,用户是无法获得1.jsp页面的响应的,也就是说对用户来说1.jsp是不存在的,他直接就被内部转发到了2.jsp,但是url还是1.jsp

客户端跳转:服务器会通过response返回响应(参数、状态等)给客户端,然后客户端再根据这些信息跳转到相应的uil中,使用地址重写传递参数response.sendRedirect(“URL?参数名=参数值”),比如用户请求登录页面login.jsp,这时候用户当然可以访问到登录页面,所以login.jsp给了用户的第一次响应,用户输入自己的登录信息之后,跳转到登录页面,登录页面又给用户一次响应,所以是2次响应。 还有一次非常让人困扰的情况,就是1.jsp里面,不需要用户提交参数,直接写上<%=response.sedRedirect(“index.html”)%> 那么就从1.jsp直接跳转到index.html里面了,这样看来,好像和前面的一样啊,一次请求,一次响应,但是实际上,还是有2次响应的,一次是1.jsp的响应,一次是index.html的响应,只是由于这个页面太简单,执行的太快,你感觉不到1.jsp给你的响应,你要知道1.jsp的响应就是那个response对象,把代码改一改,改成response.sendRedirect(“index.html?a=1”),这样我们就设置了1.jsp的响应,而这响应就会传给index.html

客户端跳转,从loging.jsp到index.html,有2个request,2个response 而服务器端跳转,从1.jsp到2.jsp都只有一个request对象,一个response对象

总结: 1.forward跳转: a.服务器端跳转,地址栏不改变; b.执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源,尤其是数据库连接资源); c.request设置的属性在跳转后的页面仍可以使用; d.使用传递参数。

2.response跳转: a.客户端跳转,地址栏改变; b.所有代码执行完毕后跳转; c.跳转后的页面不能使用上一个页面的request属性; d.使用地址重写传递参数(response.sendRedirect(“URL?参数名=参数值”))。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表