GDJ 24/05/29 (JSTL, EL, DTO, Lombok)

kimuki·2024년 5월 29일
post-thumbnail
forward (서버주체) : 요청url : "/"로 시작
sendRedirect (클라이언트주체) : 요청url : context 전체 "/mvc0529/"로 시작

lombok
@Data 어노테이션 제대로 적용되어 있는 지 확인하기 위해
>>
window - show view - outline
getter, setter, constructor 생성 잘 되어있는지 확인

JSTLController.java (Controller)

package com.example.mvc0529.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class JSTLController {
	
	@GetMapping("/jstlTest")
	public String jstlTest() {
		
		return "jstlTest";
	}
}

jstlTest.jsp (View)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- == request.setAttribute() -->
	<c:set var="ban" value="GDJ80"></c:set>
	
	<c:out value="${ban}"></c:out>
	
	<a href="/mvc0529/jstlTest">jstlTest</a>						<!-- 일반적인 a 태그 -->
	<a href="<%=request.getContextPath()%>/jstlTest">jstlTest</a>	<!-- JAVA code 사용한 a 태그 -->
	<a href="${pageContext.request.contextPath}">jstlTest</a>		<!-- EL 사용한 a 태그 -->
	<br><br>
	
	<c:set var="path" value="${pageContext.request.contextPath}"></c:set>	<!-- JSTL 사용한 a 태그 -->
	${pageContext.request.contextPath}<br>
	${path}
	<br><br>
	
	<c:remove var="path"/>
	remove 후 : ${path}
	<br><br>
	
	<c:set var="today" value="<%=new java.util.Date()%>"></c:set>
	현재 날짜 : ${today}
</body>
</html>

jstlTest.jsp 출력결과

Member.java (DTO)

package com.example.mvc0529.dto;

import lombok.Data;

@Data
public class Member {
	private int id;
	private String name;
}

TestController.java (Controller)

package com.example.mvc0529.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.example.mvc0529.dto.Member;

import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpSession;

@Controller
public class TestController {
	
	@GetMapping("/test")
	public String test(Model model) {	// Model implements Map
		
		// Model : 사용자가 목적으로 하는 값 (뷰단 출력 대상)
		// Servlet API : request.setAttribute(이름, 모델값)
		System.out.println(this.getClass() + "test()");
		
		boolean a = false;
		model.addAttribute("a", a);
		
		int b = 19;
		model.addAttribute("b", b);

		double c = 3.14;
		model.addAttribute("c", c);

		String d = "goodee";
		model.addAttribute("d", d);

		Object e = null;
		model.addAttribute("e", e);
		
		return "test";
	}
	
	@GetMapping("/test2")
	public String test2(HttpSession session) {
		
		// request, session 은 Model 사용 가능
		// --> 수업에서는 request 만 Model 사용
		// Servlet API : request.getSession();
		
		session.setAttribute("name", "goodee");
		session.setAttribute("sessionName", "구디");
		
		ServletContext application = session.getServletContext();
		application.setAttribute("contextYear", 2002);
		
		return "test2";
	}
	
	@GetMapping("/test3")
	public String test3(Model model, @RequestParam(value = "no") int no) {
		
		System.out.println("no : " + no);
		// /test3?no=777
		// Servlet API : request.getParameter("no");
		// /test3?ck=a&ck=b&ck=c
		// Servlet API : request.getParamValues("ck");
		
		model.addAttribute("no", no);
		
		return "test3";
	}
	
	// 객체타입
	@GetMapping("/test4")
	public String test4(Model model) {
		
		Member m = new Member();
		m.setId(1);
		m.setName("홍길동");
		
		model.addAttribute("member", m);
		
		return "test4";
	}
	
	// 컬렉션 타입 (List, Set, Map)
	@GetMapping("/test5")
	public String test5(Model model) {
		
		ArrayList<String> strList = new ArrayList<>();
		strList.add("하영");
		strList.add("지원");
		strList.add("채영");
		
		HashSet<String> strSet = new HashSet<>();
		strSet.add("새롬");
		strSet.add("규리");
		strSet.add("나경");
		
		HashMap<String, Object> myMap = new HashMap<>();
		myMap.put("no", 9);
		myMap.put("name", "프미나");
		
		model.addAttribute("strList", strList);
		model.addAttribute("strSet", strSet);
		model.addAttribute("myMap", myMap);
		
		List<Member> memberList = new ArrayList<>();
		Member m1 = new Member();
		Member m2 = new Member();
		
		m1.setId(1);
		m1.setName("홍길동");
		
		m2.setId(2);
		m2.setName("김욱");
		
		memberList.add(m1);
		memberList.add(m2);
		
		model.addAttribute("memberList", memberList);
		
		return "test5";
	}
}

test.jsp (View)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>JAVA 표현식</h2>
	<div>a : <%=request.getAttribute("a")%></div>
	<div>b : <%=request.getAttribute("b")%></div>
	<div>c : <%=request.getAttribute("c")%></div>
	<div>d : <%=request.getAttribute("d")%></div>
	<div>e : <%=request.getAttribute("e")%></div>
	
	<h2>EL 표현식</h2>
	<div>a : ${a}</div>
	<div>b : ${b}</div>
	<div>c : ${c}</div>
	<div>d : ${d}</div>
	<div>e : ${e}</div>	
	<!-- null 값을 가지고는 있지만 출력은 하지않음 -->
	<!-- null 값을 표현하는것에는 위험부담이 있음 ex) NullPointerException 발생 -->
	
	<h2>EL 연산자</h2>
	<div>$(b+20) : ${b+20}</div>
	<div>$b + $c : ${b} + ${c}</div>
	<div>$(b+c) : ${b+c}</div>
	<div>a == false ? : ${a == false}</div>
	<div>b > 20 ? : ${b > 20}</div>
	<div>b / 5 != 3 ? : ${b/5 != 3}</div>
	
	<h2>EL 논리연산자</h2>
	<div>${b/5 != 3 && b > 10}</div>
	<div>${a || e == null}</div>
	<div>${empty e}</div>
	
	<h2>EL 삼항연산자</h2>
	<div>${b>0 ? '양수' : '음수'}</div>
</body>
</html>

test.jsp 출력결과

test2.jsp (View)

<%@ 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>Session scope</h1>
	<div>${sessionScope.name}</div>	<!-- EL을 사용하면 Scope 생략가능 -->
	<div>${name}</div>
	<!-- name 을 찾기위해 request, session, application 검색 -->
	<div>${sessionName}</div>
	<div>${contextYear}</div>
</body>
</html>

test2.jsp 출력결과

test3.jsp (View)

<%@ 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>
	<div>no : ${no}</div>			<!-- ${requestScope.no}, ${request.getAttribute("no")}-->
	<div>no : ${param.no}</div>		<!-- ${request.getParameter("no")} -->
</body>
</html>

test4.jsp (View)

<%@ 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>
	<div>member : ${member}</div>
	<div>id = ${member.id}</div>
	<div>name = ${member.name}</div>
</body>
</html>

test4.jsp 출력결과

test5.jsp (View)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>List 출력</h2>
	<div>${strList}</div>
	<div>${strList[0]}</div>
	<div>${strList[1]}</div>
	<div>${strList[2]}</div>
	<div>
		<c:forEach var="mList" items="${strList}">
			${mList}
		</c:forEach>
	</div>
	
	<h2>Set 출력</h2>	<!-- Set 은 index 나 key 가 없기 때문에 개별출력 불가 -->
	<div>${strSet}</div>
	<div>
		<c:forEach var="mSet" items="${strSet}">
			${mSet}
		</c:forEach>
	</div>
	
	<h2>Map 출력</h2>
	<div>${myMap}</div>
	<div>${myMap.no}</div>
	<div>${myMap.name}</div>
	<div>${myMap["name"]}</div>
	<div>
		<c:forEach var="mMap" items="${myMap}">
			${mMap}
		</c:forEach>
	</div>
	
	<h2>멤버 목록</h2>
	<div>${memberList}</div>
	<div>${memberList[0].id}</div>
	<div>${memberList[0].name}</div>
	<div>${memberList[1].id}</div>
	<div>${memberList[1].name}</div>
</body>
</html>

test5.jsp 출력결과


employees application.properties

spring.application.name=employees

# 서버설정
server.servlet.context-path=/employees
server.port=80

# 뷰 설정
# /WEB-INF/view/~~~.jsp
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

# 커넥션 풀
# datasource : 커넥션 풀을 구현하기 위한 데이터타입
# datasource는 Connection의 배열로 구성됨
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/employees
spring.datasource.username=root
spring.datasource.password=java1234

EmployeesDTO.java (DTO)

package com.gd.employees.dto;

import lombok.Data;

@Data
public class EmployeesDTO {
	
	private int empNo;
	private String birthDate;
	private String firstName;
	private String lastName;
	private String gender;
	private String hireDate;
}

EmployeesController.java (Controller)

package com.gd.employees.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import com.gd.employees.dto.EmployeesDTO;
import com.gd.employees.mapper.EmployeesMapper;

@Controller
public class EmployeesController {

	@Autowired
	private EmployeesMapper EmployeesMapper;
	
	@GetMapping("/employeesList")
	public String employeesList(Model model) {
		
		List<EmployeesDTO> list = EmployeesMapper.selectEmployeesListByPage();
		
		model.addAttribute("list", list);
		
		return "employeesList";
	}
}

EmployeesMapper.java (Mapper - Interface)

package com.gd.employees.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.gd.employees.dto.EmployeesDTO;

@Mapper
public interface EmployeesMapper {

	public List<EmployeesDTO> selectEmployeesListByPage();
}

EmployeesMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gd.employees.mapper.EmployeesMapper">
	<select id="selectEmployeesListByPage" resultType="com.gd.employees.dto.EmployeesDTO">
		SELECT
			emp_no empNo,
			birth_date birthDate,
			first_name firstName,
			last_name lastName,
			gender,
			hire_date hireDate
		FROM
			employees
		LIMIT 0, 10
	</select>
</mapper>

employeesList.jsp (View)

<%@ 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>employees List</h1>
	<div>${list}</div>
</body>
</html>

employeesList.jsp 출력결과

profile
Road OF Developer

0개의 댓글