MVC 모델 2 작성해보기

정키·2023년 3월 30일
0

JSP

목록 보기
7/7

회원가입 , 로그인을 작성해보려고한다.

-index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <c:choose>
      <c:when test="${empty sessionScope.memberNumber}">
         <form action="member/join.me">
            <button>회원가입!</button>
         </form>
         <a href="http://localhost:8085/mvc/app/member/login.jsp">로그인하러 가기!</a>
      </c:when>
      <c:otherwise>
         <h1>${sessionScope.memberName} 님 환영합니다!</h1>
         <a href="http://localhost:8085/mvc/member/logoutOk.me">로그아웃</a>
      </c:otherwise>
   </c:choose>

</body>
</html>

회원가입과 로그인중 선택하여 들어갈 수 있는
welcomefile 인 index.jsp를 작성해주었다 .


서버를 실행시키면 이러한 화면이 뜰 것이다.

form 태그를 활용하여
회원가입을 누르면 member/join.me 으로 갈 수 있게 만들었고
앞에 member을 쓴 이유는 상위경로member을 통하여 다른곳에서 작성한 join.me를 구별하기 위해서 !

아래 로그인하러 가기 ! 는
a태그를 활용하여 http://localhost:8085/mvc/app/member/login.jsp로 이동할 수 있게 만들었다.
mvc path에 있는 app 안에 member 안에 login.jsp로 가주세요 라는 의미이다.

-webxml 작성하기

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>mvcTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
  <servlet-name>Member</servlet-name>
  <servlet-class>com.example.app.member.MemberFrontController</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>Member</servlet-name>
  <url-pattern>*.me</url-pattern>
  </servlet-mapping>
  
</web-app>

.*.me 형식의 url로 들어가면 member라는 서블렛이름을 가진게 있는데 이 member라는 서블렛은 뭐가 오든
com.example.app.member.MemberFrontController 여기로 보내준다는것을 의미한다 .

-MemberFrontController은 입력받은 값을 통제하는곳

package com.example.app.member;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemberFrontController extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}

	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("Member 프론트 컨트롤러 실행 !!");
		
		
		//현재 요청의 URI를 보여준다
	//	System.out.println(req.getRequestURI());
		
		//URL 루트 경로를 보여준다
		//System.out.println(req.getContextPath()); /mvc임 
			
		//우리가 필요한 것은 전체 URI에서 ContextPath를 제외시킨 부분이다.
		String target=req.getRequestURI().substring(req.getContextPath().length());
				System.out.println(target);
				
				//단순 값 비교는 if문보다 switch가 효율이 좋고 가독성도 좋다 . (특히 문자열)
				
				switch(target) {
				
				//경로에 /member를 포함하는 이유는 카테고리를 만든다고 생각하면 된다.
				case "/member/join.me":
					System.out.println("join!!!");
					req.getRequestDispatcher("/app/member/join.jsp").forward(req, resp);
					break;
				case "/member/joinOk.me":
					System.out.println("joinOk!!!");
					new JoinOkController().execute(req,resp);
					break;
				case "/member/login.me":
					req.getRequestDispatcher("/app/member/login.jsp").forward(req, resp);
					break;
				case "/member/loginOk.me":
					new LoginOkController().execute(req, resp);
					break;
					
				case "/member/logoutOk.me":
					new LogOutOkController().execute(req, resp);
					break;
				case "/member/checkIdOk.me":
					System.out.println("안녕");
					new CheckIdOkController().execute(req, resp);
					break;
				}
				
				
	}
	
}
profile
bbbu

0개의 댓글