본문 바로가기
웹 개발 언어/JSP&Servlet

Servlet - URL mapping, form태그 사용하기

by 0725 2022. 3. 17.

저번 포스팅에서는 Servlet의 기본 객체를 알아보았다

코드 안에 주석으로 URL mapping에 대해 간단하게 쓰여진 부분이 있었는데

이번엔 실습을 통해 URL mapping이 뭔지 더 명확히 알아보자!

 

URL mapping

- Web browser에서 Servlet을 동작시키기 위해 실제 Java 클래스의 이름 대신, Servle을 요청하기 위한 문자열을 Servlet 클래스의 이름 대신, Servlet을 요청하기 위한 문자열을 Servlet 클래스와 mapping 시키는 것!

- 원래주소라면? http://localhost:8081/Servlet/com.javalec.ex.HelloWeb

               -> url 경로가 길고 불편하고 url 경로가 노출되기 때문에 보안상의 문제가 생긴다.

- Mapping된 주소? http://localhost:8081/Servlet/HelloWeb

               -> 좀더 간단한 url경로, 실제 서블릿 클래스를 공개하지 않는다

-설정 방법?

빨간 부분에 문자를 바꿔주면됨!

 


form 태그 사용하기!~

!!form태그에서 꼭 필요한것!!

1. action : 값을 어디로 보낼지

  url mapping이랑 통일해주어야함!

2. name : 어떤 값을 보내는지

3. submit : 값을 보내는 시점

 

 

 

 

 

 

 

 

실습!!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	  

	<form action="ex03_get">
		DATA = <input type="text" name="data">
		<input type="submit" value="SEND">
	
	</form>
</body>
</html>

data라는 이름을 가진 text로 입력받은 데이터를
ex03_get이라는 url mapping이름을 가진 서블릿으로
send 버튼을 누르면 데이터를 보내겠다라는 뜻!

 

ex03_get의 코드는?

package Servlet;

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

// form태그 action에 작성한 url mapping과 일치해야함!!
@WebServlet("/ex03_get")
public class ex03_get extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String data = request.getParameter("data");
		System.out.println("사용자가 입력한 데이터 : " + data);
		
	}

}

ex03_send.html에서 전송한 데이터들을 받아오는 서블릿이다

request 객체를 통해 사용자가 입력한 데이터 가지고 온다
request에서 의 getParameter("form태그에서 보낸 name값")는 보낸 데이터를 받아오는 메소드이다. 항상 string 형태로 반환한다

 

get방식을 사용할때 한글로 인코딩 하려면 Servers폴더 - server.xml -> 63번째줄 Connector 태그에 속성을 추가해줘야한다.

이렇게! -> URIEncoding="인코딩방식"

한글로 인코딩하는 방식은 두 가지가 있다.
- EUC-KR : 한국어 팩 설치되어있어야 사용 가능하고, 글자 하나를 통으로 인식하기 때문에 한글에 없는 단어라면 사용할 수 없다.(ex.떄)
- UTF-8 : 유니코드 형식이기 때문에 글자를 자음, 모음을 분리해서 인식한다. 요즘은 이 방식을 더 많이 쓰는 추세라고 한다.


이름과 나이 보내서 Web으로 출력하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="getData">
		당신의 이름은? <input type="text" name="name"><br>
		당신의 나이는? <input type="text" name="age"><br>
		<input type="submit" value="전송">
	
	</form>
</body>
</html>
package Servlet;

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;


@WebServlet("/getData")
public class ex04_getData extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// console 창에 출력
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println("사용자가 입력한 이름 : " + name);
		
		// web에 출력
		// 응답할 페이지에 대한 설정 ( 스트림 열기 전에 설정 필수!! )
		response.setContentType("text/html; charset=utf-8");
		
		// 출력 스트림 열기
		PrintWriter out = response.getWriter();
		out.print("<h1>당신의 이름은? " + name +" 입니다! </h1><br>");
		out.print("<h1>당신의 나이는? " + age +" 살입니다! </h1>");
	}

}

신경쓸 부분

- ulr mapping 주소 일치하는지 확인

- 어떤 정보가 들어왔는지 확인하기위해 콘솔 창에 먼저 출력해준 것

- 응답할 페이지 설정은 출력 전에 해주기

 

결과화면

h1 태그를 이용해서 크게 출력됨!


두 수 입력 받아서 계산하기!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- form : action, name, submit -->
	<form action="plus">
	<h1>두 수를 입력 받아서 계산하기</h1>
		<input type="text" name="num1">+
		<input type="text" name="num2">
		<input type="submit" value="연산">
	
	</form>
</body>
</html>
package Servlet;

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;

@WebServlet("/plus")
public class ex05_plus extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		out.print(num1 +"과 "+num2+"의 합은 " +(num1+num2)+"입니다");
	}

}

 

정수형으로 타입 형변환하기

request.getParameter() 메소드는 String타입으로 반환하기 때문에 Integer.parseInt() 함수를 사용해서 정수로 타입을 바꿔줘야한다!

 

결과 화면


배경색 선택해서 바꾸기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	*{
	     text-align: center;
	}
</style>
</head>
<body>
	<form action="changeBg">
		<h1> 내가 원하는 배경색으로!</h1>
		<input type="color" name ="color">
		<input type="submit" value="변경"><br>
	</form>

</body>
</html>
package Servlet;

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;


@WebServlet("/changeBg")
public class ex06_changeBg extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String color = request.getParameter("color");
		System.out.println(color);
		PrintWriter out = response.getWriter();
		
		// 내부 방식
		out.print("<style> *{background-color:"+color+"}</body>");
		
	}

}

위 코드에서는 스타일 태그 안에 배경색을 지정해주는 내부 방식을 사용했다.

인라인 방식으로 배경색을 지정하려면

out.print("<body bgcolor="+color+"></body>"); 이라는 코드로 바꾸면 된다.

 

실행 화면

 

 

 

 

 

 

 

 

 

 

 

 

'웹 개발 언어 > JSP&Servlet' 카테고리의 다른 글

JSP 지시자 <%@ %>, 주석 사용하기  (0) 2022.03.26
Servlet 실습  (0) 2022.03.18
Maven  (0) 2022.03.17
Servlet 참고사항,,  (0) 2022.03.15
Servlet  (0) 2022.03.11

댓글