본문 바로가기
학습/JSP

17. 여러가지 URL 패턴 적용

by Elfen Lied 2022. 11. 16.
반응형

- 우선순위 : 특정할 수 있는 매핑 -> 디렉토리 패턴 매핑 -> 확장자 패턴 매핑

 

 

- TestServlet1 생성 (특정할 수 있는 매핑)

package sec02.ex01;

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("/first/test")
public class TestServlet1 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet1 : 서블릿 매핑");
	
	}

}

가장 우선순위가 높음

 

 

 

- TestServlet2 생성 (디렉토리 패턴 매핑)

package sec02.ex01;

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("/first/*")
public class TestServlet2 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet2 : 서블릿 매핑");
	
	}

}

/first/ 뒤에 아무거나 요청해도 받음

 

 

 

- TestServlet3 생성 (확장자 패턴 매핑)

package sec02.ex01;

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("*.do")
public class TestServlet3 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet3 : 서블릿 매핑");
	
	}

}

모든 요청 URL 패턴 지정하기전 까진

.do 만 붙이면 다 3번으로 넘어감

 

 

- TestServlet4 생성 (모든 요청 URL 패턴)

package sec02.ex01;

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("/*")
public class TestServlet4 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet4 : 서블릿 매핑");
	
	}

}

/first/ 밑 /first/test 외에 모든 요청은 다 /* 가 받음

*.do는 이제 받지 못함

 

실습 다됐으면 test3번과 4번 매핑 주석처리

 

 

 

- contextPath, RequestURL, RequestURI, 서블릿 매핑

 

TestServlet1 에 작성

package sec02.ex01;

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("/first/test")
public class TestServlet1 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet1 : 서블릿 매핑<br><br>");
		
		String contextPath = request.getContextPath(); // /pro11
		String url = request.getRequestURL().toString();
		String uri = request.getRequestURI();
		String mapping = request.getServletPath();
		
		out.print("컨텍스트 패스 : " + contextPath + "<br>");
		out.print("URL : " + url + "<br>");
		out.print("URI : " + uri + "<br>");
		out.print("서블릿 매핑 : " + mapping + "<br>");
	
	}

}

/first/test로 요청

 

 

TestServlet2 에 작성

package sec02.ex01;

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("/first/*")
public class TestServlet2 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.print("TestServlet2 : 서블릿 매핑<br><br>");
		
		String contextPath = request.getContextPath(); // /pro11
		String url = request.getRequestURL().toString();
		String uri = request.getRequestURI();
		String mapping = request.getServletPath();
		
		out.print("컨텍스트 패스 : " + contextPath + "<br>");
		out.print("URL : " + url + "<br>");
		out.print("URI : " + uri + "<br>");
		out.print("서블릿 매핑 : " + mapping + "<br>");
	
	}

}

 

/first/member/join으로 요청해봄

 

 

 

- BoardServlet 생성

주소 자르기

package board;

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("/board/*")
public class BoardServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String contextPath = request.getContextPath();
		String uri = request.getRequestURI();
		String mapping = request.getServletPath();
		
		uri = uri.substring(contextPath.length(), uri.length());
		String command = uri.substring(mapping.length(), uri.length());
		System.out.println(command);
		
		if(command.equals("/list")) {
			System.out.println("게시글 조회");
		} else if(command.equals("/write")) {
			System.out.println("글쓰기");
		} else if(command.equals("/update")) {
			System.out.println("글수정");
		} else {
			System.out.println("존재하지 않는 페이지");
		}
	}

}

http://localhost:8090/pro11/board/list

http://localhost:8090/pro11/board/write

http://localhost:8090/pro11/board/update

http://localhost:8090/pro11/board/asdfasdf

 

반응형

'학습 > JSP' 카테고리의 다른 글

20. 디렉티브 태그  (0) 2022.11.16
18. Filter API  (0) 2022.11.16
19. 여러 가지 서블릿 관련 Listener API  (0) 2022.11.15
16. 종합(회원목록, 추가, 삭제, 로그인)  (0) 2022.11.14
15. 세션  (0) 2022.11.10

댓글