使用request.setAttribute时获取空值并获取

我需要将一个变量从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中获得其余的价值。

我在这里犯了什么错误?请帮忙。

问候,

ana

回答:

您说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编译器评估。
  • 当“运行” JSP时,会评估脚本集标记(例如<% ... %>EL表达式)${...}或JSTL标记(例如<c:out ...\>)内的内容。
  • 收到HTTP响应后,由JSP生成的任何内容(HTML内容,嵌入式Javascript)都会在用户浏览器中显示/执行。


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

您的主Servlet可以执行以下两项操作之一。

  • 它可以使用请求分派器将请求转发到您的JSP。如果这样做,则可以通过设置请求属性来转发其他值。

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

不应该 尝试同时做!(我不确定会发生什么,但是很可能会导致500内部错误。)

以上是 使用request.setAttribute时获取空值并获取 的全部内容, 来源链接: utcz.com/qa/429544.html

回到顶部