관리 메뉴

개발 노트

10/21 id, pw 구별, id, pw 필수조건, MVC list 출력 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Spring

10/21 id, pw 구별, id, pw 필수조건, MVC list 출력

hayoung.dev 2022. 10. 31. 02:39

scott 계정에서 하단 실행

--------------------------------------------------------
--  DDL for Table MVC_BOARD
--------------------------------------------------------

  CREATE TABLE "SCOTT"."MVC_BOARD" 
   (	"BID" NUMBER(4,0)  Primary KEY, 
	"BNAME" VARCHAR2(20 BYTE), 
	"BTITLE" VARCHAR2(100 BYTE), 
	"BCONTENT" VARCHAR2(300 BYTE), 
	"BDATE" DATE DEFAULT sysDate, 
	"BHIT" NUMBER(4,0) DEFAULT 0, 
	"BGROUP" NUMBER(4,0), 
	"BSTEP" NUMBER(4,0), 
	"BINDENT" NUMBER(4,0)
   ) ; 

Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (1,'111','222','333',to_date('16/06/09','RR/MM/DD'),1,1,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (2,'강공','게시판','인제 들어 가나',to_date('16/06/09','RR/MM/DD'),7,2,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (3,'답변_강공','게시판','인제 들어 가나',to_date('16/06/09','RR/MM/DD'),5,2,1,1);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (4,'케이팝스타','안예은','연결하지요',to_date('16/06/09','RR/MM/DD'),11,4,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (23,'김소현','qqq','입력',to_date('16/06/12','RR/MM/DD'),4,23,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (41,'옥주현1','천년의사랑1','나가수에서 1등',to_date('16/07/07','RR/MM/DD'),8,41,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (25,'정선아','암네리스','난 지금 여기에',to_date('16/06/12','RR/MM/DD'),9,25,0,0);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (42,'신성록','답변 천년의사랑','나가수에서 1등 했지요
축하해요',to_date('16/07/07','RR/MM/DD'),2,41,1,1);
Insert into SCOTT.MVC_BOARD (BID,BNAME,BTITLE,BCONTENT,BDATE,BHIT,BGROUP,BSTEP,BINDENT) values (43,'엄기준','답변의 답변','신성록씨
나가수에서 1등 했지요
축하해요를 썼지요
ㅎㅎㅎ',to_date('16/07/07','RR/MM/DD'),1,41,2,2);

commit;

 

Error reading file C:\Users\admin\.m2\repository\com\oracle\ojdbc6\11.2.0.3\ojdbc6-11.2.0.3.jar
C:\Users\admin\.m2\repository\com\oracle\ojdbc6\11.2.0.3\ojdbc6-11.2.0.3.jar (지정된 파일을 찾을 수 없습니다)

상단처럼 spring이 실행이 잘 안되면(설치문제이면)

잘 실행되는 사람의 repository폴더를 복사해서 C:\Users\admin\.m2\repository에 붙여넣기. (노트북에 m2파일 있음)

 

 

<och07_MVC043>

java > 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 );
		// 성공이라고 가정   --> 같은 Controller내 method로 이동 
		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("studentConfirm id->{}" , id);
		logger.info("studentConfirm password->{}" , password);
		model.addAttribute("id", id );
		model.addAttribute("password", password );
	
		
		return "student/studentSuccess";
	}
	
	@RequestMapping("studentError")
	public String studentError(HttpServletRequest request, Model model) {
		String id = request.getParameter("id");
		model.addAttribute("id", id );
		logger.info("studentError Start...");
		return "student/studentError";

	}
}


views > student > studentSuccess.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>studentSuccess</h1>
	id : ${id }   <p>
	pw : ${password }  
</body>
</html>

 

views > 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>

 

출력 결과 :

http://localhost:8181/mvc043/studentConfirm?id=abc&pw=1234 입력한 경우

http://localhost:8181/mvc043/studentConfirm?id=a&pw=1234 입력한 경우

 

 

<och07_MVC05>

 

java > StudentValidator.java : validation.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) {
		// TODO Auto-generated method stub
		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", "strId 공백 또는  NULL 오류");
		}
		

	}

}

java > 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);
	
	@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")) {
    				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;
		
	}
	

}

java > 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;
	}

	
}

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>
    이름  : ${student.name }
  ID  : ${student.strId }

</body>
</html>

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="전송"> <br />
	</form>

</body>
</html>

출력 결과 : /studentForm

/student/create

 

 

 

 

<och07_MVCBoard>

resources > css(folder) > Board.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;	}

java > 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() {
		// TODO Auto-generated constructor stub
	}
	
	/* 생성자 */
	public BDto(int bId,     String bName, String bTitle, String bContent,
			    Timestamp    bDate,        int bHit,
			    int bGroup,  int bStep,    int bIndent) {
		// TODO Auto-generated constructor stub
		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;
	}	

}

java > dao(package) > BDao.java

package com.oracle.oMVCBoard.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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("생성자 dataSource-->" + e.getMessage() );
			e.printStackTrace();
		}
		
	}
	public ArrayList<BDto> boardList() {
		ArrayList<BDto> bList = new ArrayList<BDto>();
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		System.out.println("BDao boardList start..." );
		
		try {
			connection = dataSource.getConnection();
			String query = "SELECT bId, bName, bTitle, bContent, bDate, bHit,"
					+ "            bGroup, bStep, bIndent "
					+ "     FROM   mvc_board order by bGroup desc, bStep asc";
			preparedStatement = connection.prepareStatement(query);
			System.out.println("BDao  query-->" + query );
			resultSet = preparedStatement.executeQuery();

			while (resultSet.next()) {
				int bId = resultSet.getInt("bId");
				String bName = resultSet.getString("bName");
				String bTitle = resultSet.getString("bTitle");
				String bContent = resultSet.getString("bContent");
				Timestamp bDate = resultSet.getTimestamp("bDate");
				int bHit = resultSet.getInt("bHit");
				int bGroup = resultSet.getInt("bGroup");
				int bStep = resultSet.getInt("bStep");
				int bIndent = resultSet.getInt("bIndent");
				BDto dto = new BDto(bId, bName, bTitle, bContent, bDate, bHit, 
						            bGroup, bStep, bIndent);
				bList.add(dto);
			}

		} catch (SQLException e) {
			System.out.println("list  dataSource-->" + e.getMessage() );
			e.printStackTrace();
		} finally {
			try {
				if(resultSet != null) resultSet.close();
				if(preparedStatement != null) preparedStatement.close();
				if(connection != null) connection.close();
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
		}		
		
		return bList;
	}
	

}

spring의 Servers > Tomcat v9.0 > context.xml 파일의 <context> 안에 하단 코드 추가

<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"
	/>

 

java > command(package) > BCommand.java (interface)

package com.oracle.oMVCBoard.command;

import org.springframework.ui.Model;

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

java > controller(package) > 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";

	}
}

java > command(package) > BListCommand.java

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 boardDtoList.size()-->"+boardDtoList.size());
		model.addAttribute("boardList", boardDtoList);

	}

}

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>게시판</title>
</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>

 

출력 결과

 

 

반응형