JAVA 교육/Servlet

2019/09/30 loginForm.jsp (mvc) test

조별하 2019. 9. 30. 13:20

1. loginForm.jsp

평소 만드는 로그인 폼을 간단하게 만들어 보도록 하자 단, action으로 값을 보내주지 않는다

2. loginForm.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 LoginForm extends HttpServlet {


	//결과확인
  	//http://localhost:8090/mvcTest/login.do

	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// method= get 방식 요청
		// 페이지 이동
			
		//1)
			//http://localhost:8090/mvcTest/login.do
			//resp.sendRedirect("control/loginForm.jsp");
			
		//2)
			String view="control/loginForm.jsp";
			RequestDispatcher rd=req.getRequestDispatcher(view);
			rd.forward(req, resp);
	}//doGet() end

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// method= post 방식 요청
	}//dopost end

}//class end

1) loginForm.java 생성시

"extends HttpServlet" 를 붙여서 HttpServlet 의 부모클래스를 상속받는다

2) HttpServlet 추상메소드 override 

override 버튼으로 HttpServlet  에서의 doGet() 과 doPost() 를 오버라이드 해준다

3) resp.sendRedirect("control/loginForm.jsp")

를 입력해 주어 위에서 생성해 주었던 loginForm.jsp로 페이지 이동을 해준다

4) web.jsp 호출 servlet 등록

<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>

 

http://localhost:8090/mvcTest/login.do

 

 

5) RequestDispatcher rd=req.getRequestDispatcher(view);
   rd.forward(req, resp);

를 입력해 주어 위에서 생성해 주었던 loginForm.jsp로 페이지 이동을 해준다

String view="control/loginForm.jsp";
RequestDispatcher rd=req.getRequestDispatcher(view);
rd.forward(req, resp);

 

http://localhost:8090/mvcTest/login.do

▶ url주소 다르게 나타난다.

 

3. loginForm.jsp

다른방식으로, method 를 post 방식으로 바꾸고, action을 loginproc.do 로 설정을 해 준다

1) loginproc.do servlet 등록

<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>

2) loginProc.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 LoginProc extends HttpServlet{

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// method= post 방식 요청
		//<form method=post action=loginproc.do>
		try{
			//1) 한글 인코딩
			resp.setCharacterEncoding("UTF-8");
			//2) 사용자가 요청한 정보를 변수에 옮겨담기
			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.println("<!DOCTYPE html>");
			out.println("	<html>");
			out.println("	<head>");
			out.println("	<meta charset='UTF-8'>");
			out.println("	<title>로그인 결과</title>");
			out.println("	</head>");
			out.println("	<body>");
			out.println("	아이디 : <strong>"+uid+"<strong>");
			out.println("	<hr>");
			out.println(" 비번 : <strong>"+upw+"<strong>");
			out.println("</body>");
			out.println("</html>");
			out.close();//자원반납
			
		}catch(Exception e){System.out.println("요청실패"+e);}
		
	}//doPost() end
			
}//class end

 1. doPost 를 오버라이드로 만들어 준다

2. resp.setCharacterEncoding("UTF-8"); 인코딩 

 

 

 

LoginResult.jsp

package net.control;

import java.io.IOException;

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

public class LoginProc extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(req,resp);
	}//doGet() end

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(req,resp);
	}//doPost() end
	
	protected void process(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		try{
			req.setCharacterEncoding("UTF-8");
			String uid=req.getParameter("uid").trim();
			String upw=req.getParameter("upw").trim();
			
			//공유공간: request, session, application
			//session 객체선언
			HttpSession session=req.getSession();
			//application 객체선언
			ServletContext applicatioin=req.getServletContext();
			
			if(uid.equals("WinterNight")&& upw.equals("1234")){
				//로그인이 성공
				req.setAttribute("r_uid", uid);
				req.setAttribute("r_upw", upw);
				session.setAttribute("s_uid",uid);
				session.setAttribute("s_upw",upw);
				applicatioin.setAttribute("a_uid", uid);
				applicatioin.setAttribute("a_upw", upw);
				
				req.setAttribute("msg", "로그인성공~!~!");
				req.setAttribute("img", "<img src='control/face-glasses.png'>");
				
			}else{
				//로그인 실패
				req.setAttribute("r_uid", "guest");
				req.setAttribute("r_upw", "guest");
				session.setAttribute("s_uid","guest");
				session.setAttribute("s_upw","guest");
				applicatioin.setAttribute("a_uid", "guest");
				applicatioin.setAttribute("a_upw", "guest");
				
				req.setAttribute("msg", "로그인실패~!~!");
				req.setAttribute("img", "<img src='control/face-surprise.png'>");
			}//if end
			
			//뷰페이지 이동
			String view="control/loginResult.jsp";//위에서 받은 uid,upw 값을 loginResult.jsp로 이동을 하는데 그 값을 공유하는 공간이 필요하다
			RequestDispatcher rd=req.getRequestDispatcher(view);
			rd.forward(req,resp);
			
		}catch(Exception e){System.out.println("요청 실패"+e);}
	}//process() end
		
	
}//class end

loginProc.jsp   에서 전달받은 값을 이용할 loginResult.jsp를 만들어 주자

loginResult.jsp에서 loginProc 에 올려져 있는 값을 불러 출력 해주었다.