일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바조건문
- 컴퓨터공부
- java
- 화이자미열
- 자바컴포넌트
- 코로나백신
- GUI
- 화이자1일차
- 백준10171
- 백준고양이
- 백준 #백준알고리즘 #백준 Hello World #Hello World
- 스터디
- 백준구구단
- 자바
- 자바공부
- 자바컨테이너
- 화이자백신후기
- 포장방스터디
- 1일1로그
- 백준자바 #백준10718
- 백준고양이자바
- 자바화면구현
- 자바수업
- 백준2739
- 백준10718자바
- 화이자접종후기
- 자바이벤트
- 2739자바
- 자바토글버튼
- cs지식
- Today
- Total
Salted Caramel
[수업 88일차] 21.12.14 /Spring 4/ 04_MVC02/ 05_MVC03/ Spring 에서 바로 jsp 파일로 접근이 안되는 이유/root-context.xml/spring jdbctemplate 본문
[수업 88일차] 21.12.14 /Spring 4/ 04_MVC02/ 05_MVC03/ Spring 에서 바로 jsp 파일로 접근이 안되는 이유/root-context.xml/spring jdbctemplate
꽃무늬라떼 2021. 12. 16. 01:09https://devlog-wjdrbs96.tistory.com/209
[Spring] 스프링 웹 계층이란?
이번 글에서는 스프링은 어떤 계층이 존재하는지와 계층의 역할을 무엇인지, 프로젝트시 패키지를 어떻게 나누는 것이 좋은지에 대해 정리해보려 한다. 스프링의 계층은 Presentation Layer, Business,
devlog-wjdrbs96.tistory.com
package com.sist.mvc01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller //컨트롤러 에노테이션을 만듦
public class MyController {
/*
* ModelAndView 객체란?
* - ModelAndView 객체는 컨트롤러에 의해서 비지니스 로직이 수행이 되고 나면 대체적으로
* 사용자에게 반환되어 브라우저에 보여질 정보들이 만들어진다.
* 이때만들어진 정보를 view page로 넘겨주게 되는데
* 응답을 할 view page 정보와 전달할 데이터를 한꺼번에 저장하여 넘겨줄 때 사용함.
* */
@RequestMapping("/info")
public ModelAndView abc() {
ModelAndView mav = new ModelAndView();
mav.addObject("email", "hong@naver.com"); //정보를 ModelAndView에 저장.
mav.setViewName("member/email");//정보다 보여질 view page 설정
return mav;
}
}
같은 말
WEB-INF/views/member/email.jsp
= mav.setViewName("member/email");
mav.addObject("email", "hong@naver.com");
여기서 "email"을 키로 넘겨 주기 때문에 member/email.jsp에서 key 값인 email을 넘겨 받을 때 ${email} 이라고 작성하여 넘겨 받는다
<div align="center">
<h2>홍길동님의 메일 주소 : ${email }</h2>
</div>
WEB-INF/views/member/email.jsp
<%@ 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 align="center">
<h2>홍길동님의 메일 주소 : ${email }</h2>
</div>
</body>
</html>
http://localhost:8282/mvc01/info
Spring 에서 jsp 파일로 바로 접근이 안되는 이유(Run As)
Spring 에서는 보안이 중요하기 때문에 정보가 들어 있는 폴더들을 바로 접근 할 수가 없다.
1) servlet-context.xml
2) root-context.xml
위 두가지 파일이 중요하다. 그중 두번째인 root-context.xml에는 데이터베이스 로그인 정보가 들어있기 때문에 제일 중요해서 바로 jsp 파일로 접근하게 되면 그 정보를 알게 되기 때문에 spring 자체에서 막아버린 것이다.
http://localhost:8282/mvc02/input
http://localhost:8282/mvc02/inputOk?name=%ED%99%8D%EA%B8%B8%EB%8F%99&id=hong
05_MVC03
Mycontroller
@RequestMapping("/join")
public String join() {
return "join";
}
join.jsp
<%@ 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 align="center">
<hr width="50%" color="blue">
<h3>회원 가입 관련 입력 폼 페이지</h3>
<hr width="50%" color="blue">
<br> <br>
<form method="post"
action="<%=request.getContextPath() %>/join_ok">
<table border="1" cellspacing="0" width="400">
<tr>
<th>이 름</th>
<td> <input name="name"> </td>
</tr>
<tr>
<th>아이디</th>
<td> <input name="id"> </td>
</tr>
<tr>
<th>비밀번호</th>
<td> <input type="password" name="pwd"> </td>
</tr>
<tr>
<th>나 이</th>
<td> <input name="age"> </td>
</tr>
<tr>
<th>주 소</th>
<td> <input name="addr"> </td>
</tr>
<tr>
<th>이메일</th>
<td> <input name="email"> </td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="회원가입">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
http://localhost:8282/mvc03/join
package com.sist.model;
import lombok.Data;
@Data
public class Person {
private String name;
private String id;
private String pwd;
private int age;
private String addr;
private String email;
}
join.jsp 에서 작성한 name 을 그대로 작성.
package com.sist.mvc03;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping("/join")
public String join() {
return "join";
}
@RequestMapping("/join_ok")
public String joinOk(Person person, Model model) {
//String name = request.getParameter("name").trim();
//String id = request.getParameter("id").trim();
//String pwd = request.getParameter("pwd").trim();
//String age = request.getParameter("age").trim();
//String addr = request.getParameter("addr").trim();
//String email = request.getParameter("email").trim();
//model.addAttribute("userName", name);
//model.addAttribute("userId", id);
//model.addAttribute("userPwd", pwd);
//model.addAttribute("userAge", age);
//model.addAttribute("userAddr", addr);
//model.addAttribute("userEmail", email);
model.addAttribute("dto", person);
return "joinInfo";
}
}
model.addAttribute("dto", person);
입력 폼 창의 변수명을 다 받아 줄 수 있다.
=> 회원 가입에서 사용하기 좋음.
joinInfo.jsp
<%@ 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>
<div align="center">
<hr width="50%" color="tomato">
<h3>회원 로그 정보</h3>
<hr width="50%" color="tomato">
<table border="1" cellspacing="0" width="300">
<c:set var="dto" value="${dto }"/>
<c:if test="${!empty dto}">
<tr>
<th>회원 이름</th>
<td>${dto.getName() }</td>
</tr>
<tr>
<th>회원 아이디</th>
<td>${dto.getId()}</td>
</tr>
<tr>
<th>회원 비밀번호</th>
<td>${dto.getPwd() }</td>
</tr>
<tr>
<th>회원 나이</th>
<td>${dto.getAge() }</td>
</tr>
</c:if>
<c:if test="${empty dto }">
</c:if>
</table>
</div>
</body>
</html>
package com.sist.model;
import java.util.List;
/*
* EmpDAO 인터페이스 특징
* - 호출하는 클래스와 실제 DB에 접근하는 구현 클래스와의
* 직접적인 의존관계를 느슨하게 하기 위해서 인터페이스를 사용.
*/
public interface EmpDAO {
List<EmpDTO> getEmpList(); // 전체 사원 목록 관련 추상메서드.
int empInsert(EmpDTO dto); // 사원을 등록(추가)하는 추상메서드.
EmpDTO empCont(int empno); // 사원번호에 해당하는 사원의 정보를 조회하는 추상메서드.
int empUpdate(EmpDTO dto); // 특정 사원의 사원 정보를 수정하는 추상메서드.
int empDelete(int empno); // 특정 사원을 emp 테이블에서 삭제하는 추상메서드.
List<DeptDTO> getDeptList(); // 부서 테이블 전체 리스트 관련 추상메서드.
List<EmpDTO> getMgrList(); // 관리자만을 조회하는 추상메서드.
}
root-context.xml
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 스프링과 관련된 설정 파일을 설정하는 공간 :DB 연동과 관련 설정 공간 -->
<!-- 1.DataSource 정보 설정
==>DB와 관련된 connection(연결) 정보를 담고 있는 객체.
-->
<bean name="dataSource"
package com.sist.model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
// Spring에서 일반적으로 DAO 클래스에 적용되는 애노테이션
public class EmpDAOImpl implements EmpDAO {
// 자동으로 의존관계를 설정해 주는 애노테이션.
// 무조건 객체에 대한 의존을 주입해 주는 애노테이션.
@Autowired
private JdbcTemplate template;
String sql = null;
@Override
public List<EmpDTO> getEmpList() {
List<EmpDTO> list = null;
sql = "select * from emp order by empno";
return list = template.query(sql, new RowMapper<EmpDTO>() {
@Override
public EmpDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
EmpDTO dto = new EmpDTO();
dto.setEmpno(rs.getInt("empno"));
dto.setEname(rs.getString("ename"));
dto.setJob(rs.getString("job"));
dto.setMgr(rs.getInt("mgr"));
dto.setHiredate(rs.getString("hiredate"));
dto.setSal(rs.getDouble("sal"));
dto.setComm(rs.getDouble("comm"));
dto.setDeptno(rs.getInt("deptno"));
return dto;
}
});
}
@Override
public int empInsert(EmpDTO dto) {
// TODO Auto-generated method stub
return 0;
}
@Override
public EmpDTO empCont(int empno) {
// TODO Auto-generated method stub
return null;
}
@Override
public int empUpdate(EmpDTO dto) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int empDelete(int empno) {
// TODO Auto-generated method stub
return 0;
}
@Override
public List<DeptDTO> getDeptList() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<EmpDTO> getMgrList() {
// TODO Auto-generated method stub
return null;
}
}
[참고 자료]
https://devlog-wjdrbs96.tistory.com/209
[Spring] 스프링 웹 계층이란?
이번 글에서는 스프링은 어떤 계층이 존재하는지와 계층의 역할을 무엇인지, 프로젝트시 패키지를 어떻게 나누는 것이 좋은지에 대해 정리해보려 한다. 스프링의 계층은 Presentation Layer, Business,
devlog-wjdrbs96.tistory.com
'coding > [2021.08.02~2022.01.24] 수업복습' 카테고리의 다른 글
21.12.27 Python1 (0) | 2021.12.27 |
---|---|
[수업 87일차] 21.12.13 /Spring 3/ 한글 인코딩 처리/03_MVC01 (0) | 2021.12.21 |
[수업 86일차] 21.12.11 /Spring 2/ 스프링 라이브러리 파일/lombok 설치/ (0) | 2021.12.13 |
[수업 85일차] 21.12.10 / Spring 1 / 01_NonSpring/ 02_DI (0) | 2021.12.13 |
[수업 44일차] 21.10.13 / 06_JQuery(3)- end (0) | 2021.10.13 |