


1. 데이터 전송 규칙 3가지
1-1. 어디로 (form 태그의 action 속성)
- 데이터를 전송할 목적지(servlet)를 지정한다.
- action 속성에 서블릿 URL 패턴을 작성한다.
<form action="/MyServlet" method="post">
여기서 /MyServlet은 서블릿의 URL 매핑 값이다. 서블릿의 URL은 @WebServlet이나 web.xml에서 설정된다.
web.xml 경로
WebContent/WEB-INF/web.xml 또는 src/main/webapp/WEB-INF/web.xml (프로젝트 구조에 따라 다를 수 있음)
1-2. 어떤 값을 (input 태그의 name)
- input 태그에 name 속성을 추가하여 서버로 전송할 데이터를 지정한다.
- 서버에서 해당 데이터를 읽어오기 위해 name 속성이 필요한 것.
<input type="text" name="username" placeholder="Enter your name">
<input type="password" name="password" placeholder="Enter your password">
- Servlet 에서 값을 받는 방법
String username = request.getParameter("username");
String password = request.getParameter("password");
-3. 언제 (submit)
- submit 버튼을 클릭하면 데이터를 서버로 전송
- form에 입력된 값이 지정된 action URL로 전송된다.
<button type="submit">Submit</button>
2. 실습
2-1. 오늘점심은?


datasend.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- html/jsp 에서 Servlet으로 데이터 전송 규칙 3가지
(1) 어디로 보내? : form 태그의 action에
(2) 어떤값을 보내? : input태그의 name에
(3) 언제 보내? : submint 버튼
-->
<form action="DataSend">
질문 :
<input type="text" name="data" id="" value="">
<input type="submit" value="질문하기">
</form>
</body>
</html>
ex01DataSend.java
package ex0127;
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;
/**
* Servlet implementation class DataSend
*/
@WebServlet("/DataSend")
public class ex01DataSend extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset= UTF-8");
// 1. 요청받은 데이터 꺼내오기
String data = request.getParameter("data");
// 2. 요청받은 데이터 화면에 출력하기
PrintWriter out= response.getWriter();
out.print("<h1>"+data+"</h1>");
out.print("<br>");
out.print("오늘 점심은 전복해물짬뽕입니다");
}
}
2-1. 2개의 정수 입력 받아 덧셈식 출력

서블릿은 톰캣에서 잘 돌아가는데 html 만 실행이 안 되는 문제

html 파일 경로가 잘못되었기 때문에 404에러가 뜬 것이었다.

HTML 파일이 WEB-INF 폴더 안에 있다면, 브라우저에서 접근할 수 없다.
WEB-INF 내부 파일은 보호되기 때문에 직접 URL로 접근할 수 없기 때문에 webapp 하위에 들어가야 한다.

아래처럼 바꾸니까 작동 잘 됨
plusop.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Plusop">
<input type="text" name="num1">
+
<input type="text" name="num2">
<input type="submit">
</form>
</body>
</html>
ex02Plus.java
package ex0127;
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;
/**
* Servlet implementation class ex02Plus
*/
@WebServlet("/Plusop")
public class ex02Plus extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 한글사용 하기위해 UTF-8
response.setContentType("text/html; charset= UTF-8");
// html에서 받은 데이터를 request를 통해서 자료형 데이터로 받는다!
String num1 = request.getParameter("num1");
String num2 = request.getParameter("num2");
// 자료형데이터는 int형으로 변환하여야 계산 가능
int number1 = Integer.parseInt(num1);
int number2 = Integer.parseInt(num2);
// response를 통해서 출력 객체를 생성
PrintWriter out = response.getWriter();
// request에 대한 response를 html로 출력
out.print(number1 + " + " + number2 + " = " + (number1 + number2));
}
}

2-3. 방 만들기 (표)

ex03makeTable.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="MakeTable">
몇 개의 방을 만들까요?
<input type="text" name="num">
<input type="submit" value="SEND">
</form>
</body>
</html>
ex03MakeTable.java
package ex0127;
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;
/**
* Servlet implementation class ex03MakeTable
*/
@WebServlet("/MakeTable")
public class ex03MakeTable extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset= UTF-8");
String num = request.getParameter("num");
int number = Integer.parseInt(num);
PrintWriter out = response.getWriter();
out.print("<table border = '1'>");
out.print("<tr>");
for (int i = 1; i < number + 1; i++) {
out.print("<td>" + i + "</td>");
}
out.print("</tr>");
out.print("</table>");
}
}


'Java' 카테고리의 다른 글
[Java] 자바 배열 정렬 할 때 오버플로우 방지하는 법 (11) | 2025.02.01 |
---|---|
[Spring] 스프링 Spring MVC 흐름 완벽 정리: 초보자도 이해하는 MVC 패턴 (19) | 2025.01.28 |
[Java] 쿼리스트링 으로 값 넘겨서 화면에 출력하기 (15) | 2025.01.26 |
[JSP & Servlet] 쿠키(Cookie)와 Session(세션), 쿼리스트링(QueryString) 에 대해 알아보자 (14) | 2025.01.26 |
[Java] WebContent 와 /src/main/webapp의 차이점 (17) | 2025.01.26 |



1. 데이터 전송 규칙 3가지
1-1. 어디로 (form 태그의 action 속성)
- 데이터를 전송할 목적지(servlet)를 지정한다.
- action 속성에 서블릿 URL 패턴을 작성한다.
<form action="/MyServlet" method="post">
여기서 /MyServlet은 서블릿의 URL 매핑 값이다. 서블릿의 URL은 @WebServlet이나 web.xml에서 설정된다.
web.xml 경로
WebContent/WEB-INF/web.xml 또는 src/main/webapp/WEB-INF/web.xml (프로젝트 구조에 따라 다를 수 있음)
1-2. 어떤 값을 (input 태그의 name)
- input 태그에 name 속성을 추가하여 서버로 전송할 데이터를 지정한다.
- 서버에서 해당 데이터를 읽어오기 위해 name 속성이 필요한 것.
<input type="text" name="username" placeholder="Enter your name"> <input type="password" name="password" placeholder="Enter your password">
- Servlet 에서 값을 받는 방법
String username = request.getParameter("username"); String password = request.getParameter("password");
-3. 언제 (submit)
- submit 버튼을 클릭하면 데이터를 서버로 전송
- form에 입력된 값이 지정된 action URL로 전송된다.
<button type="submit">Submit</button>
2. 실습
2-1. 오늘점심은?


datasend.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!-- html/jsp 에서 Servlet으로 데이터 전송 규칙 3가지 (1) 어디로 보내? : form 태그의 action에 (2) 어떤값을 보내? : input태그의 name에 (3) 언제 보내? : submint 버튼 --> <form action="DataSend"> 질문 : <input type="text" name="data" id="" value=""> <input type="submit" value="질문하기"> </form> </body> </html>
ex01DataSend.java
package ex0127; 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; /** * Servlet implementation class DataSend */ @WebServlet("/DataSend") public class ex01DataSend extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset= UTF-8"); // 1. 요청받은 데이터 꺼내오기 String data = request.getParameter("data"); // 2. 요청받은 데이터 화면에 출력하기 PrintWriter out= response.getWriter(); out.print("<h1>"+data+"</h1>"); out.print("<br>"); out.print("오늘 점심은 전복해물짬뽕입니다"); } }
2-1. 2개의 정수 입력 받아 덧셈식 출력

서블릿은 톰캣에서 잘 돌아가는데 html 만 실행이 안 되는 문제

html 파일 경로가 잘못되었기 때문에 404에러가 뜬 것이었다.

HTML 파일이 WEB-INF 폴더 안에 있다면, 브라우저에서 접근할 수 없다.
WEB-INF 내부 파일은 보호되기 때문에 직접 URL로 접근할 수 없기 때문에 webapp 하위에 들어가야 한다.

아래처럼 바꾸니까 작동 잘 됨
plusop.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="Plusop"> <input type="text" name="num1"> + <input type="text" name="num2"> <input type="submit"> </form> </body> </html>
ex02Plus.java
package ex0127; 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; /** * Servlet implementation class ex02Plus */ @WebServlet("/Plusop") public class ex02Plus extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 한글사용 하기위해 UTF-8 response.setContentType("text/html; charset= UTF-8"); // html에서 받은 데이터를 request를 통해서 자료형 데이터로 받는다! String num1 = request.getParameter("num1"); String num2 = request.getParameter("num2"); // 자료형데이터는 int형으로 변환하여야 계산 가능 int number1 = Integer.parseInt(num1); int number2 = Integer.parseInt(num2); // response를 통해서 출력 객체를 생성 PrintWriter out = response.getWriter(); // request에 대한 response를 html로 출력 out.print(number1 + " + " + number2 + " = " + (number1 + number2)); } }

2-3. 방 만들기 (표)

ex03makeTable.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="MakeTable"> 몇 개의 방을 만들까요? <input type="text" name="num"> <input type="submit" value="SEND"> </form> </body> </html>
ex03MakeTable.java
package ex0127; 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; /** * Servlet implementation class ex03MakeTable */ @WebServlet("/MakeTable") public class ex03MakeTable extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset= UTF-8"); String num = request.getParameter("num"); int number = Integer.parseInt(num); PrintWriter out = response.getWriter(); out.print("<table border = '1'>"); out.print("<tr>"); for (int i = 1; i < number + 1; i++) { out.print("<td>" + i + "</td>"); } out.print("</tr>"); out.print("</table>"); } }


'Java' 카테고리의 다른 글
[Java] 자바 배열 정렬 할 때 오버플로우 방지하는 법 (11) | 2025.02.01 |
---|---|
[Spring] 스프링 Spring MVC 흐름 완벽 정리: 초보자도 이해하는 MVC 패턴 (19) | 2025.01.28 |
[Java] 쿼리스트링 으로 값 넘겨서 화면에 출력하기 (15) | 2025.01.26 |
[JSP & Servlet] 쿠키(Cookie)와 Session(세션), 쿼리스트링(QueryString) 에 대해 알아보자 (14) | 2025.01.26 |
[Java] WebContent 와 /src/main/webapp의 차이점 (17) | 2025.01.26 |