关于Ajax:如何将变量的值从Java类传递到JSP页面

How to pass a value of a variable from a java class to the jsp page

我有两个文件,分别是Admin.javaindex.jsp

Admin.java中,我通过函数检索名为res的变量的值。此变量需要传递到JSP页。

Admin.javaC:\Users\praveen\workspace\SemanticWeb\src\controller中,而index.jspC:\Users\praveen\workspace\SemanticWeb\WebContent中。

admin.java的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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的代码是

1
2
3
4
5
6
7
8
9
10
11
function login(user, pass)
{

  $.ajax({
    type:"GET",
    url:"Admin?action=login",
    dataType:"text",
    data: { username: user, password: pass },
    success: function(response){

    }

1
2
3
4
function(response)
{
 ......
}

我需要访问Admin.java通过的res的值。我无法在互联网上为我的代码获得任何适当的帮助。有人能帮我吗?


从您的代码中,

1
request.setAttribute("rest", res);

您不应该将其设置为请求属性。只有在转发到JSP文件时,设置请求属性才有用。你需要把它直接写在你自己的回答上。将行替换为

1
response.getWriter().write(res);

这样,它将在响应主体中结束,并在JS函数中作为变量response提供。

参见:

  • 如何通过servlet/ajax更新当前页面?


似乎您在使用Ajax,所以我想说您的响应需要以与Ajax兼容的方式(JSON、XML等)编码。

如果您使用Ajax编码,您的函数可能如下所示:

1
2
3
4
function(response)
{
 var toplevel = response.<your_top_level_element>;
}

编辑:

我们将简单的JSON用于JSON编码。

我们的Java后端看起来像这样(没有错误检查的简化版本):

1
2
3
4
5
6
7
8
public String execute()
{
  JSONObject jsonResult = new JSONObject();

  jsonResult.put("result","ok");

  return jsonResult.toJSONString();
}

在javascript函数中:

1
2
3
4
function(response)
{
 var result = response.result; //now yields"ok"
}


如果这是一个Ajax请求,您可以将请求转发到另一个JSP页面,而不是返回。用这个

1
2
3
4
5
6
7
8
9
10
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

1
2
PrintWriter out = response.getWriter();
out.print("The value of res been passed is"+res);

但我想这是一种不好的做法。请参见此处的示例。