gwooden_코린이
이클립스 JSP MVC 모델 1, 모델 2 코드 작성해보기 본문
728x90
스파게티코드 -> MVC1 -> MVC2
숫자가 홀수/짝수 출력 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>스파게티 코드</h1>
<form method="get" action="spa.jsp">
숫자 : <input type="text" name="num">
<input type="submit" value="전송">
</form>
<h1>MVC 모델 1</h1>
<form method="get" action="mvc1.jsp">
숫자 : <input type="text" name="num">
<input type="submit" value="전송">
</form>
</body>
</html>
- 기존 스파게티 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int num = Integer.parseInt(request.getParameter("num"));
%>
<%
if(num % 2 == 1) {
%>
<h1>홀</h1>
<%
} else {
%>
<h1>짝</h1>
<%
}
%>
</body>
</html>
- MVC 모델 1
MVC1 -> 자바코드랑 HTML 코드를 분리(하나의 JSP파일 안에)
컨트롤러 -> 자바
뷰 -> HTML
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- controller -->
<%
int num = Integer.parseInt(request.getParameter("num"));
String number = ""; //model
if(num % 2 == 1) {
number = "홀";
} else {
number = "짝";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mvc 1 페이지</title>
</head>
<body>
<!-- view -->
<h1><%=number %></h1>
</body>
</html>
- MVC 모델 2
컨트롤러 -> 자바파일(서블릿)
뷰 -> HTML(JSP)
index페이지에서 num을 입력해서 요청 -> Mvc2_Servlet 서블릿 Mvc2_Servlet 서블릿에 num 전달 받음 result는 Mvc2_Servlet 서블릿에서 만들어진 변수 dispathcher 전달 -> mvc2.jsp mvc2.jsp 최종 결과를 출력해주는 페이지 |
package test.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Mvc2_Servlet
*/
@WebServlet("/mvc2")
public class Mvc2_Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Mvc2_Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int num = Integer.parseInt(request.getParameter("num"));
String result="";
if(num % 2 == 0) {
result = "짝수";
} else {
result = "홀수";
}
request.setAttribute("result",result);
RequestDispatcher dispatcher = request.getRequestDispatcher("mvc2.jsp");
dispatcher.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1><%=request.getParameter("num") %></h1>
<h1><%=request.getAttribute("result") %></h1>
</body>
</html>
- 전체적인 흐름 살펴보기
1. index 페이지
- 값을 입력하고 요청
- num -> ?
2. 요청을 받는 페이지 (서블릿)
- Mvc2_gwooden.java
- index 요청한 num 값을 사용할 수 있음
- num값으로 홀짝 여부를 판별
- 결과를 출력하는 페이지로 해당 결과값(result)을 보내줘야 함
- redirect 방식 => 단순 페이지 이동(값 전달 X)
- forward 방식 이용 => 값 전달 가능
- dispatcher.forward(request, respone); -> index에서 요청받은 값만 전달
- result를 보내주지 않아서 mvc2.jsp페이지에서 사용을 못함
- request.setAtrtribute("result", result); -> request에 result값을 추가
- dispatcher.forward(request, response); -> 전달 (result가 추가된 상태)
3. mvc2.jsp 페이지
- mvc2.jsp가 실제 결과값을 출력 페이지
mvc 1 :
- 하나의 jsp 안에 자바코드와 html 코드가 모두 존재
mvc 2 :
- 자바코드는 서블릿 = Controller
- html 코드는 jsp = view
- result변수 : model
- 문제
id와 나이를 입력 접속 버튼을 누르면
만약 .id가 user면 : 사용자
id가 admin면 : 관리자
둘다 아니면 비회원
나이 : 연령대가 나오게
23 -> 20대
22 -> 30대
11 -> 10대
접속 페이지에 '20대' '사용자'님 환영합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="login">
id : <input type="text" name="id"> <br>
나이 : <input type="text" name="age"> <br>
<input type="submit" value="접속">
</form>
</body>
</html>
package loginServlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class login
*/
@WebServlet("/login")
public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public login() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
int age = Integer.parseInt(request.getParameter("age"));
String member;
if(id.equals("user")) {
member = "사용자";
} else if(id.equals("admin")) {
member = "관리자";
} else {
member = "비회원";
}
//두 번째 방법
/*
if(id.equals("user")) {
request.setAttribute("member", "사용자");
} else if(id.equals("admin")) {
request.setAttribute("member", "관리자");
} else {
request.setAttribute("member", "비회원");
}
*/
request.setAttribute("member", member);
String ages;
ages = age / 10 + "0대";
request.setAttribute("ages", ages);
//두 번쨰 방법
/*
if(age < 20) {
ages = "10";
} else if(age >= 20 && age < 31) {
ages = "20";
} else if(age >= 30 && age < 41) {
ages = "30";
} else {
ages = "40~";
}
*/
/*
if(age < 20) {
request.setAttribute("ages", "10");
} else if(age >= 20 && age < 31) {
request.setAttribute("ages", "20");
} else if(age >= 30 && age < 41) {
request.setAttribute("ages", "30");
} else {
request.setAttribute("ages", "40~");
}
*/
RequestDispatcher dispatcher = request.getRequestDispatcher("loginPage.jsp");
dispatcher.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>
<%=request.getParameter("id")%> <br>
<%=request.getParameter("age")%> <br>
<%=request.getAttribute("ages") %> <%=request.getAttribute("member") %>님 환영합니다.
</h1>
</body>
</html>
728x90
'JSP&Servlet' 카테고리의 다른 글
이클립스 JSP 세션(session) (0) | 2023.01.20 |
---|---|
이클립스 JSP/서블릿 쿠키(Cookie) (0) | 2023.01.20 |
이클립스 JSP 내장 객체 (0) | 2023.01.19 |
MVC 모델/패턴 모델 1 (0) | 2023.01.19 |
이클립스 JSP 지시자 (0) | 2023.01.19 |
Comments