Servlet(서블릿) 은 Java 언어를 기반으로 하는 웹 애플리케이션 개발을 위한 기술이다.. Servlet은 동적인 웹 페이지를 생성하거나, 데이터베이스와 상호 작용하며 웹 어플리케이션의 백엔드 로직을 구현하는 데 사용된다. Servlet은 Java EE(Enterprise Edition) 스펙의 일부이며, Java의 표준 API에 속한다.
WEB-INF 파일 안에 있는 lib 에 jar 파일 넣어주기
이미 구축되어 있는 서버에 들어가 보면 server.xml 이 뜬다.
<Resource auth="Container"
type="javax.sql.DataSource"
name="jdbc/oracle"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
password="fin01"
username="fin01"
maxActive="10"
maxIdle="5"
maxWait="-1"
/>
DB 관련 명령어 추가해 주기.
이런 식으로 context 태그 안에 써 줘야 하는데 원래는 context 태그가 /> 식으로 닫혀 있으므로 <Context>DB명령어</Context>
이렇게 맞춰 줘야 한다.
package member;
import java.sql.*;
import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class MemberDAO {
Connection con;
PreparedStatement ps;
ResultSet rs;
static DataSource ds;
static {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
ds = (DataSource)envContext.lookup("jdbc/oracle");
}catch(NamingException e) {
e.printStackTrace();
}
}
}
쉽게 보고자 작동하고 있는 MemberDAO 를 가져왔다.
여기서 중요한 점은 이전처럼 더이상 DB를 poolBean으로 떼왔다 반납하는 것이 아닌 톰캣에서 직접 제공하는 poolbean 을 사용하고 있기 때문에 DataSource 클래스로 이용이 가능하다는 것이다. jdbc/oracle 이라는 이름을 미리 정해 뒀기 때문에 그러한 방식을 따른다.
그렇다면 메소드는 어떻게 바뀌어야 할까.
public int insertMember(MemberDTO dto) throws SQLException {
try {
con = ds.getConnection();
String sql = "insert into member values"
+ "(member_seq.nextval, ?,?,?,?,?,?,?,?,?,sysdate)";
ps = con.prepareStatement(sql);
ps.setString(1, dto.getName());
ps.setString(2, dto.getId());
ps.setString(3, dto.getPasswd());
ps.setString(4, dto.getSsn1());
ps.setString(5, dto.getSsn2());
ps.setString(6, dto.getEmail());
ps.setString(7, dto.getHp1());
ps.setString(8, dto.getHp2());
ps.setString(9, dto.getHp3());
int res = ps.executeUpdate();
return res;
}finally {
if (ps != null) ps.close();
if (con != null) con.close();
}
}
insert 멤버 메서드로 보면 ds.getConnection() 을 통해 톰캣에서 제공하는 디비 열기로 들어가는 과정을 볼 수 있고, con을 닫아 반납하는 것을 볼 수 있다.
지금까지 jsp 에서 우리는 유효성 검사를 항상 해왔다.
왜? 만약 사용자가 url 을 타고 회원 가입 페이지에 들어왔을 경우 인증 받지 않은 DB 침입을 막을 수 없기 때문이다.
WEB-INF
파일
WEB-INF
안에 들어있는 JSP 파일은 URL 을 통한직접적인 접근
이 불가능하다.
이렇게 허용된 접근만 받을 수 있는 파일로 넣어 줘서 효율적으로 jsp 파일을 관리할 수 있다.