잡동사니에도 사랑을

Servlet 정리 - Chapter.1 본문

정리/Servlet정리

Servlet 정리 - Chapter.1

luvforjunk 2021. 9. 13. 18:59
728x90
반응형

Servlet

: 웹에서 실행하는 프로그램

: html in JAVA

: public static void main(String[] args) 메소드가 없다

: 주기함수(Life Cycle)

: 반드시 public 이어야한다.

: new X (톰캣(서버)에 의해 생성되므로 new할 필요 없다)

: 서버안에 저장

 

# 주기함수(Life Cycle)

init() : 맨처음에 1번만 호출

service() - doGet() : 클라이언트가 요청시마다 호출

           - doPost() 

destroy()

 

: service는 추상이다 때문에 doGet, doPost로 Override(재구현)한다

 

서비스

1. get방식

: default

: 주소표시줄(Query String)를 통해서 이동

: 이동되는 데이터가 보인다

: 이동되는 데이터가 문자열만(String) 처리

 

2. post방식

: 클라이언트가 post로 요청 시에만 적용

: 내부적으로(페이지단위) 이동 - 대량데이터를 옮길 수 있다

: 이동되는 데이터가 안 보인다.

 

  • Servlet 실행

1. 서버(Tomcat)에 helloServlet 프로젝트를 올리고
2. 무조건 web.xml 찾아서 읽는다.
왜냐? xml 파일 자체가 환경설정인데, helloServlet에 대한 환경 설정해주므로 자연스럽게 읽는다.
3. web.xml에 Servlet을 등록해야 한다. 

http://localhost:8080/helloServlet/com.hello.HelloServlet - X
http://localhost:8080/helloServlet/HelloServlet - O

어느 패키지 안에 있는 클래스인지 모르기 때문에 package명과 함께 써줘야 한다. 절대 클래스명만 써주면 안된다.
  => <servlet-class>com.hello.HelloServlet</servlet-class>

Compile되어 기계어로 변형이 된 class파일을 원한다.
  => <servlet-class>com.hello.HelloServlet</servlet-class>.class

서블릿의 클래스는 원래  <servlet-class>com.hello.HelloServlet</servlet-class> 이 맞다
하지만 이름이 너무 기니까 <servlet-name>HelloServlet</servlet-name> 라고 써주는 것이다.

url은 브라우저에서 사용되는 웹 주소로, 쓸 때는 <url-pattern>/HelloServlet</url-pattern> 이라고 써주면 된다.


servlet을 써줄 때마다 
  <servlet>
   <servlet-name>HelloServlet</servlet-name>
   <servlet-class>com.hello.HelloServlet.class</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>HelloServlet</servlet-name>
   <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>

을 쓰자니 너무 기니까.....

@WebServlet("/HelloServlet")을 써줌으로써 대체되었다.

하지만 두 가지를 다 써줄 경우,

"이름이 [HelloServlet]과 [com.hello.HelloServlet]인 두 서블릿들 모두 url-pattern [/HelloServlet]에 매핑되어 있는데, 이는 허용되지 않습니다." 라는 에러가 뜬다. 

반드시 하나만 써줘야 한다.

JavaScript와 html은 기본적으로 웹을 포함해서 xml 입력이 필요 없지만 servlet 은 써줘야 한다.

앞서 언급한 바와 같이 두 가지 다 쓸 필요 없고, xml을 입력해주거나 간단하게 @WebServlet("/HelloServlet")을 써주면 된다. 

하지만 Spring은 반드시 xml을 작성해줘야 한다.

init은 처음 한번만 쓰고, 클라이언트 요청이 있을 때마다 도는 건 doGet이다
doGet의 서비스가 끝나면 destroy가 호출된다.
// html 태그가 없으면 찍히는 건 console창이다. 브라우저에 찍히는 건 없다.
// init, doGet, destroy 모두 CallBack 메소드이다.
service는 추상이라 doGet이나 doPost로 대신 처리한다.

 

////////web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>helloServlet</display-name>
  
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>com.hello.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

728x90
반응형