Servlet程序开发-- servlet跳转

本文详细解析了服务器端和客户端的跳转机制,包括<jsp:forward>和<response.sendRedirect>的区别,以及如何在Servlet中实现这两种跳转方式。重点介绍了在不同场景下选择合适跳转方式的原则。

跳转:服务器端,客户端

客户端跳转:<response.sendRedirect>地址栏跳转之后改变,无法传递request范围的属性

服务器端跳转:<jsp:forward>地址栏不改变,而且可以传递request范围的属性,属于无条件跳转,只要执行到了,立即执行跳转的操作

 

servlet之中也是可以跳转的,既然servlet本身存在HttpServletResonse对象,所以,直接通过此对象的sendRedirect方法就可以完成跳转操作。

客户端跳转实现:

info不能传递

package org.lxh.servletdemo ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class ClientRedirectDemo extends HttpServlet {
    public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        req.getSession().setAttribute("name","李兴华") ;
        req.setAttribute("info","MLDNJAVA") ;
        resp.sendRedirect("get_info.jsp") ;
    }
    public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        this.doGet(req,resp) ;
    }
}

servlet中没有<jsp:forward>指令,所以想执行跳转的话要使用RequestDispatcher完成。

RequestDispatcher是个接口,要想使用接口必须进行对象实例化操作,此时只能一看ServletRequest接口完成

info值可以传递

package org.lxh.servletdemo ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class ServerRedirectDemo extends HttpServlet {
    public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        req.getSession().setAttribute("name","李兴华") ;
        req.setAttribute("info","MLDNJAVA") ;
        RequestDispatcher rd = req.getRequestDispatcher("get_info.jsp") ;    // 准备好了跳转操作
        rd.forward(req,resp) ;    // 完成跳转
    }
    public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
        this.doGet(req,resp) ;
    }
}

web.xml:

<servlet>
        <servlet-name>server</servlet-name>
        <servlet-class>
            org.lxh.servletdemo.ServerRedirectDemo
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>server</servlet-name>
        <url-pattern>/forward/ServerRedirectDemo</url-pattern>
    </servlet-mapping>

 

所以要传递request范围属性的话,就用服务器跳转,如果要保存session以上级别的值的话,就用客户端跳转。

服务器端跳转的应用比率90%以上,所以更重要。

转载于:https://www.cnblogs.com/wujixing/p/4974105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值