vscode - index.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Servlet 프로젝트 테스트</title>
</head>
<body>
<h1> index.html은 메인페이지 역할을 합니다.</h1>
<hr>
<!-- input 태그가 서버로 갈때 이름을 지정해 주지 않으면 구분을 할 수없으니 name 필수 -->
<form action="/ServletProject/example1.do" method="get">
이름 : <input type="text" name="inputName"> <br>
나이 : <input type="number" name="inputAge">
<button>제출</button>
</form>
<!-- 결과
http://localhost:8080/ServletProject/example1.do?inputName=%EC%A3%BC&inputAge=30
지정한 form 주소명이 뜨는걸 볼 수 있다
-->
<hr>
<form action="/ServletProject/ex2" method="get">
음식 : <input type="text" name="food" required> <br>
인원
<select name="amount">
<option value="1">1인분</option>
<option value="2">2인분</option>
<option value="3">3인분</option>
<!-- 여기서 1인분은 innerText 넘어가는 값은 value인 1 -->
</select>
<br>
요청사항 <br>
<textarea name="message" cols="50" rows="3"></textarea>
<button>주문</button>
</form>
<hr>
<!-- 주소, 값 자유롭게 -->
<form action="/ServletProject/ex3" method="get">
[고양이] <br>
츄르 :
<select name="amount1">
<option value="1">1set</option>
<option value="2">2set</option>
<option value="3">3set</option>
<option value="4">4set</option>
<option value="5">5set</option>
</select>
개
<button>주문</button>
</form>
</body>
</html>
- form 태그 : 내부에 작성된 input 태그의 값을 서버로 전달하는 역할
- action 속성 : 값을 전달할 서버 주소 작성 (임의의 주소 작성 가능)
- method 속성 : 데이터 전달 방식
- get : 주소 뒤에 input 태그 값을 붙여서 전달 (데이터가 직접 보인다)
- post : HTTP Body에 값을 담아서 전달 (데이터가 직접 안보인다)
Example1Servlet
package edu.kh.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Example1Servlet extends HttpServlet{
// extends : 상속
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// doGet " 메서드 방식에 따라 선택하는게 다르다 지금은 METHOD get방식을 했으니 doGet
// form 태그에서 전달받은 input태그 값을 변수에 저장
String inputName = request.getParameter("inputName");
String inputAge = request.getParameter("inputAge");
// 여기 작성된 getParameter("inputName")는 html에서 작성한 그 ipnut name
System.out.println(inputName);
System.out.println(inputAge);
}
}
javax.servlet.http.HttpServlet;
: 자바 기본 패키지가 아닌 외부 패키지
실행할 서버와 연결을 강제로 끊으면 사용할 수 없다(Apache Tomcat)
doGet 하는 두 가지 방법
1) Override/Implement Methods ->doGet 선택
2) doGet -> 자동완성
Example2Servlet
package edu.kh.servlet;
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 Example2Servlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String food = req.getParameter("food");
String amount = req.getParameter("amount");
String message = req.getParameter("message");
System.out.println(food);
System.out.println(amount);
System.out.println(message);
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
String result = food + " / " + amount + " / " + message;
out.print("<!DOCTYPE html>");
out.print("<html lang='ko'>");
out.print("<head>");
out.print("<title>결과 페이지</title>");
out.print("</head>");
out.print("<body>");
out.print("<h1>" + result + "</h1>");
out.print("<h3>결과 출력 완료</h3>");
out.print("</body>");
out.print("</html>");
}
}
html에서 쓰인 name 필요
전달 받은 값 ( == Parmeter)를 얻어와 변수에 저장
-> Parameter는 모두 String
req.getParameter : 요청 내용중() 값을 가져온다.
Example3Servlet
package edu.kh.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Example3Servlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String amount1 = req.getParameter("amount1");
String amount2 = req.getParameter("amount2");
System.out.println(amount1);
System.out.println(amount2);
}
}
주소 연결하는 법
WEB-INF > web.xml에 작성
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ServletProject</display-name>
<!-- 서버 접속 시 메인 화면으로 지정할 파일을 작성하는 부분 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- servlet 등록 -->
<!-- 아래 클래스를 지정한 네임으로 부를 수 있다 -->
<servlet>
<servlet-name>Example1</servlet-name>
<servlet-class>edu.kh.servlet.Example1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Example1</servlet-name>
<url-pattern>/example1.do</url-pattern>
<!-- /ServletProject 해당 폴더 안에 있기때문에 url에서 뺀다 -->
</servlet-mapping>
<!-- url이 왔을때 그걸 처리해줄 이름이 example1인데 위의 servlet-class에서 실행된다 -->
<servlet>
<servlet-name>ex2</servlet-name>
<servlet-class>edu.kh.servlet.Example2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ex2</servlet-name>
<url-pattern>/ex2</url-pattern>
<!-- 요청 주소 중 맨 앞에 프로젝트명은 제외 -->
</servlet-mapping>
<servlet>
<servlet-name>ex3</servlet-name>
<servlet-class>edu.kh.servlet.Example3Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ex3</servlet-name>
<url-pattern>/ex3</url-pattern>
</servlet-mapping>
</web-app>
web.xml 파일 : 배포 서술자
<servlet> : 어떤 클래스 파일을 servlet 으로 등록하고 부를 이름을 지정. 무조건 name이 위에 있어야한다
<servlet-mapping> : 요청 주소를 어떤 servlet이랑 연결할지 지정. 클라이언트 입장에서는 제출, 받는 입장에서는 요청
form 태그 action 주소로 제출되었을 때 연결할 servlet 지정
src/main/java에서 class 생성해서 index코드에서 받아올 코드 작성
src-main-webapp-web-inf - web.xml에서 해당 url에서 작성된 내용을 처리하기위해 서버를 연결할 servlet작성
프로젝트 -> (server) -> 인터넷 -> index.html
tomcat server == was == servlet container
'Backend > Servlet & JSP' 카테고리의 다른 글
[JSP] GET,POST/ JSP Action/ EL / Scope (0) | 2021.12.30 |
---|---|
[JSP] 정리 + 코드, vscode 설정 (0) | 2021.12.30 |
[Servlet] form 태그 서블릿으로 get 방식,이론 (0) | 2021.12.05 |
[Servlet] eclipse 프로젝트 생성, vscode설정 + Run On Server 단축키 설정 (0) | 2021.11.28 |
[Servlet] 설치 :: 이클립스, 톰캣, vscode (0) | 2021.11.28 |