Java/ Web java => Servelet 서블릿 선언 방법 2가지
서블릿 기초 : 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의 값에 따라 각 다른 값이 출력된다.