Servlet : Servlet용어정리, model1과 model2(MVC구조) 개발방식 비교

Servlet : Servlet용어정리, model1과 model2(MVC구조) 개발방식 비교

Servlet기초

  • JavaEE : JSP/Servlet등등의 정보를 포함하는 JavaSE
  • JSP(Java Server Page) : 클라이언트의 요청을 처리하기위해서 동적 콘텐츠를 생성하기 위한 기술
    • 동적 콘텐츠를 생성하기 위해서는 jsp 버전이 중요하다
    • 세트 JSP2.2/Servlet3.0
    • 세트 JSP2.3/Servlet3.1 => tomcat8.x
  • JSP실행순서 : .jsp -> .java(Servlet) -> .class
  • JSP파일이 Servlet파일로 변하는 방법
    1. 클라이언트 요청시 jsp파일은 서블릿으로 변환.
    2. jsp스크립틀릿 <%%> 코드가 변경됨 -> Servlet클래스 아래의 service()메서드에 들어감.
    3. jSP표현식 <%= %> -> Servlet클래스 아래의 service()메서드안에 out.println()로 표시됨.
    4. jsp선언문 <%! %> -> Servlet 멤버 메서드로 변환.
    5. html태그 -> Servlet클래스 아래의 service()메서드안에 out.write()로 표시됨
    6. jsp page디렉티브 –서블릿변환–> 서블릿변환시 참고용으로 사용
    7. 확인 할수있는 위치 : D:\workspace_jsp7\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost
  • Servlet : 자바에서 웹 개발을 하기 위한 작은 기술
    • 작은 서버 프로그램 ex) Contoller
    • 사용자의 요청을 멀티 쓰레딩 방식으로 처리가능.
    • 동적 데이터 처리가능.
  • Servlet 사용방법
    1. javax.servlet.Servlet 인터페이스를 구현.
    2. 1번을 따로 구현할 필요가 없거나 구현이 힘들 경우 javax.servlet.http.HttpServlet을 구현.
      • 실무에서는 1번은 거의 사용하지않고 2번부터 바로 시작함.
    3. doGet()/doPost()메서드를 구현(오버라이딩) -> 파라미터로 javax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletResponse를 순서대로 사용.
    4. 예외처리: IOException, ServletException 두 개 처리.
    5. web.xml파일에 매핑처리 but 서블릿 3.0이후부터는 대체해서 @WebServlet을 사용가능.
    6. 해당 파일을 지정위치에 놓고 실행.
  • 서블릿 Life Cycle
    1. init() : 최초 한 번만 실행 = 서블릿 로딩
    2. protected void service(HttpServletRequest arg0, HttpServletResponse arg1){} 생성.
      • 여기서 doGet() 또는 doPost()를 호출헤야한다.
    3. doGet() 또는 doPost(HttpServletRequest req, HttpServletResponse resp){} 호출.
    4. 재호출(새로고침) >service()와 doGet() 또는 doPost()만 반복된다.
    5. 내용 변경 후 페이지 리로딩시 destroy()호출
    6. destroy() : 파일이 수정되면 자동으로 destroy함 > 새로 시작시 init() 재실행.
    7. 다시 1번으로 돌아가서 시작. = 라입




Servlet 사용방법 기초예시

  • MyServlet.java생성
  • 메서드 오버라이딩 : init(), service()와 doGet() 또는 doPost(), destroy() 오버라이딩
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
public class MyServlet extends HttpServlet{
@Override
public void init() throws ServletException {
System.out.println("서블릿 초기화");
}

@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
System.out.println("서비스(Http)");
//doGet(arg0, arg1);
}

/* @Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("서비스(Servlet)");
//doGet(arg0, arg1); 에러
service(arg0, arg1);
}*/

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("서블릿 doGet()");
//doGet에서 doPost로 변경
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("서블릿 doPost()");
}

//.java파일이 수정되면 자동으로 삭제하고 init()초기화 실행
@Override
public void destroy() {
System.out.println("서블릿 destroy");
}

}//end of class
  • web.xml코드 추가
1
2
3
4
5
6
7
8
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.itwillbs.servlet.MyServlet</servlet-class> //실제 파일 위치
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/MyServlet.com</url-pattern>
</servlet-mapping>




model1과 model2 개발방식 비교

model1 개발방식: XXXForm.jsp, XXXPro.jsp

  • jsp페이지에서 모든 동작을 처리(html, css, db, 로직).
  • 장점: 개발속도가 빠름.
  • 단점: 유지보수가 힘듬.
  • php페이지

https://lkhlkh23.tistory.com/132

model2 개발방식 (MVC구조/패턴):

  • MVC 패턴 :
    • Model: 비즈니스 로직처리(DB처리). 보통 .java로 만들어짐.
    • View: 화면 처리 로직(화면). 보통 .jsp로 만들어짐.
    • Controller: Model과 View를 연결. 이게 Servlet임.
  • 요청이 들어오면 Controller가 Model로 갈지 View로 갈지 판단 후 실행.
  • 장점: 유지보수에 특화된 개발방식
    • 디자인파트와 개발(비즈니스로직)파트를 분리해서 동시 개발이 가능.
  • 단점 : 구조가 복잡, 코드양이 많음, 시간이 오래걸림.

https://lkhlkh23.tistory.com/132




Model2 개발 페이지 이동 구조

  • 일반적으로 많이 사용되는 4가지조합 (절대적인 페이지이동방식은 아님)
  1. 정보가 없어서 정보를 입력하는 페이지 요청.
    • 예시 : 회원가입창 열기
    • 가상 주소(.me) -> 실제페이지(.jsp)로 페이지이동
    • 이때 사용하는 방법
      1. 컨트롤러 : 주소 처리
      2. ActionForward사용해서 false-forward방식으로 이동
  2. 정보를 받아서 처리한 뒤 페이지를 이동.
    • 예시 : 회원가입을 처리하고 로그인폼페이지로 이동
    • 실제페이지(.jsp) -> Action -> DAO -> DB -> Action -> 가상 주소(.me)로 이동.
    • 따라서 Action 인터페이스를 구현한 객체를 사용해서 각각의 동작을 처리해야함.
    • 처리 후 페이지 이동은 ActionForward사용해서 true-forward방식(sendRedirect)으로 이동
  3. 정보를 처리한 뒤 자바스크립트를 사용하여 페이지를 이동.
    • 예시 : 로그인 아이디 비번일치 여부.
    • response객체 사용(contentType, PrintWriter 상용함) -> 출력스트림객체를 사용하여 화면에 js코드를 출력
    • 주의사항 : js이용한 이동은 컨트롤러로 전달되는 forward객체의 정보가 null이어야한다. 안그러면 충돌남.
  4. 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페이지로 전환