< login.jsp >
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%-- 1) 입력받는 파일 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="loginProc.jsp" method="post">
<input type="text" name="userid"><br>
<input type="password" name="userpw"><br>
<input type="submit" value="로그인">
</form>
<!-- 로그인 페이지
사용자의 입력을 위해서 페이지가 필요함.
그 입력한 내용이 처리가 될려면 어떤 jsp 파일로 요청을 해야한다.
-->
</body>
</html>
< loginProc.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- 2) 처리하는 파일 --%>
<%
/*처리를 위한 JSP파일
로그인했을 때 로그인 form 을 보여주고,
로그인 프로세서에서 할일은 클라이언트한테 뭘 보여 줄 필요 X
요청을 받아서 어떻게 할 건지만 결정
브라우저를 위한 동적페이지가 아니라,
그냥 처리를 위해 존재.
*/
String userid = request.getParameter("userid");
String userpw = request.getParameter("userpw");
if (userid.equals(userpw)) {
// userid 하고 pw하고 동일하다면 로그인 성공
// 로그인 성공되면 다른 페이지로 redirect - ex) 메인페이지
// 로그인 실패되면 로그인 페이지로 이동
response.sendRedirect("/main.jsp");
} else {
response.sendRedirect("/login.jsp");
}
%>
JSP 파일을 요청하는 것과, Servlet을 요청하는 형식은 다름
< MVC 패턴 >
JSP: 이전에는 요청처리였다면,
보여주는 역할을 담당하게 됨
< LoginServlet.java>
package servletex;
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 LoginServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("로그인 서블릿 초기화");
}
@Override
public void destroy() {
System.out.println("로그인 서블릿 소멸");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("로그인 서비스!");
}
}
클라이언트의 요청을 처리하는 담당
= controller ( Servlet )
< web.xml >
<?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>youtube</display-name>
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>servletex.LoginServlet</servlet-class>
</servlet>
<!-- 경로 매핑 -->
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
< 내가 만든 서블릿 등록해주기 >
: web.xml
: tomcat에 servlet 등록
서비스 등록:
톰캣이 서비스를 사용해야겠다고 인식
경로매핑:
브라우저에서 뭐라고 요청했을 때
동작할건지
loginServlet은 브라우저에서 최상위에
login 이라는 요청이 들어왔을 때
( ex: localhost:8080/login )
동작한다는 뜻
< LoginServlet.java>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
서비스 지워주고,
요청 메서드 get을 사용해서
get 요청이 들어왔을 때
어떻게 처리하게 할 건지
get 요청: 주소창으로 서버를 요청하는 것
get으로 요청이 들어왔을 땐,
로그인 할 수 있는 페이지를 보여줘야 함.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
jsp 파일로 브라우저에 응답할 내용을 만들어서,
내부에서 포워딩
최초로 서버에
JSP 파일 요청했을 때
< 컨트롤러 >
request가 서버에 들어오면
서블릿 중에서 컨트롤러 역할을 하는 애를 만든다
컨트롤러가 요청을 받아서
요청이 뭔지 확인을 하고,
요청에 맞게 처리를 함.
이때, 모델을 사용
(비지니스로직 처리할 때)
< 모델 >
컨트롤러로부터 요청을 받아서
(메소드 호출)
그 요청을 처리
처리 결과는 return 된다
결과가 돌아가면 그 결과를
사용자에게 보여줘야 되므로
request 객체나
session 객체 같은 곳에다가
결과 데이터를 유지해 줌.
그 유지된 파일을 갖고
JSP가 처리될 수 있게끔
view 라는 걸 선택.
클라이언트의 최초 요청을 받아주는 것은
컨트롤러의 서블릿.
< 뷰 >
결과를 보여주는 뷰 JSP 파일도
포워딩을 받아서 요청을 처리하는 서블릿.
AddServlet1이 요청을 받으면,
요청으로부터 데이터를 꺼내고
처리하는 것 => 비지니스 로직
응답데이터도 응답해줌
(response)
< web.xml >
이 서블릿이 동작하기 위해서
이렇게 서블릿 등록을 해야함
addServlet1을 동작시킬것
언제? /add1이 들어왔을 때 동작
지금까지가 기능 하나(1개)의 설정.
만약 또다른 기능이 있다면,
xml 설정을 추가로 한다
기능을 추가로 할 때마다
등록 해야 함
그걸 일일이 추가로 하면
불편하니까
Front Controller 라는 개념을 추가해서 적용한다.
< Front Controller >
하나의 매핑(/)을 이용.
슬래시 하나에
내가 만든 서블릿을 모두 매핑.
클라이언트한테 오는 모든 요청들을
하나의 서블릿으로 다 받게 함
< controller.CommandHandler.java >
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface CommandHandler {
public String handlerAction(
HttpServletRequest request,
HttpServletResponse response
) throws ServletException, IOException;
}
동작을 하고 동작을 할 때
request와 response 를 받아서 동작하고
결과는 String을 반환함
< controller. AddHandler.java >
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import model.AddService;
public class AddHandler implements CommandHandler {
private AddService addService = new AddService();
@Override
public String handlerAction(HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
throws ServletException, IOException {
int n1 = Integer.parseInt(request.getParameter("n1"));
int n2 = Integer.parseInt(request.getParameter("n2"));
int result = addService.add(n1, n2);
request.setAttribute("result", result);
return "/WEB-INF/add.jsp";
}
}
서비스 + 서비스
요청이 들어왔을 때
파라미터를 통해서 더하기 기능을 시킴
결과물은 request 에 담아두고
view 경로를 반환하게 한다.
< controller. MinHandler.java >
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.MinService;
public class MinHandler implements CommandHandler {
private MinService minService = new MinService();
public String handlerAction(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int n1 = Integer.parseInt(request.getParameter("n1"));
int n2 = Integer.parseInt(request.getParameter("n2"));
int result = minService.min(n1, n2);
request.setAttribute("result", result);
return "/WEB-INF/min.jsp";
}
}
MinHandler 가 빼기 기능에 대한 서비스를 갖고 있고,
요청파라미터를 이용해서
빼기 기능을 동작시켜서
결과물을 request에 담고
min.jsp 라는 경로를 반환.
컨트롤러가
add 인지
min 인지
구분해주는 역할을 함
클라이언트 요청 받아서
응답줄 수 있는 HttpServlet
HttpServlet은 요청이 들어왔을 때
요청이 무엇인 지 구분해야하고,
요청에 맞는 기능으로 연결을 해 줘야 한다.
commandHandlerMap에 HashMap 객체를 생성해두고,
문자열과 매핑되는 객체를 등록해준다
"/add", new AddHandler());
'> 프로그래밍 언어 > JSP' 카테고리의 다른 글
[Mybatis] 설치 및 시작 (0) | 2023.04.04 |
---|---|
[ IT핥기] JSP! 독학! (2) (0) | 2023.03.29 |
[ IT핥기] JSP! 독학! (1) (0) | 2023.03.28 |
[JSP] JSP시작, 톰캣 설치하기 (0) | 2023.03.28 |
[servlet/JSP] 1강 ~ 7강 (0) | 2023.03.24 |