ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Servlet URL
    back-end&DB/Java 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

    '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
Designed by Tistory.