Servlet : Servlet용어정리, model1과 model2(MVC구조) 개발방식 비교
Servlet기초
- JavaEE : JSP/Servlet등등의 정보를 포함하는 JavaSE
- JSP(Java Server Page) : 클라이언트의 요청을 처리하기위해서 동적 콘텐츠를 생성하기 위한 기술
- JSP실행순서 :
.jsp
->.java
(Servlet) ->.class
- JSP파일이 Servlet파일로 변하는 방법
- 클라이언트 요청시 jsp파일은 서블릿으로 변환.
- jsp스크립틀릿 <%%> 코드가 변경됨 -> Servlet클래스 아래의 service()메서드에 들어감.
- jSP표현식 <%= %> -> Servlet클래스 아래의 service()메서드안에 out.println()로 표시됨.
- jsp선언문 <%! %> -> Servlet 멤버 메서드로 변환.
- html태그 -> Servlet클래스 아래의 service()메서드안에 out.write()로 표시됨
- jsp page디렉티브 –서블릿변환–> 서블릿변환시 참고용으로 사용
- 확인 할수있는 위치 :
D:\workspace_jsp7\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost
- Servlet : 자바에서 웹 개발을 하기 위한 작은 기술
- 작은 서버 프로그램 ex) Contoller
- 사용자의 요청을 멀티 쓰레딩 방식으로 처리가능.
- 동적 데이터 처리가능.
- Servlet 사용방법
javax.servlet.Servlet
인터페이스를 구현.- 1번을 따로 구현할 필요가 없거나 구현이 힘들 경우
javax.servlet.http.HttpServlet
을 구현.- 실무에서는 1번은 거의 사용하지않고 2번부터 바로 시작함.
- doGet()/doPost()메서드를 구현(오버라이딩) -> 파라미터로
javax.servlet.http.HttpServletRequest
와javax.servlet.http.HttpServletResponse
를 순서대로 사용. - 예외처리: IOException, ServletException 두 개 처리.
web.xml
파일에 매핑처리 but 서블릿 3.0이후부터는 대체해서 @WebServlet을 사용가능.- 해당 파일을 지정위치에 놓고 실행.
- 서블릿 Life Cycle
- init() : 최초 한 번만 실행 = 서블릿 로딩
- protected void service(HttpServletRequest arg0, HttpServletResponse arg1){} 생성.
- 여기서 doGet() 또는 doPost()를 호출헤야한다.
- doGet() 또는 doPost(HttpServletRequest req, HttpServletResponse resp){} 호출.
- 재호출(새로고침) >service()와 doGet() 또는 doPost()만 반복된다.
- 내용 변경 후 페이지 리로딩시 destroy()호출
- destroy() : 파일이 수정되면 자동으로 destroy함 > 새로 시작시 init() 재실행.
- 다시 1번으로 돌아가서 시작. = 라입
Servlet 사용방법 기초예시
MyServlet.java
생성- 메서드 오버라이딩 : init(), service()와 doGet() 또는 doPost(), destroy() 오버라이딩
1 | public class MyServlet extends HttpServlet{ |
web.xml
코드 추가
1 | <servlet> |
model1과 model2 개발방식 비교
model1 개발방식: XXXForm.jsp, XXXPro.jsp
- jsp페이지에서 모든 동작을 처리(html, css, db, 로직).
- 장점: 개발속도가 빠름.
- 단점: 유지보수가 힘듬.
- php페이지
model2 개발방식 (MVC구조/패턴):
- MVC 패턴 :
- Model: 비즈니스 로직처리(DB처리). 보통
.java
로 만들어짐. - View: 화면 처리 로직(화면). 보통
.jsp
로 만들어짐. - Controller: Model과 View를 연결. 이게
Servlet
임.
- Model: 비즈니스 로직처리(DB처리). 보통
- 요청이 들어오면 Controller가 Model로 갈지 View로 갈지 판단 후 실행.
- 장점: 유지보수에 특화된 개발방식
- 디자인파트와 개발(비즈니스로직)파트를 분리해서 동시 개발이 가능.
- 단점 : 구조가 복잡, 코드양이 많음, 시간이 오래걸림.
Model2 개발 페이지 이동 구조
- 일반적으로 많이 사용되는 4가지조합 (절대적인 페이지이동방식은 아님)
- 정보가 없어서 정보를 입력하는 페이지 요청.
- 예시 : 회원가입창 열기
- 가상 주소(.me) -> 실제페이지(.jsp)로 페이지이동
- 이때 사용하는 방법
- 컨트롤러 : 주소 처리
- ActionForward사용해서 false-forward방식으로 이동
- 정보를 받아서 처리한 뒤 페이지를 이동.
- 예시 : 회원가입을 처리하고 로그인폼페이지로 이동
- 실제페이지(.jsp) -> Action -> DAO -> DB -> Action -> 가상 주소(.me)로 이동.
- 따라서 Action 인터페이스를 구현한 객체를 사용해서 각각의 동작을 처리해야함.
- 처리 후 페이지 이동은 ActionForward사용해서 true-forward방식(sendRedirect)으로 이동
- 정보를 처리한 뒤 자바스크립트를 사용하여 페이지를 이동.
- 예시 : 로그인 아이디 비번일치 여부.
- response객체 사용(contentType, PrintWriter 상용함) -> 출력스트림객체를 사용하여 화면에 js코드를 출력
- 주의사항 : js이용한 이동은 컨트롤러로 전달되는 forward객체의 정보가 null이어야한다. 안그러면 충돌남.
- DB에서 정보 가져와서 페이지 출력
- 예시 : 회원정보보기
- 가상주소(.me) -> Action -> DAO -> DB -> Action -> 실제주소(.jsp)
- 따라서 Action 인터페이스를 구현한 객체를 사용해서 각각의 동작을 처리해야함.
- 처리 후 페이지 이동은 ActionForward사용해서 false-forward방식(sendRedirect)으로 이동
Model2 구조
./Main.me
(가상주소) =>./현재프로젝트명(http://localhost:8088/model2JSP7)
./member/main.jsp
(실제주소) =>./WebContent~
Controller.java
에서 주소처리할때- DB를 사용하려면
action.java
생성 -> forward(보이는 화면은.jsp
주소는.me
)로 페이지처리 - DB필요없으면 바로 forward(보이는 화면은
.jsp
주소는.me
)로 페이지처리- DB정보가 필요없기때문에 바로 view페이지로 전환
- DB를 사용하려면