我需要将一个变量从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中获得休息的价值。
我在这里做的错误是什么?请帮忙。
此致
阿奇纳。
答案 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的哪些部分由什么来看/评估:
<@ import ...>
由JSP编译器进行评估。<% ... %>
,EL表达式,例如${...}
或JSTL标记,例如当JSP“运行”时,<c:out ...\>
会被评估。现在需要在admin.java中使用request.dispatcher .... forward命令。
您的主servlet可以执行以下两种操作之一。
它可以使用请求调度程序将请求转发到JSP。如果这样做,它可以通过设置请求属性来转发其他值。
它可以打开响应输出流并向其写入内容。
它不应该尝试两者兼顾! (我不确定会发生什么,但可能会导致500内部错误。)