JSP

221202 MVC2 Servlet

주영재 2022. 12. 2. 18:21

Servlet의 사용
디렉토리 패턴:디렉토리 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조임

디렉토리 패턴->확장자 패턴
확장자패턴-경로가 특정 단어로 끝나면 전부 다 하나의 서블릿으로 연결해줌

서블릿 어노테이션을 " *.키워드 " 로 바꾸면 된다.

uri를 뽑을 때 어떤 내용이든간에 뽑는다. 맘대로 수정해도 그대로 뽑음
따라서 경로에 맞게 일관성있게 맞춰주는 편이 좋음
아니면 나중에 분리하기가 어려워진다.

실제 폴더경로와 맞게 하기. 경로 통일하기.

 

basic

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="join.test">가입</a><br>
	<a href="login.test">로그인</a><br>
	<a href="logout.test">로그아웃</a><br>
	<a href="/JSPBasic/controller/delete.test">탈퇴</a><br>
	<a href="/JSPBasic/controller/update.test">수정</a><br>

</body>
</html>

창을 클릭하면, 이클립스 콘솔창에 sysout내용이 출력됨

 

TestController(Servlet)

package com.example.controller;

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;

/**
 * Servlet implementation class TestController
 */
@WebServlet("*.test") //1.URL주소를 확장자패턴으로 변경
public class TestController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
		System.out.println("실행됨");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}
	
	//2. get, post요청을 하나로 모음
	protected void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//3. 한글처리
		request.setCharacterEncoding("utf-8");
		
		//4.요청분기
		//System.out.println(request.getRequestURI());
		//System.out.println(request.getContextPath());//(/JSPBasic)
		
		String path = request.getContextPath();
		//문자열자르기
		String command =request.getRequestURI().substring(path.length());
		
		System.out.println(command);
		
		switch (command) {
		case "/controller/join.test":
			System.out.println("가입처리");
			break;
		case "/controller/login.test":
			System.out.println("로그인처리");
			break;
		case "/controller/logout.test":
			System.out.println("로그아웃처리");
			break;
		case "/controller/delete.test":
			System.out.println("탈퇴처리");
			break;
		case "/controller/update.test":
			System.out.println("수정처리");
			break;
		default:
			break;
		}
		
	}
	
		
	
	
}
/controller/join.test
가입처리
실행됨
/controller/login.test
로그인처리
실행됨
/controller/logout.test
로그아웃처리
실행됨
/controller/delete.test
탈퇴처리
실행됨
/controller/update.test
수정처리
실행됨

doGet과 doPost를 하나로 모으는 방법은 똑같이 생긴 doAction메서드를 지정하고 각 메서드에서 호출해주면 된다.

하나로 처리되었으므로 utf-8은 doAction메서드에서만 하면 됨

request, response를 받으므로 메서드를 전부 사용할 수 있다.

 

 

1페이지에서 경로를 통일시켰기 때문에 가져와서 맞게 자르면 switch구문에서 사용하기가 편리해진다.