当前位置: 首页 > 知识库问答 >
问题:

如何在不离开页面的情况下从servlet返回字符串?

郑茂材
2023-03-14

以下是图片:

我有一个带有表单的html/jsp页面。

    <div id = "divAttributes">
        <form id = 'fid' method = "post" action = "RunQuery">
            Id Number: <input type= "text" name = "foo" id = "txtFoo"/><br/>        
            <input type = "checkbox" id = "chboxZap" value = "zap"/>Foo<br/>
            <input type = "checkbox" id = "chboxBar" value = "bar"/>Bar<br/>
            <input type= "submit" id = "btnSubmit" value = "submit" onclick = "setDisabled('divAttributes', true)"/><br/>
        </form>
    </div>

当用户按下提交按钮时,我想将表单中包含的信息发送到servlet,然后servlet将进行一些处理并返回字符串。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response) throws IOException {

    response.setContentType("text/plain");

    ReturnCode rc = world.hello.MyMainClass.wait(request.getParameter("foo"));

    /*I want to return the RC, which is a bool, a string, and another object, which in this case is a string*/
}

然后将该字符串发送到另一个servlet,该servlet将保存一个文件。

我已经将servlet保存到文件中:

public void doPost(HttpServletRequest request,
                   HttpServletResponse response) throws IOException {
    response.setContentType("text/plain");
    response.setHeader("Content-Disposition",
            "attachment;filename=downloadname.txt");

    ServletContext ctx = getServletContext();

    String s = new String(request.getParameter("data"));

    InputStream is = new ByteArrayInputStream(s.getBytes());

    int read = 0;
    byte[] bytes = new byte[BYTES_DOWNLOAD];

    OutputStream os = response.getOutputStream();

    while ((read = is.read(bytes)) != -1) {
        os.write(bytes, 0, read);
    }
    os.flush();
    os.close();
}

我有两个问题:

>

如何将值从servlet返回到调用它的HTML页面,并从那里访问它们?

共有2个答案

陈夜洛
2023-03-14

使用AJAX!

AJAX允许您创建一个AJAX Javascript对象,并向该对象返回HttpResponse。

eg.

function myAjaxRequest()
{
var xmlhttp; /*our ajax object*/

        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        setVisible('loading', true) ;

        /*this function called when ajax state changes*/
        xmlhttp.onreadystatechange=function()
          {
          /*when the query has completed successfully*/
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                /*now you can do what you want with your response text!*/
                var mystring= xmlhttp.responseText;
                alert(mystring);
            }

          }

        /*the URL query we want to run*/
        var query = "RunQuery?foo="+$('#txtFoo').val();
        alert(query);

        /*AJAX object runs the query*/
        xmlhttp.open("GET", query, true); 
        xmlhttp.send();     
}       
彭弘方
2023-03-14

JavaScript,更具体地说,Ajax将帮助您。如果在HTML中包含一个具有良好Ajax支持的库(比如jQuery),那么可以在保持页面不变的同时调用servlet。

因此,您可以调用一个JavaScript函数,对两个servlet使用嵌套的Ajax帖子,而不是通过按钮提交表单:

function submitForm() {
  $.post( 'url/to/firstServlet', { text: $('#txtFoo').val() }, function(dataFromFirst) {
    $.post( 'url/to/secondServlet', { data: dataFromFirst }, function(dataFromSecond) {
      // handle response from second servlet
    });
  });
}
 类似资料:
  • 问题内容: 我目前正在编写一个复杂的AJAX应用程序,并且整个站点都有干净的URL。目前,PHP为每个页面创建基本布局,但是当用户单击链接时,我不想离开每个页面,也不想在URL中包含哈希,因为它不会不适合该网站的其他部分。我知道这已经增加了网站上的负载,这似乎是很常见的问题,但是我想知道是否存在一种整洁的HTML5方法,即使技术上保持不变,它似乎也只是更改地址栏中的URL页。 问题答案: 您可以使

  • 问题内容: 我想在写笔记的页面上更改查询字符串。保存笔记时,我希望查询字符串具有该笔记的条目。因此,在初始保存之后,用户可以根据查询字符串进行更新。但是要更新查询字符串,我需要进行完整的回发。无论如何有这样改变查询字符串? 问题答案: 否,您必须重新加载才能更改当前查询字符串。您可以通过()使用网址的片段部分。设置片段部分可以使您无需重新加载即可向浏览器历史记录中添加一些条目。 例如,如果您当前的

  • 问题内容: 如何在不刷新页面的情况下更改URL? 我已经用CodeIginer建立了一个网站,我想在我的页面之一中实现AJAX和JQuery。问题是; 当我加载内容时,URL不会改变。 假设我有URL 和另一个URL: 单击按钮时如何将第一个URL更改为第二个URL? 问题答案: 在HTML5中,您可以更改URL: 检查http://spoiledmilk.com/blog/html5-chang

  • 问题内容: 我从plist中的字典中加载了一个值,但是当我将其打印到控制台时,它会打印:Optional(Monday Title),而不仅仅是“ Monday Title”。 如何在打印时摆脱值的Optional()? 问题答案: 摆脱的一种方法是使用感叹号: 但是,只有在确定存在该值的情况下,才应这样做。另一种方法是解包和使用条件,例如: 将该程序粘贴到runswiftlang中进行演示:

  • 问题内容: 我有一个适用于Django应用的命令行Python API。当我通过API访问该应用程序时,它应该返回JSON,而在浏览器中它应该返回HTML。我可以使用不同的URL访问不同的版本,但是如何只用一个模板在views.py中呈现HTML模板和JSON ? 要呈现HTML,我将使用: 但是如何在不放置JSON模板的情况下对JSON做同样的事情?(应为而不是) 什么将决定JSON和HTML输

  • 我正在调用一个外部服务来获取,如果该服务不工作,我所需要的只是用填充值