안녕하세요 이번에는 JSP의 내장객체에 대해서 심층적으로 이해해 보는 포스팅을 준비했습니다.
JSP의 내장객체는 자바에서 다양한 인터페이스 또는 메소드등 이미 만들어진 객체들을 가져와 쓸 수 있는 기능이 있는 것을 알고 계실텐데요. 대표적으로 java.lang은 자바내에서 기본적으로 import돼 있기 때문에 System.out.println등의 메소드를 가져다 쓸 수 있는 것입니다. 이와같이 JSP내에도 기본적으로 제공하는 9개의 내장객체가 있습니다.
내장객체 |
리턴 타입(Return Type) |
설명 |
request |
javax.servlet.http.HttpServletRequest 또는 javax.servlet.ServletRequest |
웹 브라우저의 요청 정보를 저장하고 있는 객체 |
response |
javax.servlet.http.HttpServletResponse 도는 javax.servlet.ServletResponse |
웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체 |
out |
javax.servlet.jsp.JspWriter |
JSP페이지 출력할 내용을 가지고 있는 출력 스트림 객체 |
session |
javax.servlet.http.HttpSession |
하나의 웹 브라우저 내에서 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체 |
application |
javax.servlet.ServletContext |
웹 어플리케이션 Context의 정보를 저장하고 있는 객체 |
pageContext |
javax.servlet.jsp.PageContext |
JSP페이지 대한 정보를 저장하고 있는 객체 |
page |
java.lang.Objext |
JSP페이지를 구현한 자바 클래스 객체 |
config |
javax.servlet.ServletConfig |
JSP페이지에 대한 설정정보를 저장하고 있는 객체 |
exception |
java.lang.Throwable |
JSP페이지에서 예외가 발생한 경우에 사용되는 객체 |
이와 같은 내장객체를 이용해서 JSP만을 이용해서 가져온 데이터를 가져오거나 집어 넣을수도 있습니다. 그렇지만 이 후에는 JSP에서도 자바빈즈(JSP페이지의 로직 부분을 분리해서 코드를 재사용함으로써 프로그램의 작성기간이 단축되고, 이미 사용되던 코드이므로 안정성이 보장되며 유지/보수가 쉬움) MODEL1과 MODEL2방식으로 나누어야하는데 이러한 과정을 거치면서 다양한 프레임워크또는 라이브러리를 이용해서 java와 HTML의 언어를 나눌 수 있습니다.
일단 JSP의 내장객체만을 이용해서 데이터를 입출력하기 위해서는 request와 respoense의 객체가 필요합니다. 이 객체안에는 또 수많은 메소드가 있습니다. 간략하게 자주 사용하는 메소드만 몇가지 정리해볼께요.
request객체 메소드 : 리턴타입 |
설명 |
getParameter(name) : String |
파라메터 변수 name에 저장된 변수 값을 얻어내는 메소드로, 파라메터 변수 name에 해당하는 변수명이 없으면 null값을 리턴 |
getParameterValues(name) : String[] |
파라메터 변수 name에 저장된 모든 변수 값을 얻어내는 메소드로, 이 때 변수의 값은 String 배열로 리턴된다. checkbox에서 주로 사용 |
getParameterNames() : Enumeration |
요청에 의해 넘어오는 모든 파아미터 변수를 java.util.Enumeration 타입으로 리턴 한다. 변수가 가진 객체들을 저장해야 하기 때문에 컬렉션인 Enumeration 타입을 사용 |
getRemoteAddr() : String |
웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴 |
response객체 메소드 |
설명 |
void setHeader(name, value) |
헤더정보의 값을 수정하는 메소드로, name에 해당하는 헤더정보를 value값으로 설정한다. |
void setContentType(type) |
웹 브라우저의 요청의 결과로 보일 페이지의 contentType을 설정한다. |
void sendRedirect(url) |
페이지를 이동시키는 메소드로, url로 주어진 페이지로 제어가 이동한다. |
이러한 기능들을 이용하면 데이터베이스안에 각각의 값들을 저장할 수 있는 간단한 회원가입창을 만들 수 있습니다!.. 예제를 보여드리고 싶지만 코드나 너무나 길기 때문에 핵심적인 코드들만 보여드리고 그 기능(회원가입_아무 예외처리 없음)을 예제로 보여드리겠습니다.
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <div id="mainForm"> <h4>회원가입</h4> <form action="memInsForwardPro.jsp" method="post"> <table class="joinForm"> <tr> <th colspan="2">회원가입 [Forward] </th> </tr> <tr> <th>Name</th> <td><input type="text" id="sname" name="mem_name" autofocus></td> </tr> <tr> <th>ID</th> <td><input type="text" id="sname" name="mem_id" ></td> </tr> <tr> <th>PASSWD</th> <td><input type="text" id="sname" name="mem_pwd" ></td> </tr> <tr> <th>Phone</th> <td><input type="text" id="sname" name="mem_phone" ></td> </tr> <tr> <th>Email</th> <td><input type="text" id="sname" name="mem_email" ></td> </tr> <tr> <th>Addr</th> <td><input type="text" id="sname" name="mem_addr" ></td> </tr> <tr> <th colspan="2"><input type="submit" value="가입" id="jButton"> <input type="reset" value="취소" id="cButton"></th> </tr> </table> </form> </div> </body> </html> //------------------------------------------------------------------------------------ <%@page import="memBeanPak.DbSet"%> <%@page import="java.sql.Connection"%> <%@page import="java.sql.Statement"%> <%@page import="java.sql.DriverManager"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //오라클 접속을 위한 방법 Connection conn; Statement stmt; conn = DbSet.getConnect(); stmt = conn.createStatement(); //memJoin의 name값을 각각의 멤버변수에 저장 int su = 0; request.setCharacterEncoding("UTF-8"); String vName, vId, vPwd, vPhone, vEmail, vAddr; vName = request.getParameter("mem_name"); vId = request.getParameter("mem_id"); vPwd = request.getParameter("mem_pwd"); vEmail = request.getParameter("mem_email"); vPhone = request.getParameter("mem_phone"); vAddr = request.getParameter("mem_addr"); //DML 조작 String sql = "insert into memberT01 values('" + vName + "', '" + vId + "', '" + vPwd + "', '" + vEmail + "', '" + vPhone + "', '" + vAddr + "')"; //executeUpdate는 int값을 반환하기 때문에 su의 값의 변화로 데이터삽입 확인 su = stmt.executeUpdate(sql); //DB의 값이 저장되는지 확인 if (su != 0) { %> <script> alert("<%= vId%>" + "님 회원가입 성공!!!"); location.href = "memController.jsp"; </script> <% } else { %> <script> alert('회원가입 실패'); location.href = "memInsForward.jsp"; </script> <% } %> //----------------------------------------------------------------------------------------- package memBeanPak; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DbSet { public static Connection getConnect() { String url = "jdbc:oracle:thin:@localhost:1521:XE"; Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(url, "hr", "hr"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } } | cs |
일단 총 3가지의 코드가 있습니다. 이렇게 처음은 기본적인 HTML 의 회원가입 폼입니다. 그리고 2번째가 회원가입 폼으로 입력된 name값들을 저장해서 3번째 자바의 DB를 연결하는 것인데.. 이 부분에서 DB를 연결하는 것을 jsp에 넣어도 되지만 캡슐화라는 개념을 넣기 위해서 일부러 DB가 연동되는 부분은 빼 놓은 것입니다. 물론 DB연동을 하기 위해서는 미리 각각의 테이블도 만드시는 것을 잊으면 안됩니다. 여기서는 request.getParameter라는 메소드를 이용해서 각각의 받아온 값들은 변수에 저장한 뒤 그 변수의 값을 DB에 넣은 것입니다. 이와 같은 방법으로 DB의 DML문을 이용해서 각각의 값들을 넣거나 만들수도 있으며 다양한 응용이 가능합니다 :)