如何在不重新加载JSP页面的情况下从数据库中检索值

问题描述 投票:0回答:2

我想知道如何在不重新加载页面的情况下从数据库检索值。我只懂一点点javascript,并且我在数据库中使用data source jndi。我目前正在使用MVC2模型。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import = "java.sql.*" %>
<%@page import = "javax.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
    $(document).ready(function(){
        $( "button" ).click(function() {
            $("#users").change(function(){ //A function to execute each time the event is triggered.
                var value = $(this).val(); //allows you to pass an array of element values   
                $.get("index.jsp",{q:value},function(data){
                    $("#javaquery").html(data);
                });
            });
        });
    });
</script>
</head>
<body>
    <div id="users">
        <button value="1">1</button>
        <button value="2">2</button>
    </div>
    <br />
    <div id="javaquery"><b>Name will be displayed here</b></div>
<%
    String name = "";
    String q = request.getParameter("q");
    try {
        Class.forName("net.sourceforge.jtds.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.14:1433/demolangako", "demolangme", "demolangme");
        Statement smt = con.createStatement(); //Create Statement to interact
        ResultSet r = smt.executeQuery("select * from users where(id='" + q + "');");
        while (r.next()) {
            name = r.getString("name");
        }
        con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
 %>
Name:<%out.print(name);%>

</body>
</html>

目前,我有此代码,但是它不适用于我的按钮。任何帮助表示赞赏。

jquery ajax database jsp
2个回答
0
投票

首先,您必须在单独的文件中拥有数据库访问代码(仅Java),这将满足index.jsp的ajax请求。

第二点是,您需要修改jQuery脚本。当您要将按钮单击值发送给ajax时,请尝试使用此方法。

$("button").click(function() {
  $.get("jdbc.jsp", {
    q: $(this).val()
  }, function(data) {
    $("#javaquery").html(data);
  });
});

0
投票

请避免在jsp文件中编写Java代码。您可以从How to avoid Java code in JSP files?中找到简要说明BalusC

请阅读MVC2 pattern。如果您使用的是MVC2,则业务和视图之间应该有明确的隔离。

首先,我们应该创建简单的jsp-servlet结构。您可以找到我的答案Creating a simple web page using servlet。完成以上部分后,

为此,您可以使用ajax。由于您已使用jQuery-ajax,因此我将对其进行说明。不要记得导入jquery库。

您的index.jsp应该是这样,当您在文本框中输入值并单击提交时,我有一个文本框和一个按钮,它应该通过servlet到达数据库并返回结果,而无需重新加载页面。如我的示例所示,我正在向HelloServlet发送请求。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Submit and View Page</title>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function(){
  $("#newsubmit").click(function(e){
    $.ajax({
        type: "POST",
        url: "HelloServlet",
        data: { name: $("#myname").val() },
        success:function(result){
            alert(result);
        }
    });
  });
});
</script>
</head>
<body>
     <form>
        <label>Name: </label><input type='text' id="myname" name='name'/></br>
        <input type="button" id="newsubmit" value="Submit" />
    </form>
</body>
</html>

并且在您的servlet中,

public class HelloServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // Receive the username
        String name = req.getParameter("name");
        String result = "";
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.0.14:1433/demolangako", "demolangme", "demolangme");

            // I prefer using prepared statements to avoid SQL injections
            String selectSQL = "SELECT * FROM USERS WHERE NAME = ?";
            PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
            preparedStatement.setString(1, name);
            ResultSet rs = preparedStatement.executeQuery(selectSQL );
            while (rs.next()) {
                result = rs.getString("name");
            }
            String greetings = "Hello " + result;
            response.setContentType("text/plain");
            response.getWriter().write(greetings);
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

现在您将收到ajax的回复。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.