JSP & Servlet
[ Servlet ] 나만 보는 간단정리 part2
hanjuCoding
2024. 7. 31. 11:41
Servlet이 톰캣 내부에서 동작하는 과정
회색박스는 톰캣 , 순서: 클라이언트 → 톰캣 → 서블릿 → DB → 서블릿 → 톰캣 → 클라이언트
호스트
ex) xxx.naver.com
→ ‘xxx’를 호스트라고 한다.
<body>
<img src='/thisisforstudy/img/google.png'>
</body>
이미지는 img/google.png 위치에 있다. but 앞에 project이름 thisisforstudy를 붙여줘야함.
→ tomcat 더블클릭 →web modules 창에서 path를 edit 해준다 . ex)/pro05 → / 로 수정
그럼
<body>
<img src='/img/google.png'>
</body>
로 코드 작성해도댐
제일 많이 쓰는방식: jsp 코드 달아주기
<img src="<%=request.getContextPath() %>/img/google.png">
//contextPath가 무엇이던간에 이어준다.
request 객체 (요청)
- .getSession()
- .getParameter() : String타입으로 객체를 받음
- .getParameterValues() : 객체를 String배열로 받음
- .getAttribute()
- .setAttribute()
- getParameterNames() : enum타입으로 객체의 속성명을 받음 (모든 속성명)
response 객체 (응답)
- .sendRedirect()
WebServlet 어노테이션
@WebServlet 어노테이션으로 Servlet 매핑 코드 대체하기 web.xml 파일에 Servlet 매핑 코드를 작성하지 않아도 된다.
@WebServlet(value= {"/third","/thrid2"})
public class ThirdServlet extends HttpServlet{
//,,,
}
DB연동
- D:\java\workspace\pro07\src\main\webapp\WEB-INF\lib 경로에 ojdbc.jar 파일 넣기
Statement vs PreparedStatement
- Statement : SQL문 그대로 실행
- PreparedStatement : SQL미리 준비시켜놓고, 특정값만 삽입해서 실행
PreparedStatement가 훨씬 빠르다. (문법도 간단함) ⇒ ‘ ? ‘ 쓰는놈
//psmt ex
String query = "insert into t_member";
query += "(id,pwd,name,email)";
query += "values(?,?,?,?)";
System.out.println("prepareStatement:" +query );
servlet과 DB연동 과정
Severs / context.xml 수정
→프로그램을 실행시킬때마다 connDB() 메서드를 실행시키면 속도가 떨어진다
<Resource
name = "jdbc/oracle"
auth = "Container"
type = "javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="testuser"
password="user1234"
maxActive="50"
maxWait="-1"
/>
//context.xml에 <Context>문 안에 추가
doGet(), doPost() 하나로 묶기
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//여기에서 동작
}
SQL꿀팁
//ex)
query = select * from t_member where 1=1;
//1번검색
query += 'and where name like "" ';
//2번검색
query += 'and where ID like "" ';
//3번검색
query += 'and where email like "" ';
//쿼리에 어떤게 들어올지 모르니까 전부 다 and를 해주고, 원래 query에 where 1=1을 해주어
//뒤에 어떤애가 와도 상관없게 한다.