Servlet向JSP传值有两种方式:(1)通过session传值(2)通过RequestDispatcher重新分配资源

(服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect(),二是使用RequestDispatcher的forward()方法)

1.通过session传值


   


 HttpRequest对象有两种形式的getSession方法调用:


     一个是getSession(),


     另一个是getSession(boolean isNew)


     前者会检测当前是否有session存在,如果不存在则创建一个,如果存在就返回当前的。


     getSession()相当于getSession(true),


     参数为true时,若存在会话则返回该会话,否则新建一个会话。


     参数为false时,若存在会话则返回该会话,否则应该返回一个NULL


JSP代码片段


使用 EL 表达式


<span id="span">${value}</span>


EL 表达式 EL (Expression Language)。主要作用:获取数据、执行运算、获取 Web 开发常用对象。

或者直接通过 表达式获取后台Servlet传的值


<%=session.getAttribute("value")%>


SERVLET代码片段(doPost方法):

request.getSession().setAttribute("value","Hello World!!");//获取session 添加变量value
 response.sendRedirect("index.jsp");//通过response重定向



2.通过RequestDispatcher


将 当前的request和response重定向到该RequestDispacher指定的资源。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另 外一个Servlet。RequestDispacher有两个方法include()方法与forward()方法,两个方法很类似.

利用include()方法将HTTP请求转送给其他Servlet 后,被调用的Servlet如果产生任何 HTTP回应,将会并入原来的HttpResponse对象,继续执行原来 Servlet的操作。


  • <1>在HTTP回应被“确认”(即已经成功返回给客户端信息)以前才能调用forward()方法,否则将拋出IllegalStateException异常。
  • <2>调用forward()方法后,原先存放在HttpResponse对象中的内容会自动被清除.


<span id="span"><%=request.getAttribute("value")%></span>

Servlet代码片段(doPost方法):


protected void doPost(HttpServletRequest request,HttpServletResponse response) throws                                                                                            javax.servlet.ServletException, IOException{
    request.setAttribute("value", "Hello World!!I am smith Sun");
    //这句代码就是说将当前servlet的数据转发到目的地(index.jsp)里
    RequestDispatcher requestDispatcher = request.getRequestDispatcher("index.jsp");
    //它是服务器端转发,一般还要把request和response传过去
    requestDispatcher.forward(request, response);
}

-------------------------------------------------------------------------------------------------------------------------------------


关于JSP与EL表达式的详细介绍,可以点击下面的链接



JSP与EL表达式