2013-09-24 93 views
0

我在瀏覽器中打開鏈接,將其映射到我的servlet,並期望顯示傳遞的值。 但我看到的是「空」將字符串變量從servlet傳遞給jsp

的Servlet:

public class TestServlet extends HttpServlet {  
    public TestServlet() { 
     super();  
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
      request.setAttribute("var", "a"); 
      request.getRequestDispatcher("index.jsp").forward(request, response);  
    } 


} 

的jsp:

<% 
String s1 = (String) session.getAttribute("var");   
%> 
<%= s1 %> 

回答

1

的問題是,您要設置在請求範圍的屬性,但是從閱讀它會話範圍。嘗試更換這行:

request.setAttribute("var", "a"); 

通過這一個:

request.getSession().setAttribute("var", "a"); 

這樣,您將參考會話範圍在這兩個地方。或者,您可以在JSP中使用request.getAttribute()來在兩個地方使用請求範圍。

+0

我會做相反,改變JSP來調用request.getAttribute()。 OP沒有聲明他需要會話範圍,這會阻止將值保存在內存中的時間超過其所需的時間 - 請求而不是用戶的會話。 – Will

+0

兩個解決方案的作品,謝謝 –

+0

@David Levesque不建議使用scripplets,使用jstl代替 – SpringLearner

0

而是通過在JSP頁面中的會話範圍訪問的屬性,你可以簡單地改變你的

String s1 = (String) session.getAttribute("var"); 

String s1 = request.getAttribute("var"); 

,或者如果你仍然想通過會話範圍來訪問它,你可以設置在會話範圍變量在你的servlet例如:

Http session = request.getSession(); 
    session.setAttribute("var","a"); 

,那麼你不需經過ð剛剛訪問你的JSP頁面都在做同樣的方式或者你可以簡單地做大衛說:

request.getSession().setAttribute("var", "a"); 

無論哪種方式會工作。

0

SERVLET部分:

String str = request.getParameter("str1"); 
request.setAttribute("str1", "hello, welcome!! how are you??"); 
getServletContext().getRequestDispatcher("/Demo.jsp").forward(request,response); 

JSP部分(要被包括在任何標籤段落或文本框等)

$ {STR}