【发布时间】:2014-05-12 09:39:36
【问题描述】:
我正在尝试在特定 URL 上创建一个 servlet,以处理来自另一台服务器的 HTML 帖子并接收所有参数及其值并将它们插入数据库。
目前为止得到了这段代码:
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import java.sql.*;
public class QueryServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException
{
String instId=req.getParameterValues("instId")[0];
String cartId=req.getParameterValues("cartId")[0];
String desc=req.getParameterValues("desc")[0];
String cost=req.getParameterValues("cost")[0];
String amount=req.getParameterValues("amount")[0];
String currency=req.getParameterValues("currency")[0];
String name=req.getParameterValues("name")[0];
String transId=req.getParameterValues("transId")[0];
String transStatus=req.getParameterValues("transStatus")[0];
String transTime=req.getParameterValues("transTime")[0];
String cardType=req.getParameterValues("cardType")[0];
Connection conn = null;
Statement stmt = null;
PrintWriter out=res.getWriter();
try
{
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/orders", "root", "root");
stmt = conn.createStatement();
String sqlStr = "insert into orderdetails values('"+transId+"','"+instId+"','"+cartId+"','"+desc+"'"+cost+"','"+amount+"','"+currency+"','"+name+"','"+transStatus+"','"+transTime+"','"+cardType+")";
out.println("<html><head><title>Query Response</title></head><body>");
out.println("<h3>Thank you for your query.</h3>");
out.println("<p>You query is: " + sqlStr + "</p>"); // Echo for debugging
ResultSet rset = stmt.executeQuery(sqlStr); // Send the query to the server
}
catch(SQLException ex)
{
ex.printStackTrace();
}
}
}
我尝试了一些更改,但总是出错。
你能帮帮我吗?
顺便说一句,我对 Java 知之甚少,一直试图从其他人的示例和低谷指南中“破解我的方式”来做到这一点。
提前致谢
编辑:我无法登录我的开发机器 atm,因为它有问题并且已关闭,它与 Null 指针或 Null 值有关,无法给出确切的错误 atm,将尽快更新可能。
我也知道代码中的 SQL 注入,只是尝试先对其进行测试并使其工作并在我设置它之前更改代码。
【问题讨论】:
-
你遇到了什么错误?
-
附带说明,在 sql 查询中连接客户端接收到的值是一个很大的安全漏洞。你应该使用
PreparedStatement -
除非您有特定的理由手动执行此操作,否则请改用 Spring MVC 并让它处理所有样板; Spring Boot 将为您处理几乎所有的配置。此外,您永远不应该使用字符串粘贴来创建任何语言的 SQL 语句;改用准备好的语句。