일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- webpack
- 그럼에도 불구하고
- 코딩테스트
- coding
- cleancode
- node.js
- frontend
- redux
- github
- node
- max-width
- 반응형 페이지
- react
- 자바
- @media
- 그럼에도불구하고
- CSS
- media query
- 코드업
- 프론트엔드
- Servlet
- 자바문제풀이
- JS
- JavaScript
- react-router-dom
- 변수
- HTML
- git
- TypeScript
- java
- Today
- Total
그럼에도 불구하고
[Servlet] @WebServlet() / web.xml 이용해보기 본문
본격적으로 Servlet을 이용하여 코딩하고자 한다.
우선 보다좋은 이해를 위해 아래 내용을 참고해보자
https://despiteallthat.tistory.com/25
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.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에 값 입력
출력 버튼 클릭 시
'Java, Servlet > Servlet, Jsp' 카테고리의 다른 글
[Servlet] service / doGet / doPost (0) | 2022.11.05 |
---|---|
[Servlet/JSP] 내장 객체 (1) | 2022.11.04 |
[Servlet] 한글깨짐 해결 / Servlet Filter (0) | 2022.11.03 |
[Servlet] get / post 사용하기 (0) | 2022.11.03 |
[Servlet] Servlet이란 무엇일까? (0) | 2022.11.03 |