javascript - 如何使用 javascript 将 servlet 响应传递给 html 文本

标签 javascript java html jsp

在我的项目中,我有 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 控制台和浏览器控制台。 Eclipse's console

web browser's console

更新

经过Swati的回答,问题的解决方案是这样的

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>

最佳答案

无论你要打印什么,即: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
        }

    }); 
    }

关于javascript - 如何使用 javascript 将 servlet 响应传递给 html 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60508784/

相关文章:

javascript - 存储在变量中的 HTML 中的 jQuery 更改属性

java - 递归文件搜索指定扩展名

javascript - ondrop 影响目标的父级

javascript - 将桌面拖放到浏览器 HTML5 Javascript

javascript - 文本区域的输入清除按钮

javascript - 推送到数组会覆盖相似的条目

javascript - 如何构建我的 javascript/jquery 代码?

Java - 具有多个节点的树数据结构 - 如何有效地搜索

java - Wicket:AjaxLazyLoadPanel 在渲染第一个面板后挂起

python - 尝试使用 BeautifulSoup 查找 div 时,Webscraping 不会返回任何内容