back-end&DB/Java

Servlet URL

Hoon0211 2023. 6. 13. 12:41
728x90

1. URL Mapping(URL 맵핑)

web browser에서 Servlet을 동작시키기 위해 실제 Java 클래스의 이름 대신,

Servlet을 요청하기 위한 문자열을 Servlet클래스와 Mapping(맵핑)시키는 것.

 

사용하는 이유

  • URL경로가 길고 불편
  • URL 경로가 노출 되어 보안상의 문제가 생김
  • 실제 서블릿 클래스를 공개하지 않기 위함
  • URL 맵핑은 같은 project안에서 중복 불가

 

2. URL Pattern

 

- request 함수

		System.out.println("requestURL : " + request.getRequestURL());
		System.out.println("requestURI : " + request.getRequestURI());
		System.out.println("ServletPath : " + request.getServletPath());
		System.out.println("ContextPath : " + request.getContextPath());

 

URL 네트워크상에서 자원의 위치(웹사이트 주소 + 자원의 경로)
URI 자원의 위치
ServletPath  url mapping값
Contextpath 서버가 해당 프로젝트를 찾아가는 이름
      ↳ 변경방법 1 프로젝트 proerties > web project setting
      ↳ 변경방법 2 servers 폴더 server.xml > 맽밑 context 태그의 path 부분을 변경

 

 

3. 데이터 전송

데이터 전송 태그 : form태그

  • action : 데이터를 어디로 보낼지
    •  servlet으로 보낼 url mapping값 작성
  • name : 보내는 데이터의 이름
  • submit : 데이터를 보내는 시점
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="Ex04_get">
	DATA : <input type="text" name="data">
	<input type="submit">
	</form>
	 
</body>
</html>

 

ex04_send.html 에서 보낸 데이터를 받을 페이지

  • action에 주소 페이지
  • request객체 : 요청과 관련된 정보를 가진 객체
  • action에 작성한 주소를 요청하는 것과 같음
  • html에서 보낸 데이터를 받으려면 request객체에서 꺼내야함!
  • request.getParameter("html에서 작성한 name 값")
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;
@WebServlet("/Ex04_get")
public class Ex04_get extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String getData = request.getParameter("data");
		System.out.println(getData);
		
	}
}

제출을 누르면 콘솔창에 '123' 있습니다.

오류 1. 404 not found
html에서 요청한 주소와 실제 데이터를 받을 주소가 같은지 확인
form 태그의 action값 = servlet의  url mapping 값

오류 2. 데이터가 null
html에서 보낸 데이터 이름과 받을 때 이름과 받을 때 데이터 이름이 같은지 확인
from 태그의 name값 = getParameter 메소드의 name값

 

4. 실습

- 두수의 사칙연산을 구하는 페이지를 만드세요!

	//Servlet
        int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		int num3 = Integer.parseInt(request.getParameter("calculation"));

		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter( );
		if (num3 == 1) {
			out.print(num1 +"과 "+ num2 +"의 합은 " + (num1 + num2) + "입니다.");
		} else if (num3 == 2) {
			out.print(num1 +"과 "+ num2 +"의 빼기은 " + (num1 - num2) + "입니다.");
		} else if (num3 == 3) {
			out.print(num1 +"과 "+ num2 +"의 곱셈은 " + (num1 * num2) + "입니다.");
		} else {
			out.print(num1 +"과 "+ num2 +"의 나누기는 " + (num1 / num2) + "입니다.");
		}
//html
<body>
<h1>두 수를 입력하세요 </h1>
<form action="Ex06_plus">
	<input type="text" name="num1">
	  
	  <select name="calculation">
      <option value= 1>+</option>
      <option value= 2>-</option>
      <option value= 3>×</option>
      <option value= 4>÷</option>
    </select>	
	
	
	<input type="text" name="num2">
	<input type="submit" value="연산">
	</form>
</body>

- 정사각형 방을 만드세요.

		// Servlet
        int num = Integer.parseInt(request.getParameter("num"));
		String color = request.getParameter("color");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<table border='1'style='background-color: " + color + ";' >");
		int n = 0;
		for (int i = 0; i < num; i++) {
			out.print("<tr>");	
			for (int j = 0; j < num; j++) {
				out.print("<td>" + (n + 1) + "</td>");
				n++;
			}
			out.print("</tr>");
		}
		out.print("</table>");
//html
<h1> 정사각형 방 만들기 </h1>
<form action="Ex07_makeTavle">
	방 개수 : <input type="text" name="num">
    색깔 : <input type="color" name="color">
	<input type="submit" value="전송">
	</form>

 

728x90
댓글수0