【问题标题】:How can i call a parametrized method of java class into a servlet doget method我如何将java类的参数化方法调用到servlet doget方法中
【发布时间】:2018-11-20 05:53:57
【问题描述】:

我有一个 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,那么它会抛出错误。请有任何知识的人帮助我

【问题讨论】:

  • 错误是什么?
  • 顺便说一句,在编写更多类似的 SQL 查询之前,您可能需要研究“SQL 注入”
  • 检查您的数据库是否有有效的mt_distributr_vcdistributrcode
  • @cricket_007 在 servlet 中当我调用 Outlet.Outlet() 时它说要传递一个参数我应该传递什么参数?什么是 SQL 注入?
  • @ScaryWombat 什么??我没有得到你

标签: java sql servlets jdbc methods


【解决方案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

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

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

【讨论】:

  • 嘿,你从哪里得到这个“id”?
  • 在我的 ui 上,我没有任何 idDB 的输入字段。它来自记录查询,就像当用户登录时有一个表单表单登录到 mu ui 我运行查询它检查用户名和密码,并且我从该查询中获取该值 idDB 现在我将该值传递给 java 类方法,即 Outlet 并且在我正在使用的那个方法中查询中的 idDB
  • 我没听懂你:(
  • 好吧...我不知道你的API,或者你的应用程序的逻辑...答案还是一样的。您需要形成该 URL,这样您才能真正获得一个 ID。这是路径的一部分,http/your.api.com/someAPI/ids/x 获取该 ID,或者您可以将 ?id=x 放在末尾​​span>
  • 那么名称idDB在这里并不重要。该参数可以在您的代码中命名为任何名称。这并不意味着您的 API 需要使用相同的东西
猜你喜欢
  • 2012-11-12
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2011-08-18
相关资源
最近更新 更多