Backend/Servlet & JSP

[Servlet] 예제 서블릿 1,2,3

Deeb 2021. 12. 4. 16:20

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

 

반응형