-
Servlet URLback-end&DB/Java 2023. 6. 13. 12:41728x90
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); } }
오류 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'back-end&DB > Java' 카테고리의 다른 글
JSP 필요성과 기본 태그 (0) 2023.06.15 Servlet HTTP와 GET과 POST (0) 2023.06.14 servlet 인코딩 방식 (0) 2023.06.13 JAVA 제네릭스와 제네릭클래스 (0) 2023.05.27 JAVA JDBC과 API (0) 2023.05.24