如何将变量值从java类传递到jsp页面

如何将变量值从java类传递到jsp页面,java,ajax,jsp,servlets,Java,Ajax,Jsp,Servlets,我有两个文件名为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();

我有两个文件名为
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上获得有关我的代码的任何适当帮助。有人能帮我一下吗。

看起来你在做AJAX,所以我想说你的回答需要以AJAX兼容的方式编码(JSON、XML等等)

如果使用AJAX编码,函数可能如下所示:

function(response)
{
 var toplevel = response.<your_top_level_element>;
} 
在Javascript函数中:

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

如果这是一个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.
//-->
但我想这是一个坏习惯。参见示例。

从代码中

request.setAttribute("rest", res);
您不应该将其设置为请求属性。设置请求属性只有在转发到JSP文件时才有用。你需要自己把它直接写在回复上。将线路更换为

response.getWriter().write(res);
这样,它将在响应体中结束,并在JS函数中作为变量
response
可用

另见:

很抱歉,我不知道JSON。我可以直接将这段代码放在java类文件中并在jsp文件中使用对象吗?您也可以在jsp中这样做。只需使用
。要填充JSON对象,只需查看JSON简单文档。这非常简单-只需设置属性或填充数组,并最终调用
toJSONString()
以获得正确的格式。谢谢您的建议。但是我需要从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一样,这是处理res的人。然后在调用它之后,它将返回到您的ajax请求。您也可以不在Servlet中包含返回。关于我的第二个建议,这是最简单的方法之一。如果可以看到响应,请尝试发出警报(请求)。还要在ajax上添加错误处理程序,请参见“放置断点”;检查您的管理代码是否实际执行。是的,管理代码正在执行,并且res的值正在那里填充。我已经检查过了,但无法将其传递到所需的jsp页面。非常感谢。我正在index.jsp中获取变量res的值。
request.setAttribute("rest", res);
response.getWriter().write(res);