본문 바로가기

Front End

서블릿


**HttpServlet * JSP(Java Server Page)


1. HttpServlet

= URL을 이용해서 호출할 수 있는 자바 클래스

= 이 클래스는 웹 컨테이너가 관리

= 매핑된 URL에 해당하는 요청이 처음 왔을 때 인스턴스를 생성하고 요청을 처리합니다.

= 두번째 요청부터는 앞에서 만든 인스턴스를 이용해서 처리합니다.

= 서블릿 인스턴스는 항상 1개만 존재합니다. == 싱글톤 패턴(Singleton Pattern(인스턴스를= 1개만 생성하도록 해주는 디자인 패턴)

= 자바 코드 안에 출력하는 HTML 코드를 삽입할 수 있는데 HTML 코드를 작성하는 것은 불편합니다.

= 용도는 주로 MVC 패턴에서의 Controller 역할 : 사용자의 요청이 오면 필요한 비지니스 로직을 호출해서 작업을 수행시키고 그 결과를 View에게 전송하는 역할이다.


2. JSP

= URL을 이용해서 호출할 수 있는 자바 파일

= 이 파일도 웹 컨테이너가 관리

= 매핑된 URL에 해당하는 요청이 오면 먼저 Servlet 클래스 코드로 변환이 되고 인스턴스를 = 생성한 후 요청을 처리합니다.

= 두번째 요청이 오면 위의 작업을 반복합니다. (즉 싱글톤이 아니다)

= HTML 코드 안에 자바 코드를 삽입하는 구조입니다.

= 자바 코드를 작성하는 것이 불편합니다.

= 용도는 Controller 가 전달한 Attribute를 출력하는 역할을 주로 수행합니다.

= 자바 코드를 사용하지 않기 위해서 되도록이면 EL 과 JSTL을 이용해서 출력합니다.


웬만하면 같은 클래스에 저장하는 것이 좋다.

자바니까 src 파일에다가 소스파일을 작성해야 한다.

클래스 이름과 주소이름이 바로 매핑이 된다.

넥스트를 누르면 매핑을 따로 할 수 있다.

클래스를 만들때 카멜 표기법(첫글자 대문자)를 사용 하는데 웹 유알엘은 대문자를 쓰지 말라고 하므로 그대로 매핑되면 안 되니까 넥스트를 클릭해서 매핑을 바꾸어 주는 것이다.


정해진 예외는 호출하는 곳(WAS : 나는 톰켓)에서 처리한다.

정해진 예외는 안에서 예외처리 할 필요 없고 다른 예외처리는 해야 한다.

JSP는 모든 예외처리를 자동으로 해준다.


out.println("HTML코드"); 이렇게 코드를 작성해서 출력하는 것은 너무 힘들다 하지만 개발자들은 보통 이곳저곳 이동해가면서 코딩하는 것을 싫어한다. 눈으로 보기에 쉽지 않고 해석도 어렵기 때문이다. 그래서 코드가 길고 힘들더라도 순차적으로 작성하기 위해서 위처럼 일부러 코딩 하는 경우가 많다. 위처럼 하면 여기 저기 이동을 많이 하지 않고 순차적으로 코딩을 할 수 있기 때문이다. 따라서 이런 방법도 연습해두면 도움이 될 수 있다.


※ 웹 프로젝트 만들기 상세하게 알아보기▼


※서블릿만들기▼


3. Servlet 과 URL 매핑

= url 패턴 ( 중요! : 외워야 합니다 )

/* : 프로젝트 전체

- 일반 요청을 처리하는 용도로는 잘 사용하지 않고,

- 대부분은 파라미터 인코딩 설정을 모든 곳에서 해야 하는 경우에 이 url 패턴을 이용해서 처리합니다.

*.확장자 : 확장자로 끝나는 모든 요청

- 예전에 많이 사용하던 패턴으로 공공기관은 확장자를 do로 설정했고, 네이버는 nhn 으로 설정했습니다.

- (네이버 : https://news.naver.com/main/opinion/home.nhn)

/디렉토리이름/* : 디렉토리이름이 포함된 모든 요청

- 최근에 많이 사용하는 패턴으로 디렉토리를 이용해서 서비스를 구분합니다.

*을 사용하지 않는 경로 : 경로 1개와만 매핑 됩니다.

= 라우팅을 하려면 url 패턴이 필요하다.

= 여러 개의 url을 하나의 인스턴스(클래스 또는 파일)가 처리할 수 있도록 하는 것

= 웹 프로그램에서는 라우팅을 반드시 해야한다고 생각하면 된다.


= 하나의 URL 뿐 아니라 URL 패턴과도 매핑 가능합니다.

= URL 패턴 여러 개를 하나의 서블릿과 매핑이 가능합니다.




1) web.xml 에서 매핑 설정 가능

<!— 서블릿 클래스의 이름을 생성 : 1번 만 작성 —>

<servlet>

      <servlet-name>서블릿이름</servlet-name>

      <servlet-class>클래스이름</servlet-class>

  </servlet>


<!— url 패턴과 위에서 만든 서블릿을 매핑 :  여러 번 작성 가능 —>

  <servlet-mapping>

      <servlet-name>서블릿이름</servlet-name>

      <url-pattern>/호출url</url-pattern>

  </servlet-mapping>



2) Servlet 클래스의 상단에 어노테이션을 이용해서 설정 가능


@WebServlet("url패턴")

@WebServlet(urlPatterns={"url패턴","url패턴"...})


= 예전에는 web.xml에 설정하는 경우가 많았는데 최근에는 어노테이션을 이용하는 경우가 많습니다.





** paramete & attribute

1. parameter : 클라이언트가 서버에게 전송하는 데이터

- Url 뒤에 ?를 추가하고 이름=값 의 형태로 전송가능

- form 에 입력 태그들을 만들고 name을 설정해서 전송가능

-ajax의 경우에는 별도로 만들어서 전송가능


2. attribute : 서버가 결과 페이지에 전송하는 데이터

- request 나 session에 저장해서 전송


3. Controller(Servlet)에서 결과 페이지로 이동하는 방법

1) forwarding URL을 변경하지 않고 이동 - request 와 session 모두 공유

2) redirect : URL을 변경하고 이동 - session만 공유


※ 일반적인 흐름 처리

요청 페이지 -> 요청을 처리할 수 있는 Servlet -> Service -> DAO -> Service -> Servlet(데이터를 저장) - > 결과 페이지


실습


4. form의 메소드를 post로 변경

= 한글을 입력해서 전송하려면 한글이 깨집니다

= 서블릿에서 한글 파라미터를 처리하기 전에 아래 코드를 추가합니다.

request.setCharacterEncoding("utf-8");


실습 했던 것을 post로 수정하기



'Front End' 카테고리의 다른 글

javaweb(jQuery)  (0) 2018.09.03
java web log파일 만들기  (0) 2018.09.01
커스텀태그(JSTL)  (0) 2018.08.30
el  (0) 2018.08.29
javabean & error  (0) 2018.08.29