0

I am new to servlets i wrote a servlet which fetches data from database and prints a table,i have a jsp page which has a button to search for employee id. My requirement is the table should be displayed in same page where i search i.e jsp page.I searched all day but could not find solution using javascript . I want this to be done only using javascript not jquery .thanks in advance. Here is my jsp page

search.jsp

<html>
<head>

    <script>
        var request;
        var date;
        function data()
        {

            var v = document.getElementById("ele1").value;

            var url = "Retrieve?ele1=" + v;
            alert("v" + v);
            if (window.XMLHttpRequest)
            {
                request = new XMLHttpRequest();
            } else if (window.ActiveXObject)
            {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            try
            {
                request.onreadystatechange = getInfo;
                request.open("GET", url, true);
                request.send();

            } catch (e)
            {
                alert("unable to connect to server");
            }
        }
        function getInfo()
        {
            request = new XMLHttpRequest();

            if (request.readyState == 4)
            {

                alert(val);
                var response = request.responseXML;
                var val = request.responseText;
                document.getElementById("sun").innerHTML = val;
            }
        }

        }

    </script>
</head>
<body>
    <div>
        <form id="search" name="search" action="Retrieve" method="post"> 
            <label id="search">Search By Empid</label>
            <input type="text" name="ele1" id="ele1">
            <input type="button" value="Get Details" onclick="data();">

        </form>

    </div>
    <div id="sun">

    </div>
</body>

this is my servlet page

Retrieve.java

public class Retrieve extends HttpServlet {

Connection con = null;
Statement st = null;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //response.setContentType("text/html;charset=UTF-8");

    try (PrintWriter out = response.getWriter()) {

        Class.forName("org.postgresql.Driver");
        con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/name", "postgres", "admin");
        st = con.createStatement();

        String num = request.getParameter("ele1");
        int id = Integer.valueOf(num);
        PreparedStatement ps = con.prepareStatement("select * from empretrieve where Empid=?");
        ps.setInt(1, id);

        out.print("<table width=50% border=1>");
        out.print("<caption>Result:</caption>");

        ResultSet rs = ps.executeQuery();

        ResultSetMetaData rsmd = rs.getMetaData();
        int tot = rsmd.getColumnCount();
        out.print("<tr>");
        for (int i = 1; i <= tot; i++) {
            out.print("<th>" + rsmd.getColumnName(i) + "</th>");

        }
        out.print("</tr>");

        while (rs.next()) {
            out.print("<tr><td>" + rs.getInt(1) + "</td><td>" + rs.getString(2) + "</td><td>" + rs.getString(3) + "</td><td>" + rs.getString(4) + "</td><td>" + rs.getString(5) + "</td><td>" + rs.getString(6) + "</td><td>" + rs.getString(7) + "</td><td>" + rs.getString(8) + "</td><td>");
        }
        out.print("</table>");
        System.out.println("processRequest : : ");

    } catch (Exception e) {
        PrintWriter out = response.getWriter();
        out.println(" e : " + e);
    } finally {
        try {
            if (st != null) {
                st.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (Exception ex) {
        }
    }

}

  • i have done it but the result is still getting displayed in next page – user2159629 Mar 25 '17 at 11:33
  • You can make ajax call from jsp to servlet. Have you tried that? http://stackoverflow.com/questions/8567114/how-to-make-an-ajax-call-without-jquery This might help – Sanal S Mar 25 '17 at 11:45
  • I tried it using XMLHttpRequest but still the browser is redirecting to servlet page@Sanal S – user2159629 Mar 25 '17 at 12:08

1 Answers1

0

This is working for me: Servlet:

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

    /**
     * @see HttpServlet#HttpServlet()
     */
    public XTMLRequestServlet() {
        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
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

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

}

JSP:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>XTMLREQUEST</title>
</head>
<body>

<h1>XTMLREQUEST</h1>
Response:<div id="response"></div>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'XTMLRequestServlet', true);

// If specified, responseType must be empty string or "text"
xhr.responseType = 'text';

xhr.onload = function () {
    if (xhr.readyState === xhr.DONE) {
        if (xhr.status === 200) {
           var el  = document.querySelector("#response");
           el.insertAdjacentHTML("beforeend", xhr.responseText);
            console.log(xhr.responseText);
        }
    }
};

xhr.send(null);
</script>
</body>
</html>
funcoding
  • 663
  • 5
  • 9