使用request.setAttribute和get时获取空值

时间:2011-02-16 04:08:27

标签: java jsp

我需要将一个变量从Admin.java文件传递给index.jsp。我在Admin.java中打印它时得到的值。我需要将该值传递给另一个需要发送到index.jsp的变量。这个新变量获得空值。

Admin.java中的代码是

public string static rest;

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException 
{
    SemanticSearch semsearch = new SemanticSearch(request.getSession());
    semsearch.loadData(REALPATH + RDFDATASOURCEFILE1);

    String res=semsearch.searchForUser(userName, password);
    System.out.println("The value of res been passed is "+res);
    request.setAttribute("rest", res);
    System.out.println("The value of rest is "+rest);
    request.getRequestDispatcher("index.jsp").forward(request, response);

if(res != null)
 {
       request.getSession().setAttribute("access", true);

       System.out.println("Admin:doGet:login:true");
       response.getWriter().write("existsnoadmin");
       return;
}

输出:

The value of res been passed is C Language.
The value of rest is null.

根据堆栈溢出中提出的问题,我们需要在需要将值发送到jsp页面时使用转发或重定向。但在我的情况下,我试图从函数返回值,所以我不知道我在上面的代码中尝试做的方式是否正确。

index.jsp中的代码是:

if(response=="existsnoadmin")
 {
    alert(response);
    alert("The value obtained by the admin.java is " +request.getAttribute("rest"));
    out.println("The value obtained by the admin.java is " +request.getAttribute("rest"));
    alert("we have done in index.jsp");
}

输出结果是我收到了“existsnoadmin”的警告框。

但是我无法在这里或在Admin.java中获得休息的价值。

我在这里做的错误是什么?请帮忙。

此致

阿奇纳。

1 个答案:

答案 0 :(得分:2)

你说JSP中的代码是这样的:

if(response=="existsnoadmin")
{
    alert(response);
    alert("The value obtained by the admin.java is " +request.getAttribute("rest"));
    out.println("The value obtained by the admin.java is " +request.getAttribute("rest"));
    alert("we have done in index.jsp");
}

我在理解这意味着什么时遇到了问题。

如果上面的代码是出现在scriptlet标记<% ... %>中的Java代码,那么我不明白alert(response);如何向您显示任何内容。实际上,它应该在JSP中给你一个编译错误。

另一方面,如果以上是嵌入在JSP生成的页面中的Javascript代码,那么

  • request.getAttribute("rest")无法正常工作...因为您在Web浏览器中不存在您设置属性的请求对象,并且

  • out.println(...)无法正常工作,因为Web浏览器中不存在JspWriter。

要么你没有准确地转录JSP摘录,要么你的Java和/或Javascript没有意义。


根据您的评论,我认为您需要以下内容。

if(response=="existsnoadmin")
{
    alert(response);
    alert('The value obtained by the admin.java is ' +
          '<% request.getAttribute("rest") %>');
    // The value obtained by the admin.java is <% request.getAttribute("rest") %>
}

或者如果你想摆脱潦草的东西......

if(response=="existsnoadmin")
{
    alert(response);
    alert('The value obtained by the admin.java is ' +
          '${requestScope.rest"}');
    // The value obtained by the admin.java is ${requestScope.rest"}
}

如果您希望我在页面上显示我已转换为// JS注释的内容,您可以将其移至HTML的某些内容部分。目前它(我假设)在<script>元素内,因此不会显示。

所有这些黑魔法的关键在于理解JSP的哪些部分由什么来看/评估:

  • JSP指令,例如<@ import ...>由JSP编译器进行评估。
  • 在scriptlet标签内填充,例如<% ... %>,EL表达式,例如${...}或JSTL标记,例如当JSP“运行”时,<c:out ...\>会被评估。
  • 在收到HTTP响应后,在用户的浏览器中显示/执行JSP生成的任何内容(HTML内容,嵌入式Javascript)。

  

现在需要在admin.java中使用request.dispatcher .... forward命令。

您的主servlet可以执行以下两种操作之一。

  • 它可以使用请求调度程序将请求转发到JSP。如果这样做,它可以通过设置请求属性来转发其他值。

  • 它可以打开响应输出流并向其写入内容。

不应该尝试两者兼顾! (我不确定会发生什么,但可能会导致500内部错误。)