gpt4 book ai didi

java - 使用 request.setAttribute 和 get 时获取 null 值

转载 作者:行者123 更新时间:2023-11-30 05:06:11 25 4
gpt4 key购买 nike

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

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

问候,

阿卡纳。

最佳答案

你说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") %>
}

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

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 标签,例如<c:out ...\>当 JSP“运行”时进行评估。
  • 收到 HTTP 响应后,JSP 生成的任何内容(HTML 内容、嵌入式 Javascript)都会在用户的浏览器中显示/执行。
<小时/>

Now is it neccessary to use the request.dispatcher....forward command in admin.java.

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

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

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

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

关于java - 使用 request.setAttribute 和 get 时获取 null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5012448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com