그럼에도 불구하고

👨‍💻

[Servlet] @WebServlet() / web.xml 이용해보기 본문

Java, Servlet/Servlet, Jsp

[Servlet] @WebServlet() / web.xml 이용해보기

zenghyun 2022. 11. 3. 02:25

본격적으로 Servlet을 이용하여 코딩하고자 한다.

 

우선 보다좋은 이해를 위해 아래 내용을 참고해보자

 

 

 

 

https://despiteallthat.tistory.com/25

 

[Servlet] Servlet이란 무엇일까?

서블릿이란? 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 자세히 말하자면, 클라이언트가 어떤 요청을 하면 그 결과를

despiteallthat.tistory.com

 

 

 

html 파일과 java 파일을 이용하여 HttpServlet를 구현해볼것이다.

 

 

 

 

hello.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
	<div>
	<form action="hello">
	<div>
		<label>"안녕하세요"를 몇 번 듣고 싶으세요?</label>
	</div>
	<div>
		<input type="text" name="cnt">
		<input type=submit value="출력">
	</div>
	</form>
	</div>

</body>
</html>

 

여기서 중요한 점은 form 태그의 action 값이 hello로 지정되어 있다는 것이다. 

 

 

출력 버튼을 누르면 hello.java로 이동하게 하기 위함이다.

 

 

 

hello.html 화면

 

Hello

 

 

 

hello.java

package com.zenghyun.web;

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

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

public class hello extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		int cnt = 100;
		String cnt_ = request.getParameter("cnt");
		
		if(cnt_!=null && !cnt_.equals("")){
			cnt = Integer.parseInt(cnt_);
			
			for(int i =0; i<cnt; i++) {
				out.println(i+1 + ": 안녕하세요!  <br>");
			
			}
		}
		
	}
}

 

우선, Servlet를 이용하고자 한다면 HttpServlet 클래스를 상속받아야 한다.

 

그리고 service 메서드를 오버라이드 해야 한다.

 

 

 

response.setCharacterEncoding("UTF-8");  : 응답받을 때 한글이 깨지기 않게 하기 위함 
response.setContentType("text/html; charset=UTF-8"); :  html 파일로 받을 것이며 한글이 깨지지 않게 하기 위함

 

hello.html에서 cnt라는 이름을 가진 textbox에 값을 입력하면 그걸 cnt_라는 String 변수에 담을 것이다.

 

그리고 그 변수의 값이 null이 아니며, ""이 아닐 때

 

int type으로 선언된 cnt라는 변수에 cnt_를 int type으로 변환하여 담는다.

 

cnt 만큼의 for문을 반복하여 값을 출력한다.

 

 

 

 


하지만, 이 상태로 실행하게 되면 오류가 나며, 원하는 값을 출력받을 수 없다. 

 

왜냐하면 servlet 지정을 해주지 않았기 때문이다.

 

 

[ servlet 지정 방법 ]

 1. web.xml 

 

 

web.xml이란 Servlet, Error Page, Listener, Fillter, 보안 설정 등 Web Application의 설정 파일이다.

 

하나의 웹 애플리케이션에 하나만 존재하며,

 

보통 Web Document Root 디렉터리에 WEB-INF 폴더 아래 web.xml 파일로 존재한다.

 

 

 

여기서 

 

<servlet>
<servlet-name> na </servlet-name>
<servlet-class> com.zenghyun.web.hello </servlet-class>
</servlet>

<servlet-mapping>
<servlet-name> na </servlet-name>
<url-pattern>/hello </url-pattern>
</servlet-mapping>

 

를 작성해줘야 한다.

 

<servlet-class> com.zenghyun.web.hello </servlet-class> :  사용자가 요청한 서블릿

 

<url-pattern>/hello </url-pattern>:  사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. 

 

 


 

 

2. @WebServlet() 

 

1번의 방법으로도 실행이 가능하지만 새로운 html file과 java file를 만들 때마다 바꿔주어야 하는 번거로움이 발생한다. 

 

2번의 방법을 이용하면 비교적 간단하게? 지정할 수 있다. 

 

 

 

 

보이는 것처럼 클래스 위에 @WebServlet(?)이라고 작성하면 끝이다.

 

? 안에는 내가 이동할 html file의 이름이 들어가야 한다.

 

 

 

 

 

결과

 

textbox에 값 입력

 

 

 

출력 버튼 클릭 시

 

 

Comments