String getSimpleName() : 해당 클래스명 리턴
'Development > Java' 카테고리의 다른 글
Garbage Collection 과정 (0) | 2018.04.28 |
---|---|
Garbage Collection 용어 정리 (0) | 2018.04.26 |
AES256 암호화 오류 해결 (4) | 2017.10.06 |
반복문 성능 비교 (0) | 2017.07.27 |
List 중복 제거 (0) | 2017.07.13 |
Garbage Collection 과정 (0) | 2018.04.28 |
---|---|
Garbage Collection 용어 정리 (0) | 2018.04.26 |
AES256 암호화 오류 해결 (4) | 2017.10.06 |
반복문 성능 비교 (0) | 2017.07.27 |
List 중복 제거 (0) | 2017.07.13 |
요청 포워딩 처리
요청에 대한 응답을 누가할지 선택할 수 있다.
웹 애플리케이션에 있는 다른 컴포넌트에게 처리를 위임하거나 요청을 완전히 다른 URL로 방향을 바꿀 수 있다.
1. RequestDispatcher 클래스를 이용한 forward 방법
웹 브라우저를 통해 사용자가 서블릿에 최초 요청하면 HttpServletRequest 객체가 자동으로 생성된다.
이 request 객체를 사용해 응답을 처리하는 웹 컴포넌트(서블릿, JSP, HTML)로 재요청하는 방식이다.
최초/재요청 동일한 HttpServletRequest 객체를 사용하기 때문에 URL 변동이 없다.
따라서 웹 브라우저 입장에서는 누가 처리한 것인지 알 수 없다.
또한, 동일한 객체를 사용하기 때문에 최초 요청시 request scope에 attribute를 설정하면 재요청시 설정된 attribute 값을 가져올 수 있다.
1 2 | RequestDispatcher dispatcher = request.getRequestDispatcher(target); dispatcher.forward(request, response); | cs |
2. HttpServletResponse 클래스를 이용한 redirect 방법
forward 방식과 동일하게 다른 웹 컴포넌트에게 재요청하는 방식이다.
차이점은 최초 요청에 대한 응답시 HttpServletResponse 객체의 상태코드 헤더에 301 값과 Location 헤더에 새로운 URL 값을 포함시킨다.
웹 브라우저는 응답받은 URL로 재요청하기 때문에 동일한 HttpServletRequest가 아닌 새로운 request 객체가 생성된다.
따라서 URL이 변경되고 attribute에 설정된 값을 가져올 수 없다.
1 | response.sendRedirect(target); | cs |
JDBC 오라클 데이터베이스 연동하기 (0) | 2017.06.06 |
---|---|
어노테이션을 이용한 초기화파라미터/리스너/필터 등록하기 (0) | 2017.06.06 |
서블릿 한글 깨짐 방지 (0) | 2017.06.01 |
어노테이션을 이용한 Servlet Project 시작하기 (0) | 2017.06.01 |
JDBC 오라클 데이터베이스 연동하기
먼저 오라클 데이터베이스 설치하여 emp 테이블을 생성한 전제로 진행한다. (다운로드 - www.oracle.com)
오라클 드라이버를 클래스 패스에 설정해야 자바 애플리케이션과 오라클 데이터베이스를 연동할 수 있다.
[Windows]-[Preferences]-[Java]-[Build Path]-[ClassPath Variables]에 있는 JRE_LIB 경로를 파악하여
lib\ext 디렉토리에 오라클 설치경로(C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib)에 있는'ojdbc6_g.jar'
파일을 복사하면 자동으로 드라이버가 클래스 패스에 추가된다.
* Select 쿼리 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | @WebServlet("/select") public class SelectServlet extends HttpServlet { private static final long serialVersionUID = -2214077158028938610L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String driver = "oracle.jdbc.OracleDriver"; // 오라클 드라이버 클래스 파일명 String url = "jdbc:oracle:thin:@localhost:1521:XE"; // 오라클 위치,포트번호,DB정보 String id = "root"; // 오라클 접속 계정 String password = "1234"; // 오라클 접속 비밀번호 Connection con = null; Statement stmt = null; ResultSet rs = null; String result = null; try { Class.forName(driver); // 드라이버 로딩 con = DriverManager.getConnection(url, id, password); // DB 커넥션 맺기 String sql = "select eid, ename, salary from emp"; stmt = con.createStatement(); rs = stmt.executeQuery(sql); while (rs.next()) { String eid = rs.getString("eid"); String ename = rs.getString("ename"); int salary = rs.getInt("salary"); result = eid + " " + ename + " " + salary; } } catch (Exception e) { e.printStackTrace(); } finally { try { // 자원 반납 if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } catch (Exception e) { e.printStackTrace(); } } request.setAttribute(result, result); response.setCharacterEncoding("UTF-8"); request.getRequestDispatcher("/select.jsp").forward(request, response); } } | cs |
파일 및 데이터베이스는 외부 자원이기 때문에 사용한 후에는 반드시 자원을 해제시켜야 된다. 해제시킬 때에는 사용한 역순으로 해제시킨다.
예외 발생 여부에 관계없이 항상 자원을 반납해야하므로 finally 문에 코드를 구현하도록 한다.
* Update 쿼리 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | @WebServlet("/update") public class UpdateServlet extends HttpServlet { private static final long serialVersionUID = -2214077158028938610L; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String eid = request.getParameter("eid"); String ename = request.getParameter("ename"); int salary = Integer.parseInt(request.getParameter("salary")); String driver = "oracle.jdbc.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:XE"; String id = "root"; String password = "1234"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName(driver); con = DriverManager.getConnection(url, id, password); String sql = "update emp set ename = ?, salary = ? where eid = ?"; pstmt = con.prepareStatement(sql); pstmt.setString(1, ename); pstmt.setInt(2, salary); pstmt.setString(3, eid); int count = pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (con != null) con.close(); } catch (Exception e) { e.printStackTrace(); } } response.setCharacterEncoding("UTF-8"); response.sendRedirect("/select?eid=" + eid); } } | cs |
요청 포워딩 처리 (0) | 2017.06.12 |
---|---|
어노테이션을 이용한 초기화파라미터/리스너/필터 등록하기 (0) | 2017.06.06 |
서블릿 한글 깨짐 방지 (0) | 2017.06.01 |
어노테이션을 이용한 Servlet Project 시작하기 (0) | 2017.06.01 |