【问题标题】:how to pass servlet response to html text using javascript如何使用javascript将servlet响应传递给html文本
【发布时间】:2020-06-15 22:13:26
【问题描述】:

在我的项目中,我有 html 选择文件和 html 文本文件。我想显示一些在 html 选择文件选项 onchange 事件时访问 html 文本文件中的数据库的结果。为此,我编写了这个 servlet 代码,它从 access 数据库中获取数据并将结果发送到 jsp 页面。

package org.solr;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class getValues
 */
@WebServlet("/getValues")
public class getValues extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public getValues() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String salesOrder=request.getParameter("salesOrder");
        System.out.println(salesOrder);
        try {
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            String db_path="C:\\Users\\ftk1187\\Desktop\\ad\\Test1.accdb";
            Connection con=DriverManager.getConnection("jdbc:ucanaccess://"+db_path+";jackcessOpener=CryptCodecOpener","","12345tec");
            Statement state=con.createStatement();
            ResultSet rs=state.executeQuery("SELECT * FROM tblSO_all WHERE strSO='"+salesOrder+"'");
            while(rs.next())
            {
                String indDate=rs.getString("strDate");
                System.out.println(indDate);
                request.setAttribute("indDate", indDate);
                request.getRequestDispatcher("upload.jsp").forward(request, response);
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

    }
}

在jsp端,我写了这段javascript代码

<script>
function strSO(){
    var salesOrder=$("#sOrder option:selected").val();
    $.ajax({
        type:'get',
        url:'getValues',
        data:'salesOrder='+salesOrder,
        dataType:'text/plain',
        success:function(){
            console.log("success");
        }
    document.getElementById("indDate").value=<%=request.getAttribute("indDate")%>
    }); 
    }
</script>

servlet 运行正常,我在 eclipse 的控制台中使用 sysout 看到了结果。但结果未显示在 html 文本文件中。那么问题出在哪里?

更新

这是我的 Eclipse 控制台和浏览器控制台。

更新

经过斯瓦蒂的回答,问题的解决方法是这样的

String salesOrder=request.getParameter("salesOrder");
        try {
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            String db_path="C:\\Users\\ftk1187\\Desktop\\ad\\Test1.accdb";
            Connection con=DriverManager.getConnection("jdbc:ucanaccess://"+db_path+";jackcessOpener=CryptCodecOpener","","12345tec");
            Statement state=con.createStatement();
            ResultSet rs=state.executeQuery("SELECT * FROM tblSO_all WHERE strSO='"+salesOrder+"'");
            while(rs.next())
            {
                String indDate=rs.getString("strDate");
                System.out.println(indDate);
                response.getWriter().write(indDate);
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

还有这样的脚本

<script>
function salesOrder(){
    var salesOrder=$("#sOrder option:selected").val();
    $.ajax({
        type:'get',
        url:'getValues',
        data:'salesOrder='+salesOrder,
        success:function(data){
            console.log("success");
            document.getElementById("induction").value=data;
        }
    }); 
}
</script>

【问题讨论】:

  • 您是否查看了浏览器控制台并确定请求是否发送到正确的 URL?控制台是否按照您的打印记录 success
  • 您正在执行 ajax 调用,但不对结果执行任何操作。为什么你希望它出现在任何地方? “在 html 文本文件中”是什么意思?
  • @f1sh 我想动态更改 html 输入文本,我想在我的访问数据库中获取数据。
  • @demir5334 你在哪里更改文本? document.getElementById("indDate").value 行不应该在成功回调函数中吗?
  • 下一个问题:你怎么能/一个getElementById()来自text/plain? (所以请“返回 xml/html/dom”或“处理文本”。)下一个问题:document.getElementById(除了不正确)放错了位置,它应该进入(成功)处理程序。

标签: javascript java html jsp


【解决方案1】:

无论您将打印什么,即:System.out.println(indDate); 这将作为 ajax 调用中的响应返回。此外,您无法从 servlet 转发您的页面,因为您使用的是 ajax,您需要发回一些内容,然后您可以从那里转发.因此,从 servlet 中删除这些 request.getRequestDispatcher("upload.jsp").forward(request, response); 行。此外,您的 ajax 调用应如下所示:

function strSO(){
    var salesOrder=$("#sOrder option:selected").val();
    $.ajax({
        type:'get',
        url:'getValues',
        data:'salesOrder='+salesOrder,
        success:function(data){
            console.log("success");
       document.getElementById("indDate").value=data;//indDate will be asign to textbox
    //you can write redirect code  here
        }

    }); 
    }

【讨论】:

  • 仍然是我从我的 servlet 获得的结果,而不是我的 html 文本框。 :( 我将从我的 Eclipse 控制台和我的网络浏览器控制台添加一张图片。
  • alert(data); 在 ajax 的成功函数内并检查它给出了什么,另外,你的 js 代码中有错误 ..ie:expected ';' 检查代码中这一行的位置。跨度>
  • 当我在做alert(data) 时,它没有显示任何东西。它来了 null :(
  • 在您的 servlet 中写入 response.getWriter().write("Success Data"+indDate); 并检查您的 ajax 方法是否有数据来访
  • 我还有 1 个问题。如果我想传递一个arraylist,我该怎么做?
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2018-01-08
  • 2014-04-15
  • 1970-01-01
  • 2012-10-24
  • 2012-12-15
相关资源
最近更新 更多