회원가입 , 로그인을 작성해보려고한다.
-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;
}
}
}