웹개발 교육/jsp

[64일] jsp (46) - MVC 패턴 (페이지 이동)

ewok 2022. 10. 27. 17:43

MVC 패턴

Backend : Spring Framework, Struts Framework

Frontend : AngularJS, vue, react ...

 

 

loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>loginForm.jsp</title>
</head>
<body>
	<h3>* 회원 로그인 *</h3>
	<form action="">
		아이디 : <input type="text" name="uid"><br>
	    비번  : <input type="password" name="upw"><br>
	           <input type="submit" value="확인">
	</form>
	<!-- 
		1) JSP 페이지 호출
		   http://localhost:9090/basic05_mvc/control/loginForm.jsp
		   
		2) 서블릿을 이용해서 JSP 페이지 호출
		   http://localhost:9090/basic05_mvc/control/login.do
	 -->
</body>
</html>

 

LoginForm.java

package net.control;

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 LoginForm extends HttpServlet {
	
	//결과확인 http://localhost:9090/basic05_mvc/login.do
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//전송방식 method=get 요청
		
		//페이지 이동
		resp.sendRedirect("control/loginForm.jsp");
		
	}//doGet() end
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//전송방식 method=post 요청
		super.doPost(req, resp);
	}//doPost() end
	
	
	
}//class end

 

web.xml

  <!-- loginForm.jsp 호출하는 서블릿 등록 -->
  <servlet>
  	<servlet-name>loginform</servlet-name>
  	<servlet-class>net.control.LoginForm</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>loginform</servlet-name>
  	<url-pattern>/login.do</url-pattern>
  </servlet-mapping>

LoginForm.java

loginForm.jsp로 이동하도록 하였기 때문에 이전과 달리 url에 login.do가 아닌 jsp가 나온다.

 

LoginForm.jsp

2) 방식으로 하면 jsp가 아닌 login.do로 url이 나온다.

 

 

 

loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>loginForm.jsp</title>
</head>
<body>
	<h3>* 회원 로그인 *</h3>
	<form method="post" action="loginproc.do">
		아이디 : <input type="text" name="uid"><br>
	    비번  : <input type="password" name="upw"><br>
	           <input type="submit" value="확인">
	</form>
	<!-- 
		1) JSP 페이지 호출
		   http://localhost:9090/basic05_mvc/control/loginForm.jsp
		   
		2) 서블릿을 이용해서 JSP 페이지 호출
		   http://localhost:9090/basic05_mvc/control/login.do
	 -->
</body>
</html>

 

변경

 

web.xml

  <!-- action="loginproc.do" 서블릿 등록 -->
  <servlet>
  	<servlet-name>loginproc</servlet-name>
  	<servlet-class>net.control.LoginProc</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>loginproc</servlet-name>
  	<url-pattern>/loginproc.do</url-pattern>
  </servlet-mapping>

 

LoginProc.java

package net.control;

import java.io.IOException;
import java.io.PrintWriter;

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

public class LoginProc extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//method=post방식이면 service() 함수가 doPost() 함수를 호출
		try {
			//1)한글 인코딩
			req.setCharacterEncoding("utf-8");
			
			//2)사용자가 요청한 정보를 req에서 가져와서 변수에 옮겨 담기
			String uid = req.getParameter("uid").trim();
			String upw = req.getParameter("upw").trim();
			
			//3)요청한 사용자에게 응답
			resp.setContentType("text/html; charset=UTF-8");
			PrintWriter out = resp.getWriter();
			out.print(" <!DOCTYPE html> ");
			out.print(" <html> ");
			out.print(" <head> ");
			out.print(" 	<meta charset='UTF-8'> ");
			out.print(" 	<title>환영합니다</title> ");
			out.print(" </head> ");
			out.print(" <body> ");
			out.print(" 	<h3>* 로그인 결과 *</h3> ");
			out.print(" 	아이디 : <strong> " + uid + "</strong>");
			out.print(" 	<hr> ");
			out.print(" 	비번 : <strong> " + upw + "</strong>");
			out.print(" </body> ");
			out.print(" </html> ");
			
		} catch (Exception e) {
			System.out.println("요청실패 : " + e);
		}//end
	}//doPost() end
}//class end

 

부모 페이지의 값을 자식 페이지에서도 공유하고 싶을 때 2번 방법을 사용해야 한다.

 

기존에 있던 LoginProc.java를 LoginProc_v1.java로 변경하고

LoginProc.java를 새로 만들어 작업한다.

 

LoginProc.java

package net.control;

import java.io.IOException;

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

public class LoginProc extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//method=post 방식이면 service() 함수가 doPost() 함수를 호출함
		try {
			
			req.setCharacterEncoding("utf-8");
			String uid = req.getParameter("uid").trim();
			String upw = req.getParameter("upw").trim();
			
			if(uid.equals("itwill") && upw.equals("1234")) {
				//로그인 성공했을 때
				req.setAttribute("r_uid", uid);
				req.setAttribute("r_upw", upw);
			} else {
				//로그인 실패했을 때
				req.setAttribute("r_uid", "guest");
				req.setAttribute("r_upw", "guest");
			}//if end
			
			//뷰페이지 이동
			String view = "control/loginResult.jsp";
			RequestDispatcher rd = req.getRequestDispatcher(view);
			rd.forward(req, resp);
			
		} catch (Exception e) {
			System.out.println("요청실패 : " + e);
		}//end
	}//doPost() end
}//class end

https://ewok.tistory.com/209

 

[55일] jsp (23) - SCOPE

● [페이지 이동] 1) 2) location.href="" 3) 4) 5) response.sendRedirect("") 02_scopeTest.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> 02_..

ewok.tistory.com

 

loginResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>loginResult.jsp</title>
</head>
<body>
	<h3>* 회원 로그인 결과 *</h3>
	
	1)JSP<br>
	아이디 : <%=request.getAttribute("r_uid")%><br>
	비번 : <%=request.getAttribute("r_upw")%><br>
	<hr>
	
	2)EL(표현언어)<br>
	아이디 : ${requestScope.r_uid}<br>
	비번 : ${requestScope.r_upw}<br>
	
	<!-- Scope는 생략 가능하다 -->
	아이디 : ${r_uid}<br> 비번 : ${r_upw}<br>
	
</body>
</html>