如何将Java类的参数化方法调用为servlet doget方法

时间:2018-11-20 05:53:57

标签: java sql servlets jdbc methods

我有一个Java类,其中有一个方法正在向我返回一个json,我想将该方法调用到我的servlet doGet方法中,以便以后可以进行AJAX调用

但是在调用java类方法( Outlet.Outlet )时,它要求传递一个参数,但我不知道该传递什么 请看一下我的代码

这是我的java类

public class Outlet {
static Connection con = null;
static Statement statement = null;
ResultSet resultSet = null;

public static String Outlet(String idDB) throws ClassNotFoundException, SQLException {
    List<String> list = new ArrayList<String>();
    con = DBConnection.createConnection();
    statement = con.createStatement();

    String sql="select CUSTOMERDESCRIPTOR as OUTLETNAME from ecustomer where CUSTOMERIDENTIFIER in(select CUSTOMERIDENTIFIER from mt_distributrol where mt_distributr_vcdistributrcode = '"+idDB+"')";

  System.out.println("iddb  :"+idDB);
    try {

        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            list.add(resultSet.getString("OUTLETNAME"));

        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
    String json = new Gson().toJson(list);
    System.out.println("Json Outlet :"+json);
    return json;
}

}

在上面的java类中,我返回一个Json,我想将该方法调用到我的servlet doGost中。

我的doGet是

    try {
        String json = Outlet.Outlet();  //what should i pass here as a parameter
        response.setContentType("application/json");
        response.getWriter().write(json);
        System.out.println("dheeraj"+json);
    }
    catch (Exception e) {

        e.printStackTrace();
    }

}

如果我通过idDB,则会引发错误。请任何有知识的人帮助我

1 个答案:

答案 0 :(得分:1)

请阅读OWASP - SQL Injection并了解PreparedStatements

首先,方法不应以大写字母开头,因此您可以将其命名为Outlet.findById而不是Outlet.Outlet(方法不应与类相同;阅读起来确实令人困惑),您可以从请求中获取参数

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String id = request.getParameter("id");
    String s = Outlet.findById(id);

调用API时,您添加?id=value

或者,假设您的API的设置类似于request,则可以从/path/ids/value获取路径的最后一部分-请参考What's the difference between getRequestURI and getPathInfo methods in HttpServletRequest?以获取与此选项有关的信息

在执行此操作之前,您当然应该仔细检查正在运行的查询,当直接查询数据库时实际上返回了数据。