MIME-TYPE

MIME-TYPE는 톰켓 컨테이너에서 미리 설정해 놓은 데이터 종류들을 말한다.

서버에서 자바의 I/O 스트림 클래스를 이용하여 웹 브라우저로 데이터를 전송할 때 지정하는 형식이다.

ex.) HTML로 전송할 때 : text/html 와 같은 형식이다.


서블릿의 응답처리 예제

서블릿에서 응답처리를 할 때는 다음과 같다.

  1. MINE-TYPE을 지정한다.
  2. 자바 I/O 스트림을 이용해 데이터를 출력할 PrintWriter객체를 생성한다.
  3. 출력 데이터를 HTML형식으로 작성하고 PrintWriter객체를 이용하여 데이터를 출력한다.
protected void doGet(HttpServletRequest request, HttpServletResponse response){
    request.setCharacterEncoding("utf-8"); // utf-8형식으로 지정
    response.setContentTpye("text/html;charset=utf-8"); // MINE-TYPE을 지정해준다
    PrintWriter out = response.getWriter(); // PrintWriter 객체를 이용하여 I/O로 데이터를 출력하기 위해 객체를 생성한다.
    
    //...
    //...
    out.print(data); // I/O 스트림으로 데이터를 출력
    
}

서블릿에서 비지니스 로직 처리방법

비지니스 로직이란?

  • 서버가 클라이언트로부터 요청을 받을 때 그 요청에 대해 작업을 수행하는 것을 의미한다.
  • 대부분의 비지니스 처리 작업은 데이터 베이스 연동 관련 작업이다.

DB(DataBase)를 연결하기 위해서는 MemberDAOMemberVO클래스가 사용이된다.

서블릿으로 회원정보를 조회할 때의 과정을 다음 그림과 같다.

  1. 웹브라우저가 서블릿에게 회원 정보를 요청한다.
  2. MeberServlet이 요청을 받은후 MeberDAO 객체를 생성하여 listMembers() 메서드를 호출한다.
  3. listMembers()에서 다시 connDB()매서드를 호출하여 데이터베이스와연결하고 회원정보를 조회한다.
  4. 조회된 회원정보를 MemberVO속성에 설정하고 ArrayLIst에 정보를 저장한다.
  5. 저장 된 정보를 MemberServlet으로 반환하고 저장된 정보를 차례대로 가져와서 HTML태그의 문자열로 만든다
  6. 만들어진 HTML 태그를 웹 브라우저로 전송해서 회원정보를 출력한다.
// MemberServlet 클래스 작성
@webServlet("/Member")
protected class MemberServlet extends HttpServlet{
    
    //doGet() 매소드
    protected class doGet(HttpServletRequest request, HttpServletResponse response){
        response.setContenType("text/html;charset=utf-8");
        printWrite out = response.getWriter();
        
        MemberDAO dao = new MemberDAO(); // DAO 객체 생성
        LIst<MemberVO> list = dao.listMembers(); // listMembers() 메서드를 사용하여 회원정보조회
        //...
    }
}


//MemberDAO 클래스 작성
public class MemberDAO{
    private Statement stmt;
    private Connection con;
    //...
    
    //listMembers() 메서드 구현
    public List<MemberVO> listMembers(){
        try{
            connDB(); // DataBase연결
            String query = "select * from t_member"; // 쿼리문으로 SQL조회할 때 사용
            ResultSet rs = stmt.executeQuery(query); // SQL문을 사용하여 회원정보를 조회
            while(rs.next()){
                String id = rs.getString("id");
                String pwd = rs.getString("pwd");
                //...

                MemberVO vo = new MemberVO(); // VO 객체 생성
                vo.setID(id);
                vo.setPwd(pwd);
                //...
                list.add(vo); // vo 객체를 ArrayLIst에 저장한다.
            }
            rs.close();
            stmt.close();
            con.close();
        } catch (Exception e){
        e.printStackTrace();
    }
    return list; // MemberVO 객체를 저장한 ArrayLIst를 반환한다.
}
    
	// connDB() 메서드 구현 DB연결
	private void connDB(){
        try{
            Class.forName(driver);
            System.out.println("Oracle 드라이버 로딩 성공");
            con = DriverManager.getConnection(url, user, pwd);
            System.out.println("Connection 생성 성공");
            stmt = con.createStatement();
            System.out.println("Statement 생성 성공");
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}


// MemberVO 클래스 작성
public class MemberVO{
    private String id;
    private String pwd;
    //...
    
    
    //MemberVO 생성자
    public MemberVO(){
        System.out.println("MemberVO 생성자 호출");
    }
    
    public String getId(){
        return id;
    }
    public String setId(String id){
        this.id = id;
    }
    
    public String getPwd(){
    	return pwd;    
    }
    public String setPwd(String pwd){
        this.pwd = pwd;
    }
    //...
    
    
}

다음과 같이 이러한 클래스들을 이용하여 비지니스를 처리해준다.

 

 

이 글은 자바 웹을 다루는 기술에서 참고하였습니다

 

 

'Spring > Servlet' 카테고리의 다른 글

[Java/Servlet] 서블릿이란?  (0) 2021.08.17

서블릿이란?

서블릿은 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스 이다.


서블릿의 동작 순서

  1. 클라이언트웹서버에 요청을 한다.
  2. 웹서버웹 어플리케이션 서버(WAS)에게 위임을 한다.
  3. 웹 어플리케이션 서버(WAS)는 각 요청에 해당하는 서블릿을 실행한다
  4. 서블릿은 요청에 대한 기능을 수항 한 후 결과를 반환하여 클라이언트에 전송한다.

서블릿의 계층 구조


서블릿의 생명주기

생명주기 단계 호출 매서드 특징
초기화 init() 서블릿 요청시 한번만 호출 된다
서블릿 생성시 초기화 작업을 주로 한다.    
작업 수행 doGet()  
doPost() 서블릿 요청 시 매번 호출 된다  
실제로 클라이언트의 요청 작업을 여기서 수행한다.    
종료 destroy() 서블릿이 기능을 수행하고 메모리에서 소멸 될 때 호출이 된다.
서블릿의 마무리 작업을 주로 수행한다.    

서블릿 매핑하기

서블릿을 매핑하는 방법은 총 2가지가 있다.

  1. 각 프로젝트에 있는 web.xml에서 <servlet>, <servlet-mapping> 태그를 이용한다.
  2. 애너태이션(@WebServlet('/'))을 사용한다.

이중 web.xml에서 사용하는 방법은 매핑 할것들이 많아진다면 복잡해진다는 단접이 있다

이를 해결하기 위해서는 @WebServlet 애너테이션을 사용하여 표시하면 훨씬 가독성이 좋아진 다는 장점이 있다.

방법은 클래스 위에 @WebServlet 애너테이션을 붙여주거나 servlet 파일을 만들 때 설정하면 된다.

주의점으로는 반드시 HttpServlet 클래스를 상속받은 상태여야 한다.

@webServlet("/login")
public class LoginServlet extends HttpServlet{
    //...
}

이 때 중복된 매핑을 할시 오류가 나타남으로 주의해야 한다.


서블릿의 동작 과정

  1. 클라이언트 에서 http://localhost:8080/project/login으로 요청
  2. login이 메모리에 존재하는지 확인
  3. login을 메모리에 로드
  4. init()을 호출
  5. doGet()또는 doPost()를 호출
  6. 결과 응답

으로 동작이 진행된다. 만약 진행이되고 난 뒤 다른 클라이언트에서 또 login을 요청한다면

이 때는 init()이 호출이 되지 않는 다는 것을 볼 수 있다.

왜냐하면 첫번째 클라이언트에 의해 이미 메모리에 로드가 되어있기 때문에 doGet()또는 doPost()가 로드가 된다.

이때 서블릿에서 값을 가져 올 때는 request에서 getParmeter()를 사용해 값을 가져 올 수 있다.


서블릿의 응답 처리 방법

서블릿이 처리한 결과를 클라이언트에게 응답하기 위해서는 다음과 같다.

  1. doGet()이나 doPost()매서드 안에서 처리한다.
  2. javax.servlet.http.HttpServletResponse객체를 사용하여 응답을 처리한다,
  3. setContentType()을 이용해 클라이언트에게 전송할 데이터 종류를 지정한다.
  4. 클라이언트와 서블릿을 통신은 자바의 I/O스트림을 사용하여 응답을 처리한다.

웹 브라우저에서 서블릿으로 데이터 전송하는 방법

GETPOST방식을 사용하여 전송할 수 있다.

HTTP에서는 GETPOST말고도 다른 것들이 많이 존재한다.

GET과 POST의 차이점

  • GET 방식
    • GET방식으로 데이터를 전송 할 때는 주소창에 name=value형태로 전송한 것이 보이기 때문에 보안에 취약하다.
    • 전송할 수 있는 데이터가 최대 255자이다.
    • doGet을 이용해서 서블릿에서 데이터를 처리한다.
  • POST 방식
    • 서블릿에 데이터를 전송할때 TCP/IP 프로토콜 데이터의 body 영역에 숨겨진 채 전송을 하므로 보안에 유리하다.
    • 전송할 수 있는 데이터가 무제한이다.
    • 서블릿에서 다시 가져오는 작업을 해야해서 GET보다 느리다
    • doPost()를 이용해 서블릿에서 데이터를 처리한다.

이를 둘이 동시에 사용하기 위해서는 doHandle()이라는 매서드를 doGet()doPost()에서 호출하여 doHandle()에서 한꺼번에 처리한다.

 

 

이 글은 자바 웹을 다루는 기술 에서 참고하였습니다

 

'Spring > Servlet' 카테고리의 다른 글

[Java/Servlet] 서블릿의 비지니스 로직 처리  (0) 2021.08.18

+ Recent posts