애플릿에서 JDBC를 작성하면 실제로 잘못된 경로가 발생했습니다. 애플릿의 소스 코드는 일반 사용자에게 공개됩니다. 악의적 인 최종 사용자는 DB 이름/암호를보고 역 컴파일하여 SQL 쿼리를 변경하여 DELETE
또는 TRUNCATE
또는 다른 나쁜 점을 대신 수행 할 수 있습니다. 바이 바이 데이터베이스.
특정 URL 만 수신하고 결과를 XML, JSON, CSV 등과 같은 일반적인 형식으로 반환하는 "웹 서비스"를 디자인하고 만들어야합니다. 그런 다음 애플릿은 정확히 URLConnection
에 의해 해당 URL을 호출하고 결과를 처리합니다. Java 객체를 XML/JSON/CSV 형식으로 변환하는 많은 Java 라이브러리가 있으며 그 반대의 경우도 있습니다. 웹 서비스와 애플릿의 코드에서 동일한 라이브러리를 사용할 수 있습니다.
는 "웹 서비스"역할을하는 서블릿에서 다음과 같이 당신이 기본적으로 할 수있는, 당신은 자바와 JSON 사이의 변환 Gson를 사용하여 JSON을 선택하고 있다는 것을 상상 :
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Just a basic example. In real, just retrieve data from DB.
List<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
list.add("item3");
String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
이가 애플릿에서 다음과 같이 얻을 수 있습니다.
URL url = new URL(getCodeBase(), "servletURL");
Reader reader = new InputStreamReader(url.openStream(), "UTF-8");
List<String> list = new Gson().fromJson(reader, new TypeToken<List<String>>() {}.getType());
// ...
일반적으로 데이터베이스는 localhost에서만 연결을 허용하도록 설정됩니다. 즉, 서블릿 (또는 다른 서버가 아닌 서버)에서만 연결할 수 있습니다. 애플릿은 클라이언트의 IP에서 db에 연결하려고 시도하지만 대개 금지됩니다. – NullPointer