如何将变量的值从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.javaindex.jsp

Admin.java 中,我通过一个函数检索名为res 的变量的值。这个变量需要被传递给一个 JSP 页面。

Admin.javaC:\Users\praveen\workspace\SemanticWeb\src\controller 中,而index.jspC:\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中做到这一点。只需使用&lt;%=jsonResult.toJSONString()%&gt;。要填充 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页面的主要内容,如果未能解决你的问题,请参考以下文章

Struts 2:将表单字段的值从 jsp 发送到操作类

在java中将Arraylist值从servlet传递到JSP?

如何将一组复选框值从一个 JSP 页面传递到另一个

JSP 将值从表传递到表单

如何将值从 ajax 传递到 portlet 页面

Java ajax 将值从 jsp 传递到 servlet