Spring

국비코딩 Mar03 | promotion 시 자식객체의 특성, string 기능들, session에 저장

onnnzeoz 2023. 3. 3. 17:49

RequestDispatcher는 인터페이스임

이 인터페이스를 구현받은 클래스라면 아무거나 다 들어올 수 있음! (먼소리지)

부모가 자식객체로 들어가려면 묵시적형변환promotion이 필요함

 

묵시적 형변환을 하면 자식객체의 특성이 사라짐 (고유특성으 ㄹ다시 사용하고 싶으면 명시적형변환이필요함)

promotion하면 자식객체의 특성이 사라짐

name이 class인 select 태그에 change이벤트 걸고 action값을 $action이라는 변수에 넣고

empty메서드 걸어줘야함 왜냐면 append메서드를 활용해서 옵션을 계속 붙여주다 보면 이게 계속 누적돼서 붙어버려

그래서 empty로 다시 선택될때마다 clear 되게끔 해줘야함

controller에서 class랑 action으로 받아주고

cat과 dog를 상속해주고 있는 Mammal클래스도 사용하게 위해 객체화해서 null값 넣어줘

dog클래스 쓰기위해 객체화 해주고 mal에 담아주고 다음 if문에서 mal의 birth메서드와 eat메서드를 result에 담아줘

birth와 eat은 강아지의 고유 특성이기 때문에 mal이라는 부모형태로 들어가면 사용할수가 없어 이거 사용하려면 mal에 (Dog)걸어줘서 다시 돌아와야해 Dog dog = (Dog) mal;

 

String은 원래 배열?

원래 프로그래밍 언어에 문자열이 없었고 배열에 하나씩 담아서 썼었음(byte나 char배열에)

문자열은 고유 데이터타입이 아니기 때문에 일부러 클래스로 만든거임 그래서 첫글자가 대문자

equals는 객체를 비교하는 함수! 문자열이 객체라서 주로 string(객체의 내용)을 비교할 때 equals를 사용함

 

추상클래스는 자식이 부모를 상속받는 것밖에 안된다 (부모가 자식을 객체화시키는 것임)

인터페이스는 절대 객체화되지 않는다 (인터페이스는 규격이니까 규격이 실체화되진 않음)

인터페이스는 스스로 객체화하지 않기 때문에 익명객체를 활용한다


//문자열 만드는 방법1 대부분 이 방법

String str= "Hello String";

//문자열 만드는 방법2

str = new String(str);

//문자열 만드는 방식3 이 방법 가끔 씀
char[]alphabet = {'H','E','L','L','O'};
str = new String(alphabet);


 

session은 request의 하위 객체, 쓰기위해 빼려면 httpsession 이라는 인터페이스에다가 session 변수 넣고 = req.getSession();

 

앞 뒤 공백 제거 : trim()

-id와 pw받아오는데 회원들이 앞 뒤에 실수로 공백을 넣는 경우를 방지하기 위한 메서드

id = id.trim(); //앞뒤 공백을 없애줌
pw = pw.trim();

session에 저장

로그인은 보안이 필요하므로 session에 저장한다

if(id.equals("admin")&&pw.equals("pass")) {
			HttpSession session = req.getSession();
			session.setAttribute("loginId", id); // 특정페이지로 이동, 
			page= "main.jsp";
			msg = id +"님 로그인 되었습니다!";			
		}

여기서 setAttribute는 id를 저장하는 메서드이다

session.setAttribute("이름", 값); 이렇게 저장한다


string(문자열)의 기능들

특정 문자열로 시작하는지 여부 확인 : startWith()

특정 문자열로 끝나는지 여부 확인 : endWith() 

기타 등등

main에서 form에 name="fileName"을 줬음

그래서 이 fileName을 controller에서 받아줌 (밑)

String fileName = req.getParameter("fileName");
		System.out.println(fileName);
		
		StringUtills utils = new StringUtills();
		String result = utils.check(fileName);
		req.setAttribute("msg",result);
		RequestDispatcher dis = req.getRequestDispatcher("main.jsp");
		dis.forward(req, resp);
		
	}

stringUtills 클래스 사용하기 위해 객체화, 그리고 거기에 check메서드에 fileName넣고 실행한뒤 값을 result에 넣고 그 값은 main.jsp로 보내줌

(밑은 check메서드! 인자값으로 fileName넣어줌)

public String check(String fileName) {//파일명을 넘겨주면 그 파일명이 20자가 넘는지, 특정문자가있는지,등등 확인할거임
		
		//파일명은 20자가 넘으면 안됩니다.
		int len = fileName.length();
		System.out.println("글자 수 : " + len);
		if(len>20) {
			return fileName + "은 20자가 넘습니다.";
		}
		//파일명에 다음 문자가 있어서는 안됩니다.(@,$,%,#,&) 배열에 넣어서 확인할거임
		String[]arr = {"@","$","%","#","&"};
		for(String str : arr) {
			boolean contains = fileName.contains(str);
			System.out.println(str);//어떤애때문에 걸리는지 확인용
			if(contains == true) {
				return "파일명에 (@,$,%,#,&)가 포함되어서는 안됩니다";
				//return은 이 메서드를 탈출하는거임, 여기에 걸리면 이후의 내용들이 동작되지 않음
			}
		}
		
		//파일명 앞에 [img]를 붙여야 합니다.
		
		if(fileName.startsWith("[img]") == false) {
			return "파일명 앞에 [img]를 붙이세요.";
		}
		
		//허용되는 확장자는 .png .jpg .gif .jpeg입니다.
		
		String[] exts = {".png", ".jpg", ".gif", ".jpeg"};
		boolean pass = false; // 계속 false가 유지되면 넷에 해당하지 않는거니까
		for(String ext: exts) {//ext는 for문으로 꺼내온 애들 하나씩 받을 변수
			pass = fileName.endsWith(ext);
			if(pass == true) {
				break;
			}
		}
		if(pass == false) {
			return "허용된 확장자는 (.png .jpg .gif .jpeg)입니다.";
		} return "통과되었습니다";
		
		
		//.jpeg확장자의 경우 강제로 .jpg로 변환됩니다.
		if(fileName.endsWith(".jpeg") == true) {
			fileName = fileName.replace(".jpeg", ".jpg");
		} return "jpg는 적절한 규격입니다.";
	}

대신 배열을 찾는애들은 하나씩 빼줘야해서 utils.jsp 파일에서 <c:forEach items="뭉터기" var="변수">를 사용해줘야함

c:foreach 전에 c:if로 test에 만약 toCharArrayrk null이 아니라면 이라고 물어봐줘야함

<a href="utils?action=toCharArray">3. 문자열을 캐릭터 배열로 만들기</a>
	<c:if test="${toCharArray ne null}">
	<p>답 : 
		<c:forEach items="${toCharArray}" var="ch">
			[${ch}]
		</c:forEach>
		<!-- 배열을 하나씩 빼주기 위해서 forEach사용, items에 덩어리 넣어주고 var에 담아줄 변수 넣고 -->
	</p>
	</c:if>
	<hr/>

indexOf는 check이 아니라 search에 따로 넣어줄거임

public Object search(String text, String val) {
		//text를 소문자로 변경해줄거임 (뭘찾아야할지 헷갈리니까)
				String lowerText = text.toLowerCase();
				//indexOf를 통해 a위치 반환할 것임
				int idx = lowerText.indexOf(val); 
				String result = "a의 인덱스["+idx+"]";
				return result;
				//얘는 1개만 찾아줘.
				//indexof는 원하는 문자의 인덱스번호를 반환, 못찾으면 -1반환함, 0은 0번인덱스를 반환했다고 생각하잖
	}

starswith("[img]") == false // [img]로 시작하지 않으면

return "파일명 앞에 [img]를 붙이세요. 

 

utils 받고, 파라메터는 action과 val이 감, 근데 val은 값이 없을 때도 있음 그럴 땐 null로 들어올거임

받아낼 수 있게 controller를 만들어주기