국비학원_63일차(Spring MVC-유효성, 게시판)

써니·2022년 10월 21일
0

spring

목록 보기
5/23

🌞Spring MVC

🔻och07_MVC043

[com.oracle.mvc043]

  • RedirectController.java
package com.oracle.mvc043;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class RedirectController {
	
	private static final Logger logger = LoggerFactory.getLogger(RedirectController.class);
	
	@RequestMapping("studentConfirm")
	public String studentRedirect(HttpServletRequest httpServletRequest, Model model) {
		
		logger.info("studentConfirm start..");
		
		String id = httpServletRequest.getParameter("id");
		logger.info("studentConfirm id->{}", id);
		
		String pw = "1234";
		
		model.addAttribute("id", id);
		model.addAttribute("pw", pw);
		// 성공이라고 가정 -- 같은 RedirectController 내 메소드로 이동
		if(id.equals("abc")) {
			return "redirect:studentSuccess";
		}
		
		//아니면 실패
		return "redirect:studentError";
	}
	
	@RequestMapping("studentSuccess")
	public String studentSuccess(HttpServletRequest request, Model model) {
		logger.info("studentSuccess start...");
		
		String id = request.getParameter("id");
		String password = request.getParameter("pw");
		logger.info("studentSuccess id->{}", id);
		logger.info("studentSuccess password->{}", password);
		model.addAttribute("id", id);
		model.addAttribute("password", password);
		
		return "student/studentSuccess";
	}
	
	@RequestMapping("studentError")
	public String studentError(HttpServletRequest request, Model model) {
		logger.info("studentError start...");
		String id = request.getParameter("id");
		model.addAttribute("id", id);
		return "student/studentError";
	}
}

📂student

  • studentError.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>
	넌 누구냐<p>
	<h1>20년간 만두만</h1> 주고...
	id : ${id}
</body>
</html>

⭕성공

❌실패




🔻och07_MVC05

📝Validator(유효성검사) - interface

[com.oracle.mvc05.dto]

  • Student.java
package com.oracle.mvc05.dto;

public class Student {
	private String name;
	private String strId;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStrId() {
		return strId;
	}
	public void setStrId(String strId) {
		this.strId = strId;
	}
}

[com.oracle.mvc05]

  • StudentValidator.java

interface - Validator

return Student.class.isAssignableFrom(student); -> 검증할 것을 Validator에게 알려줌

package com.oracle.mvc05;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import com.oracle.mvc05.dto.Student;

public class StudentValidator implements Validator {
	
	// 검증할 객체의 클래스 타입 정보
	@Override
	public boolean supports(Class<?> student) {
		return Student.class.isAssignableFrom(student);
	}
	
	// validate 함수
	@Override
	public void validate(Object target, Errors errors) {
		System.out.println("StudentValidator validate() start...");
		Student student = (Student) target;
		String studentName = student.getName();
		if(studentName == null || studentName.trim().isEmpty()) {
			System.out.println("studentName is null or empty");
			System.out.println("validate -> 회원 이름을 입력하세요...");
			errors.rejectValue("name", "회원 이름 공백 또는 NULL 오류");
		}
		String studentId = student.getStrId();
		if(studentId == null || studentId.trim().isEmpty()) {
			System.out.println("studentId is null or empty");
			System.out.println("validate -> strId을 입력하세요...");
			errors.rejectValue("strId", "회원 이름 공백 또는 NULL 오류");
		}
	}

}

  • StudentController.java
package com.oracle.mvc05;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;

import com.oracle.mvc05.dto.Student;

@Controller
public class StudentController {
	private static final Logger logger = LoggerFactory.getLogger(StudentController.class);
	
	// studentForm으로 이동
	@RequestMapping("/studentForm")
	public String studentForm() {
		logger.info("studentForm start...");
		return "studentForm";
	}
	
	@RequestMapping("/student/create")
	public String studentCreate(Student student, BindingResult result, Model model) {
		String page = "studentDonePage";
		logger.info("/student/create start...");
		StudentValidator validator = new StudentValidator();
		validator.validate(student, result);
		logger.info("result Message->{}", result.toString());
		System.out.println("result Message getFieldError->"+result.getFieldErrors("name"));
		String name = "";
		String id = "";
		if(result.hasErrors()) {
			if(result.hasFieldErrors("name")) {
				System.out.println("result.hasErrors1->"+result.getFieldError("name"));
				FieldError fieldError1 = result.getFieldError("name");
				name = fieldError1.getCode();
				
				model.addAttribute("nameErr", name);
			}
			if(result.hasFieldErrors("strId")) {
				// errors.rejectValue("strId", "회원 이름 공백 또는 NULL 오류"); -> strId
				System.out.println("result.hasErrors2->"+result.getFieldError("strId"));
				FieldError fieldError2 = result.getFieldError("strId");
				id = fieldError2.getCode();
				
				model.addAttribute("idErr", id);
			}
			page = "studentForm";
		} else {
			model.addAttribute("student", student);
		}
		
		System.out.println("result Message -> End");
		logger.info("result page->{}", page);
		logger.info("result name->{}", name);
		
		return page;
	}

}

📂views

  • studentForm.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>

	<%
		String context = request.getContextPath();
	%>
	context : <%=context%> <p></p>
	
	<c:if test="${nameErr != ''}">
		${nameErr}
	</c:if>
	<c:if test="${idErr != ''}">
		${idErr}
	</c:if>
	
	<form action="<%=context%>/student/create">
		이름 : <input type="text" name="name"> </br>
		아이디 : <input type="text" name="strId"> </br>
		<input type="submit" value="전송">
	</form>

</body>
</html>

📂views

  • studentDonePage.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>
	<h1>student 정상 검증</h1></br> 
	이름 : ${student.name}</br>
	아이디 : ${student.strId }
</body>
</html>

⭕정상

❌오류

👉 legacy-anno 참고문서1
👉 회원가입 참고문서2
👉 spring validation 참고문서3
👉참고필수




🔻och07_MVCBoard

😥legacy oracle jar 설치 오류

⛔문제
-> oracle jar가 포함된 pom.xml를 복붙 하고 오류가 남

✍해결방법
1. 기존의 c:admin/사용자/.m2 폴더를 삭제 후 잘 돌아가는 폴더를 복사 붙여넣기 한다.
2. pom.xml에 아래 코드 넣기
💢해봤지만 되지 않는당...

<!-- 	<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc7</artifactId>
			<version>12.1.0.2.0</version>
			<scope>system</scope>
			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc7.jar</systemPath>
		</dependency> 
 -->	



💾MVC_BOARD




[com.oracle.oMVCBoard.dto]

  • BDto.java
package com.oracle.oMVCBoard.dto;

import java.sql.Timestamp;

public class BDto {
	int bId;
	String bName;
	String bTitle;
	String bContent;
	Timestamp bDate;
	int bHit;
	int bGroup;
	int bStep;
	int bIndent;
	
	public BDto() {
	}

	public BDto(int bId, 	String bName, String bTitle, String bContent, 
				Timestamp 	bDate, 		  int bHit, 
				int bGroup, int bStep, 	  int bIndent) {
		this.bId = bId;
		this.bName = bName;
		this.bTitle = bTitle;
		this.bContent = bContent;
		this.bDate = bDate;
		this.bHit = bHit;
		this.bGroup = bGroup;
		this.bStep = bStep;
		this.bIndent = bIndent;
	}

	public int getbId() {
		return bId;
	}
	public void setbId(int bId) {
		this.bId = bId;
	}
	public String getbName() {
		return bName;
	}
	public void setbName(String bName) {
		this.bName = bName;
	}
	public String getbTitle() {
		return bTitle;
	}
	public void setbTitle(String bTitle) {
		this.bTitle = bTitle;
	}
	public String getbContent() {
		return bContent;
	}
	public void setbContent(String bContent) {
		this.bContent = bContent;
	}
	public Timestamp getbDate() {
		return bDate;
	}
	public void setbDate(Timestamp bDate) {
		this.bDate = bDate;
	}
	public int getbHit() {
		return bHit;
	}
	public void setbHit(int bHit) {
		this.bHit = bHit;
	}
	public int getbGroup() {
		return bGroup;
	}
	public void setbGroup(int bGroup) {
		this.bGroup = bGroup;
	}
	public int getbStep() {
		return bStep;
	}
	public void setbStep(int bStep) {
		this.bStep = bStep;
	}
	public int getbIndent() {
		return bIndent;
	}
	public void setbIndent(int bIndent) {
		this.bIndent = bIndent;
	}
}

[com.oracle.oMVCBoard.dao]

  • BDao.java
package com.oracle.oMVCBoard.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import com.oracle.oMVCBoard.dto.BDto;

public class BDao {
	DataSource dataSource;
	
	public BDao() {
		
		try {
			Context context = new InitialContext();
			dataSource = (DataSource) context.lookup("java:comp/env/jdbc/OracleDB");
		} catch (NamingException e) {
			System.out.println("생성자 dateSource-->" + e.getMessage() );
			e.printStackTrace();
		}
		
	}

	public ArrayList<BDto> boardList() {
		ArrayList<BDto> bList = new ArrayList<BDto>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		System.out.println("BDao boardList start...");
		
		
		try {
			conn = dataSource.getConnection();
			String sql = "SELECT bId, bName, bTitle, bContent, bDate, bHit,bGroup, bStep, bIndent FROM mvc_board order by bGroup desc, bStep asc";
			pstmt = conn.prepareStatement(sql);
			System.out.println("boardList sql->"+sql);
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				int bId = rs.getInt("bId");
				String bName = rs.getString("bName");
				String bTitle = rs.getString("bTitle");
				String bContent = rs.getString("bContent");
				Timestamp bDate = rs.getTimestamp("bDate");
				int bHit = rs.getInt("bHit");
				int bGroup = rs.getInt("bGroup");
				int bStep = rs.getInt("bStep");
				int bIndent = rs.getInt("bIndent");
				BDto dto = new BDto(bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent);
				bList.add(dto);
			}
		} catch (Exception e) {
			System.out.println("list dataSource-->"+e.getMessage());
		} finally {
			try {
				if( rs	 != null) 	  rs.close();
				if( pstmt!=	null ) pstmt.close();
				if( conn !=	null )  conn.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}
		}
		return bList;
	}
}

📂 Servers

  • context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
--><!-- The contents of this file will be loaded for each web application --><Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    
    <Resource
	  	name = "jdbc/OracleDB"
	  	auth = "Container"
	  	type = "javax.sql.DataSource"
	  	username = "scott"
	  	password = "tiger"
	  	driverClassName="oracle.jdbc.driver.OracleDriver" 
		factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
	  	url= "jdbc:oracle:thin:@127.0.0.1:1521:xe"
	  	maxActive="50"
	  	maxIdle="10"
	  />
</Context>

[com.oracle.oMVCBoard.command]

command == service

  • BCommand.java( interface )
package com.oracle.oMVCBoard.command;

import org.springframework.ui.Model;

public interface BCommand {
	void execute(Model model);
}

service-dao연결

  • BListCommand.java( +interface )

package com.oracle.oMVCBoard.command;

import java.util.ArrayList;

import org.springframework.ui.Model;

import com.oracle.oMVCBoard.dao.BDao;
import com.oracle.oMVCBoard.dto.BDto;

// Service
public class BListCommand implements BCommand {

	@Override
	public void execute(Model model) {
		// Dao 연결
		BDao dao = new BDao();
		ArrayList<BDto> boardDtoList = dao.boardList();
		System.out.println("BListCommand boarDtoList.size()-->"+boardDtoList.size());
		model.addAttribute("boardList", boardDtoList);
	}
}

[com.oracle.oMVCBoard.controller]

  • BController.java
package com.oracle.oMVCBoard.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.oracle.oMVCBoard.command.BCommand;
import com.oracle.oMVCBoard.command.BListCommand;

@Controller
public class BController {
	private static final Logger logger = LoggerFactory.getLogger(BController.class);
	
	BCommand command = null;
	
	@RequestMapping("list")
	public String list(Model model) {
		logger.info("list start..");
		command = new BListCommand();
		command.execute(model);
		return "list";
	}
}

📂 resources
📂 css
보통 resources에 css를 담는다

  • baord.css
@CHARSET "UTF-8";
body {	font-family: 굴림체; text-align: center;	}
table { border: 1px solid pink; width: 100%; 
         }
tr { height: 30px; background: yellow; }
/* th {	background: #C9BFED;	} */
th {	background: #b9b973;	}
td {	background: #f9f3b3;	}

📂 views

  • list.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>
<%
	String context = request.getContextPath();
%>
<link rel="stylesheet" href="<%=context%>/resources/css/board.css" type="text/css">
</head>
<body>
	<h1>게시판</h1>
	<table>
		<tr>
			<td>번호</td><td>이름</td><td>제목</td><td>날짜</td><td>히트</td>
		</tr>
		<c:forEach items="${boardList}" var="mvc_board">
			<tr>
				<td>${mvc_board.bId}</td>
				<td>${mvc_board.bName}</td>
				<td>
					<c:forEach begin="1" end="${mvc_board.bIndent}">-</c:forEach>
					<a href="content_view?bId=${mvc_board.bId}">${mvc_board.bTitle}</a>
				</td>
				<td>${mvc_board.bDate}</td>
				<td>${mvc_board.bHit}</td>
			</tr>
		</c:forEach>
		<tr>
			<td colspan="5"><a href="write_view">글작성</a></td>
		</tr>
	</table>
</body>
</html>


❌오류보고서❌

  1. DB commit 문제
    -> commit을 하지 않아 데이터가 담기지 않았다🤬
  2. css 오류
    -> context를 걸어주지 않아 변하지 않음
<%
	String context = request.getContextPath();
%>
<link rel="stylesheet" href="<%=context%>/resources/css/board.css" type="text/css">

0개의 댓글