如何将变量的值从java类传递到jsp页面
Posted
技术标签:
【中文标题】如何将变量的值从java类传递到jsp页面【英文标题】:How to pass a value of a variable from a java class to the jsp page 【发布时间】:2011-07-19 12:00:11 【问题描述】:我有 2 个文件名为 Admin.java
和 index.jsp
。
在Admin.java
中,我通过一个函数检索名为res
的变量的值。这个变量需要被传递给一个 JSP 页面。
Admin.java
在C:\Users\praveen\workspace\SemanticWeb\src\controller
中,而index.jsp
在C:\Users\praveen\workspace\SemanticWeb\WebContent
中。
Admin.java的代码是:
public Admin()
super();
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
if (action.equals("login"))
String userName="";
String password="";
userName = request.getParameter("username");
password = request.getParameter("password");
response.setCharacterEncoding("UTF-8");
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);
return;
index.jsp的代码是
function login(user, pass)
$.ajax(
type:"GET",
url: "Admin?action=login",
dataType: "text",
data: username: user, password: pass ,
success: function(response)
内
function(response)
......
我需要访问Admin.java
传递的res
的值。我无法在 Internet 上为我的代码获得任何适当的帮助。请有人帮我解决这个问题。
【问题讨论】:
放一个断点;检查你的管理代码是否真的被执行了。 是的,管理代码正在执行,并且 res 的值正在那里填充。我已经检查过了,但我无法将它传递给所需的 jsp 页面。 【参考方案1】:根据您的代码,
request.setAttribute("rest", res);
您不应将其设置为请求属性。只有在转发到 JSP 文件时,设置请求属性才有用。您需要自己将其直接写到响应中。将行替换为
response.getWriter().write(res);
这样它最终会出现在响应正文中,并在您的 JS 函数中作为变量 response
使用。
另见:
How to update current page by Servlet/Ajax?【讨论】:
非常感谢。我正在获取 index.jsp 中变量 res 的值。【参考方案2】:似乎您正在使用 AJAX,所以我想说您的响应需要以兼容 AJAX 的方式(JSON、XML、...)进行编码。
如果您进行 AJAX 编码,您的函数可能如下所示:
function(response)
var toplevel = response.<your_top_level_element>;
编辑:
我们使用JSON Simple 进行 JSON 编码。
我们的 Java 后端看起来像这样(没有错误检查的简化版本):
public String execute()
JSONObject jsonResult = new JSONObject();
jsonResult.put( "result", "ok");
return jsonResult.toJSONString();
在javascript函数中:
function(response)
var result = response.result; //now yields "ok"
【讨论】:
很抱歉我不知道 JSON。我可以立即将此代码放入我的 java 类文件中并使用 jsp 文件中的对象吗? 你也可以在你的jsp中做到这一点。只需使用<%=jsonResult.toJSONString()%>
。要填充 JSON 对象,请查看 JSON Simple 文档。这真的很简单 - 只需设置属性或填充数组并最终调用 toJSONString()
以获得正确的格式。【参考方案3】:
如果这是一个ajax请求,你可以将请求转发到另一个jsp页面而不是返回。有了这个
getServletContext().getRequestDispatcher("/ajax.jsp").forward(request, response);
create the jsp page(ajax.jsp) on your webcontent and add this sample code.
<p>$rest</p>
<!-- Note: You can actually design your html here.
You can also format this as an xml file and let your js do the work.
//-->
另一种方法是用这个替换你的 System.out.println
PrintWriter out = response.getWriter();
out.print("The value of res been passed is "+res);
但我想这是一个不好的做法。参见示例here。
【讨论】:
感谢您的建议。但是我需要从 index.jsp 中的 java 文件中访问变量的值。因此,如果我将值发送到另一个 ajax.jsp,它仍然需要发送到 index.jsp。因此,如果我可以首先将变量的值传递给 index.jsp 会更好。 您的意思是在浏览器中加载 index.jsp 之前,您已经拥有该值。我认为该值是通过 ajax 请求的。如果是这样的话,我可以知道你的申请流程。前任。首先执行哪个文件。 Index.jsp 有登录功能。通过 ajax 我调用 admin.java 来完成对用户的身份验证。每个用户在注册时都会告诉他/她对任何语言的兴趣,比如 c、c++、java 等。所有这些信息都存储在数据库中。 一旦完成。当用户通过 admin.java 登录应用程序时,正在寻找正在尝试登录的兴趣。这是通过名为 SemanticSearch 的函数完成的。此函数返回变量“res”中感兴趣的值,我需要在 admin.java 返回后将其传递回 index.jsp。 就像我所说的 ajax.jsp 一样,这是负责处理资源的人。然后在调用它之后,它将返回到您的 ajax 请求。你也可以不在你的 Servlet 中包含返回值。关于我的第二个建议,这是最简单的方法之一。如果您能看到响应,请尝试提醒(请求)。还要在您的 ajax 上添加错误处理程序,请参阅此“***.com/questions/377644/…”以上是关于如何将变量的值从java类传递到jsp页面的主要内容,如果未能解决你的问题,请参考以下文章