«   2025/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

장미의 개발일기

Java/ Web java => Servelet 서블릿 선언 방법 2가지 본문

개발일기/JSP 프로그래밍 (Java 웹프로그래밍)

Java/ Web java => Servelet 서블릿 선언 방법 2가지

민장미 2023. 6. 4. 20:11

 

서블릿 기초 : html 파일 1개 + 서블릿 클래스 1개로 간단한 예제 (tistory.com)

 

서블릿 기초 : html 파일 1개 + 서블릿 클래스 1개로 간단한 예제

셋팅 : 본인은 아파치 톰캣 9.0 설치 / 이클립스 ee *톰캣 에러 무진장 많음...초보자는 절대 여러 프로젝트를 번갈아가면서 실행 시키지 말 것!! (본인은 지웠다 깔고 혈압이 폭팔한 에러를 여러 번

jangmicoding.tistory.com

먼저 포스팅한 간단한 예제 -MyInfoServlet class에선 

클래스 위에

@WebServlet  이라는 어노테이션을 사용하였다. 

이 어노테이션은 이 클래스가 서블릿이라는 것을 선언하는 기능이다. 

 

이 외에도 서블릿을 선언하는 방법이 1개 더 있다. 다만 번거롭고 위의 방식이 훨씬 간편하기에 거의 쓰지는 않는다.

정리하자면

 

 

서블릿 선언 방식 

 

1. 클래스 위에  @WebServlet("/주소") 어노테이션 사용

2. web.xml 파일에 선언해주기

 

 

지금 하려는 포스팅은 저 2번의 방법이다 ! 

 

*web-inf / 의 web.xml 파일을 오픈하여 편집 :  WAS(즉 톰캣)이 web.xml을 관리한다. 

myfile ~~ 이런건 다 엔터쳐서 밑으로 보내버리고 위에서 작성하면 편하다. 

 

(부록)web.xml----------

-web.xml에 있는 welcome file 부분은 톰캣이 실행되자마자 실행되는 파일들이다.

주로 메인 페이지를 index.jsp or index.html 로 만든 다음에 첫 welcome-file에 등록해서 사용한다. 

아래 캡쳐본을 보면, index.html이 없을 경우, index.htm이 실행되고, 이것도 없을 경우

index.jsp이 실행 없을 경우 또 밑으로 내려간다.  모든 목록이 없는 파일일 경우 => 오류 

-----------------

(부록)web.xml----------

init-param과 context-param :  웹 애플리케이션에서 사용되는 설정 파라미터

 * context-param : 서블릿 밖에 선언한다. 모든 서블릿이 접촉가능 / 전역설정 파라미터 / 웹 애플리케이션 전역 설정 / 

/getServletContext().getInitParameter() 메소드를 사용하여 호출 

 

* init-param : 서블릿 내부에 선언하며, 그 서블릿만 사용가능 / 서블릿에 대한 설정 파라미터

 / 그 서블릿의 인스턴스가 생성될 때 초기화 된다. / getInitParameter() 메소드를 사용하여  init-param 의 값을 호출 

 

위의 두 메소드 모두 HttpServlet의 메서드! 

-----------------

 

 

-서블릿 이름하고  서블릿은 상속받은 클래스를 적어줘야하는데, 

반드시 패키지까지 다 써줘야한다 ******  보통 패키지 표현시 / 를 쓰는데 여기엔 " . " 이걸로 표현한다.

-그 다음엔 서블릿 매핑!  url 패턴은    @WebServlet("/주소") 여기서의 "/주소" 이거와 같다. 

원하는  url을 정해서 적어주면 끝  

- web.xml 저장하는데 로딩이 좀 있을수도 있으니 수시로 저장하는건 비권장 

 <servlet>
  <servlet-name>mytest1</servlet-name>
  <servlet-class>ex1.EX1Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>mytest1</servlet-name>
  	<url-pattern>/mytest1</url-pattern>
  </servlet-mapping>

 

 

 

 

서블릿을 상속받은 클래스 코드는 초간단하니 캡쳐본으로 같이 올려요~ 

doget 메소드를 오버라이딩 ~ ( 뒤에 다른 예제를 위해 )

* 실행은 클래스 파일에서 해야한다. 

 

 

성공하면 콘솔화면에  잘 출력이 되고 

아래처럼 브라우저에 내가 지정한 url까지 똑같이 뜨는 것을 확인 ! 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

예제 1-2 :  파라미터 이해하기 

 

ex1.EX1Servlet  class 파일에 내용을 추가

xml 파일은 그대로 두고, class 파일에 내용만 추가. 

 

주석 내용을 따라하면 됩니다. 

 

//1주소와 파라미터와 값을 임의로 정해본다.
//(톰캣은 기본으로 8080포트로 설정되어있다) 
//http://localhost:8080/프로젝트명/내가설정한url_pattern?mode=AB&mid=cd&sid1=89
// ?뒤부터 파라미터와 파라미터의 값을 의미.  (map이라 생각하면 이해가 쉬움) 
// & ->    System.out.println();여기서 문자연결해주는 "+"역할을 한다
//http://localhost:8080/servelet_0604/mytest1?mode=AB&mid=CD&sid1=89

package ex1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EX1Servlet extends HttpServlet {
	
	//1주소와 파라미터와 값을 임의로 정해본다.
	//(톰캣은 기본으로 8080포트로 설정되어있다) 
	//http://localhost:8080/프로젝트명/내가설정한url_pattern?mode=AB&mid=cd&sid1=89
	// ?뒤부터 파라미터와 파라미터의 값을 의미.  (map이라 생각하면 이해가 쉬움) 
	// & ->    System.out.println();여기서 문자연결해주는 "+"역할을 한다
	//http://localhost:8080/servelet_0604/mytest1?mode=ab&mid=cd&sid1=89

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		 System.out.println("get 방식으로 호출");
		 
			//GET방식의 파라미터 받기 
		String mymode = req.getParameter("mode"); //AB
		String mymid = req.getParameter("mid");  // CD
		String mysid1 = req.getParameter("sid1"); //89
		
		System.out.println("파라미터값 확인");
		System.out.println(mymode);
		System.out.println(mymid);
		System.out.println(mysid1);
		 
		
		String res = "";
		//특정값을 브라우저로 출력해보자.
		if(mymode.equalsIgnoreCase("aB")) {
			res = "<p>에이비</p>";
			
		}else if(mymode.equalsIgnoreCase("aa")) {
			res = "<p>파라미터 aa일때 </p>";
			
		}else {
			res = "<p>모르는 내용이다.</p>";
		}
		//브라우저에게 ContentType 설정 
		resp.setContentType("text/html;charset=euc-kr");
		PrintWriter out = resp.getWriter(); //브라우저로 연결
		out.println(res);
		 
		 
		 
	}
	
	

}

실행해보면 당연히 오류가 뜬다 !

오류난 브라우저 창의 주소에 /mytest1?mode=AB&mid=CD&sid1=89 (프로젝트명/url pattern? 파라미터=값)

를 붙여넣으면 콘솔 창에는 각 파라미터 값들이 출력되고

브라우저 창에는  if 조건문을 설정한대로 mode의 값에 따라 각 다른 값이   출력된다.