728x90

JSP 표준 액션 태그

JSP에서 기본으로 제공하는 태그

 

jsp:include

현재 페이지에 특정 페이지를 포함할 때 사용

공통 코드를 복붙 하기보다 각각 JSP 페이지에 구성을 하고 액션태그를 이용해 페이지를 포함시키는 것이 좋다 공통적으로 적용된 부분을 한꺼번에 수정할 수 있게 되어 유지보수가 수월

jsp include 지시자와의 차이

<%@ include file=“파일 명” %>과 쓰임이 동일하나 jsp파일이 java파일로 변환될 때 삽입되는 <%@ include %>와는 달리

jsp파일이 java파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입

<jsp:include page=“파일 명“ flush=“true”/>
<jsp:include page=“./header.html”>
		<jsp:param name=“str” value=“안녕하세요”> 
</jsp:include>

 

 

jsp:forward

현재 페이지 접근 시, 특정 페이지로 이동

하나의 JSP페이지에서 다른 JSP페이지로 요청 처리를 전달할 때 사용 전달하는 페이지에서 request, response객체가 같이 전달되며, URL 변경x

RequestDispatcher 의 forward와 비슷

<jsp:forward page=”이동할페이지”>
		<jsp:param name=”변수명” value=”값” /> 
</jsp:forward>

 

<% if(str.equals(“A”)) { %>
		<jsp:forward page=“test1Class.jsp”>
<% } else { %>
		<jsp:forward page=“test2Class.jsp”> <% } %>

 

jsp:useBean

Java Bean객체를 사용하기 위한 태그

JSP에서 사용하는 VO, DTO, Entity와 동일

java class를 참조하여 빈(java bean) 객체를 생성하고 setProperty와 getProperty를 통해 값 저장 및 조회 가능

이미 같은 이름의 객체가 생성된 경우 기존의 객체 참조

 

   - id : 객체 인스턴스를 식별하는 이름

   - class : 완전한 형태의 클래스 이름

   - scope : 객체 참조의 유효범위(default : page)

<jsp:useBean id=”빈 이름” scope=”범위” class=”빈의 저장위치”/〉

<jsp:useBean id=“객체명“ class=“패키지 명. 클래스 명“ scope=“범위 지정자“/>
728x90
반응형
728x90

jsp:useBean

    - param 속성

 

setProperty

 - name속성 : useBean의 id속성값에서 객체(여기서는 vo클래스)를 호출
 - property속성 : vo객체 안에 값을 저장할 setter명을 지정해준 것
 - param : 뷰에서 보낸 데이터를 받아오는 역할

 

getProperty

Java객체 사용 시 Getter와 동일한 역할

빈의 속성값읕 얻는데 사용

    - name : 속성을 얻고자 하는 빈 인스턴스의 이름

    - property : 얻고자 하는 속성의 이름

 

 

<h2> 1.표준 액션 태그  useBean으로 vo클래스 객체 불러오기</h2>
	
	<jsp:useBean id="per" class="action.model.vo.Person"></jsp:useBean>
	
	<!-- set으로 a값 넣기 : value속성값 -->
	<jsp:setProperty property="name" name="per" value="a"/>
	
	<span>jsp:useBean & getProperty로 vo클래스 값 가져오기 :</span> 
	<jsp:getProperty property="name" name="per"/><br><br>

<br><hr><br>
<h2> 2.표준 액션 태그 중 useBean을 사용하여 vo클래스에 데이터 초기화</h2>
	<jsp:useBean id="p" class="action.model.vo.Person" scope="request"/>
	<jsp:setProperty property="name" name="p" value="b"/>
	
	<span>jsp:useBean & getProperty로 vo클래스 값 가져오기 : </span>
	<jsp:getProperty property="name" name="p"/><br><br>
	
	
	이름 : <jsp:getProperty property="name" name="p"/><br> 
	성별 : <jsp:getProperty property="gender" name="p"/><br>
	나이 : <jsp:getProperty property="nai" name="p"/>

<br><hr><br>
<h2> 3.jsp 표준 액션태그 중 useBean의 param속성 사용하기</h2>
<% request.setCharacterEncoding("UTF-8"); %> <!-- 자바코드 끌어오는 거니 끝에 세미콜론; -->
	<jsp:useBean id="p3" class="action.model.vo.Person" scope="request">
		<!-- 1)param속성 사용 -->
		<jsp:setProperty property="gender" name="p3" param="gender"/>
		<jsp:setProperty property="nai" name="p3" param="nai"/>
		<jsp:setProperty property="name" name="p3" />
		<!-- 
			jsp:setProperty에서 
				 name속성 : useBean의 id속성값에서 객체(여기서는 vo클래스)를 호출해오고 
				 property속성 : vo객체 안에 값을 저장할 setter명을 지정해준 것
				 param : 뷰에서 보낸 데이터를 받아오는 역할
		 -->
	</jsp:useBean>
		이름 : <jsp:getProperty property="name" name="p3"/><br>
		성별 : <jsp:getProperty property="gender" name="p3"/><br>
		나이 : <jsp:getProperty property="nai" name="p3"/><br>

<br><br><br>
</body>
</html>
728x90
반응형

'small steps > 1일 1코딩 - 코딩을 내 몸처럼' 카테고리의 다른 글

[1일 1코딩]  (0) 2022.05.30
[1일 1코딩]  (0) 2022.05.29
[1일 1코딩][JSP] 표준액션태그 <jsp:useBean>  (0) 2022.05.27
[1일 1코딩][JSP] 표준 액션 태그  (0) 2022.05.26
[1일1코딩]  (0) 2022.05.24
728x90

처음 부트스트랩을 쓰면서 가장 당황했던게 

css가 적용이 안되는 것이었다. 이틀 꼬박을 헤맸다.

공홈을 몇번을 읽었는데 무슨 소리인지 모르겠어서 환자할 것 같았다.

글을 보는 초보분이 있다면 저와 같은 당황스러움과 시간낭비 없이 효과적으로 빠르게 해결되기를 바란다

 

기존 html에 css를 적용할 때 선택자(selector) 중에 id와 class선택자를 이용해보자. 가장 쉽고 간단하다.

html의 어떤 태그에 id와 class 속성을 넣고 안에 속성값으로 원하는 이름을 지어줬으면 

얘들 이름을 호명하고 css를 적용시키는 방식이다.


여기까지는 부트스트랩도 같지만 내가 헤맸던 건 부트스트랩을 적용한 html 어디에 넣어서 적용해야할지를 몰랐던 것이다.

당황스럽게도 태그 안 속성 class="" 안에 지정해주는 것이다. 아래는 나의 진행 중인 프로젝트 파일 css이다

 

 

아래처럼 class선택자를 사용하여 class 속성값 "" 안에  클래스명을 지정하면 css가 먹힌다

주의할 점은 태그 마다 먹히는 css가 있고 아니니 부딪혀보자

백그라운드 컬러가 안먹힌다던가 볼드만 먹힌다던가 등등 이런식이다

 

728x90
반응형

'웹 관련 > Bootstrap' 카테고리의 다른 글

[Bootstrap] 페이지네이션(Pagination)  (0) 2022.05.02
728x90

JAVA 객체 지향 프로그래밍 - 2. 남의 클래스 & 남의 인스턴스

 

OOP(objected Oriented Programming)

 

 

System.out.println(Math.PI);
// 결과값 : 3.141592653589793

math라고 하는 클래스PI라는 변수가 있는 것이고, 그 변수 안에 3.14의 구체적인 숫자가 적당한 정밀도로 적혀있는 것

 

System.out.println(Math.PI);
System.out.println(Math.floor(1.8)); // 내림
System.out.println(Math.ceil(1.8));  // 올림

Math는 클래스이고, 클래스 안에는 수학과 관련된 PI라고 하는 변수도 있고 floor,ceil과 같은 메소드들도 들어 있는 것.

즉, 코드가 많아짐에 따라서 서로 연관된 같은 주제를 가지고 있는 변수와 메소드를 그루핑한 껍데기가 클래스

 

 

FileWriter f1 = new FileWriter(”data.txt”)

new를 붙이므로써 FileWriter라는 클래스의 복제본f1을 만들겠다

 

 

FileWriter f1 = new FileWriter("data.txt"); // new를 붙이므로써 FileWriter라는 클래스의 복제본을 만들겠다
f1.write("Hello");
f1.write("Java");
f1.close();

일회용으로 작업을 끝내면 되는 것들은 메소드나 변수를 클래스에 소속된 그냥 클래스에 있는거 그냥 사용합니다

ex) Math.floor()나 Math.ceil()

 

 

하지만 긴 맥락을 가지고 작업해야하는 것들은 클래스를 직접 사용하지 않고 인스턴스를 사용해서 복제본을 사용해서 관리한다

ex) f1인스턴스를 계속 write write close까지 길게 여러번

		FileWriter f1 = new FileWriter("data.txt"); // FileWriter의 복사본
		f1.write("Hello");
		f1.write("Java");

				
		FileWriter f2 = new FileWriter("data2.txt"); // FileWriter의 또 다른 복사본
		f2.write("Hello");
		f2.write("Java2");
		f2.close();
		
		f1.write("!!!");  				// 긴 맥락의 작업
		f1.close();

 

 

 

 

아래에서

클래스 : System, Math, FileWriter

인스턴스 : f1, f2

import java.io.FileWriter;
import java.io.IOException;

public class OOP02 {

	public static void main(String[] args) throws IOException {
		// class : System, Math, FileWriter
		// Instance : f1, f2 
		System.out.println(Math.PI);
		System.out.println(Math.floor(1.8));
		System.out.println(Math.ceil(1.8));
		
		FileWriter f1 = new FileWriter("data.txt"); // FileWriter의 복사본
		f1.write("Hello");
		f1.write("Java");

				
		FileWriter f2 = new FileWriter("data2.txt"); // FileWriter의 또 다른 복사본
		f2.write("Hello");
		f2.write("Java2");
		f2.close();
		
		f1.write("!!!");  				// 긴 맥락의 작업
		f1.close();
	}
}
728x90
반응형
728x90

1.메소드
2.클래스 소속 메소드
3.인스턴스 소속 메소드

 

 

 

 

 

728x90
반응형
728x90

 

1.메소드 형태

 

 

2.클래스 소속 메소드 형태

 

 

3.인스턴스 소속 클래스 형태

마지막 결과값 중 null은

last3();에서 구분자 안줘서 null

728x90
반응형
728x90

 

1.메소드

 

2.클래스 소속 메소드 a,b,c,d

 

3.인스턴스 소속 메소드 a,b,c,d

 

 

1.메소드

 

 

 

 

2.클래스 소속 메소드 a,b,c,d

 

 

3.인스턴스 소속 메소드 a,b,c,d

 

 

728x90
반응형
728x90

728x90
반응형
728x90

 

JAVA method - 9. 부록 - static

public에 이어 바로 옆에 붙어나오는 static을 알아보자

(이해가 어려우니 추후 객체지향 수업에서 또 다룰 것임)

    static - class method
 no static - instance method

스태틱이라는 키워드가 붙은 메소드는 클래스의 메소드

스태틱이 없는 메소드는 인스턴스의 메소드

 

 

// JAVA method - 9. 부록 - static
//
// static

// 	  static - class method	
// no static - instance method
// 스태틱이라는 키워드가 붙은 메소드는 클래의 메소드다
// 스태틱이 없는 메소드는 인스턴스의 메소드다
	
	
// void 의미 : 리턴값이 없다
// 비슷한 성격의 메소드를 정리정돈하는 도구 : 클래스

class Print{
	public String delimiter; // static 안씀. 바로 아래 a,b()메소드 ()안에 값도 삭제하고,
							 // println()안 값도 String delimiter → this.delimiter로 수정
//	public static void a(String delimiter) { 
//  	System.out.println(delimiter); 
	public void a() { 
		System.out.println(this.delimiter);  // 이 this.delimiter는 아래 t1.delimiter = "----";의값
		System.out.println("a");
		System.out.println("a");
	}
//	public static void b(String delimiter) {
//		System.out.println(delimiter); 
	public void b() {						 // 메소드가 인스턴스 소속일 때는 static 제거해야함
		System.out.println(this.delimiter);
		System.out.println("b");
		System.out.println("b");
	}
	public static void c(String delimiter) { // static 추가
		System.out.println(delimiter);		 
		System.out.println("c");
		System.out.println("c");
	}
}

public class method09 {

	
	public static void main(String[] args) {

	
//		a("----"); // a,b메소드 둘 다 클래스 Print로 묶고, Print.을 붙여줘서 경로지정
//		b("===="); // 경로 변경으로 인한 에러 해결
		
//		Print.a("----"); // 이 코드가 1억줄이라면, 구분자를 변경해야할 때마다 곤욕...
//		Print.b("----"); // 이를 위해 아래처럼 인스턴스를 사용한다
		
								// 데이터타입이 Print클래스인 변수 t1이고,
		Print t1 = new Print(); // Print 클래스 복제. 인스턴스 : new Print()
		t1.delimiter = "----";  // Print의 인스턴스 t1은 내부적으로 구분자의 값이 ----가 됨
		t1.a();					// 좌측처럼 구분자를 추가하지 않아도 자동적용됨
		t1.b();					// 위의 Print.b("----");는 각 메소드마다 구분자를 정해준 것이고,
								// 인스턴스를 사용한 이녀석은 메소드마다 지정안해줘도 된다
		
//		Print.a("====");		// 클래스 Print 소속으로 실행됨
//		Print.b("====");
		
		Print t2 = new Print(); // t1처럼 같은 클래스를 복제한 것 뿐인데, 왜 에러뜨고 작동하지 않을까?
		t2.delimiter = "====";  // static의 유무에 따라 에러 on&off
		t2.a();					// 이 a()메소드는 t2 '인스턴스 소속'으로 실행됨
		t2.b();					// Print.a("====");의 a는 '클래스 Print 소속'으로 실행됨
		
								// 메소드가 인스턴스 소속일 때는 static을 빼줘야함
								// 메소드가 클래스 소속일 때는 static이 있어야함
		// Print.a();에서 Print.은 클래스이고 이렇게 실행하면 작동이 안되고 에러
		// a()라는 메소드는 클래스 소속이 아니고 인스턴스 소속이기 때문에 에러. static이 없기에 작동x
		// Print.a();를 작동시킬려면 static을 넣으면 클래스를 쓸 수 있다. 
		
		Print.c("++++");		// 클래스 소속 메소드로써 잘 작동
								// static을 위에서 추가시켜뒀기 때문
	}
}

 

  • static - class method

mesod_try.c("@@@@"); 

 

  • no static - instance method

 

mesod_try m1 = new mesod_try();
m1.delimiter = "아자아자";
m1.a();
m1.b();

 

728x90
반응형
728x90

 

JAVA1 - 14.9. 나의 만들기 - 메소드(Method)

 

만약 아래의 변수에 들어가는 식이 엄청나게 복잡하다면….?

복잡한 식들을 getVAT()같은 이름으로 바꾸고 복잡한 식들을 숨겨놓은다면 앱이 심플해질

 

double valueOfSupply = Double.parseDouble(arg[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;

double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 0.2;

 

 

이클립스 Refactor - 메소드로 변경 기능

[바꾸기를 원하는 코드 선택 우클릭 Refactor ] - [Extract Method]

메소드 이름을 getVAT 이름 지었고 아래에 private static… return 문장이 새로생겼다

 

 

 

메소드 작동 메커니즘

1 변수valueOfSupply 값인 10000.0 2 getVAT valueOfSupply 넣어짐

2번의 2번을 거친 valueOfSupply 다시 메소드로 만들어진 3번의 getVAT valueOfSupply 값이 넣어지고

4번은 메소드를 만드는 코드. 메소드에서 최종 계산된 값이 return코드를 통해 2getVAT 들어간다.

* 메소드를 통해 1억줄의 코드도 간단하게 해결가능

 

 

코드를 깔끔하게 하고자 getVAT() 안에 값을 지운다면?

위의 valueOfSupply있어서 같은데 에러가난다 why?

valueOfSupply 현재 main {} 안에서 선언됬기 때문

, main메소드 안에서만 작동하는 지역변수(local variable)

 - 해결 : 모든 매소드에서 접근할 있도록, main메소드 밖에서 선언해줄

 

 

 

이클립스 Refactor - 지역변수→전역변수 변경 기능

[바꾸기를 원하는 코드 위에서 좌클릭하고 우클릭 Refactor] - [Convert Local Variable to Field]

 

변수의 식마다 메소드 설정 & 지역변수 to 전역변수로 변경

프린트코드는 한번에 지정해서 메소드설정

*자바에서는 전역변수(Global Variable)를 필드(Field)라고함

 

 

메소드(Method)란?

서로 연관된 코드 모아서 다시말해서 그루핑(grouping)해서 이름을 붙인 정리정돈의 상자

 

 


 

JAVA1 - 14.10. 나의 만들기 - 클래스(Class)

 

많은 라이브러리들이 객체지향 방법으로 만들어졌기에 객체지향이 대강 뭔지는 알아둘 필요가 있다

객체는 클래스라는 표현을 쓰기도 (완전히 동일한건x)

 

클래스(Class)란?

서로 연관된 메소드와 변수를 그루핑(grouping) . 그리고 거기에 naming .

정리정돈의 상자이다

 

앱에 여러가지 기능들이 많이 붙고

변수와 메소드가 앱에 너무 많으면 햇갈리고 생산성이 많이 떨어지게 된다

이런 상황에서 도움이 되는 것이 바로 클래스(class)

컴퓨터로 치면 디렉토리로 파일 정리하는 격

 

 

클래스(Class) 써서 정리하기

1)전역변수 세개를 Class Accounting 안으로 이동

(public static double valueOfSupply, vatRate, expenseRate;)

2)밑에 모여있는 메소드들도 Class Accounting 안으로 이동

 - 혹시 앞에 public 아니라 private이라면 public으로

3)public static void main(String[] args) { 아래 valueOfSupply,vatRate, expenseRate,print 4개의 변수명 앞에

클래스명인 Accounting. 붙여주면 전과 같은 기능으로 작동

 

 

*나중에 public private 차이 알아보자

 


 

JAVA1 - 14.11. 나의 만들기 - 인스턴스(Instance)

 

인스턴스(Instance)는

하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 이다

 

 

메인메소드 안에

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

이런 물건들이 몇천개 있다고 , 어쩌다가 새상품이 하나 들어왔다고 해보자

위의 4개코드의 과정을 새상품이 들어올 때마다 세팅해줘야한다

ex)

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

Accounting.valueOfSupply = 20000.0;
Accounting.vatRate = 0.05;
Accounting.expenseRate = 0.2;
Accounting.print();

   . 
   .
   .

이런 과정이 여러번 반복되다보면

클래스의 내부적인 상태를 바꾸는 행위가 버그를 유발할 가능성이 굉장히 높다

 

프로그래밍을 잘하는 사람이라면 이렇게 바꿀

Accounting class 이름을 Accounting1으로 변경하고 카피해서 Accounting2,3,4 계속 만들고

아래와 같이 클래스별로 따로 값을 관리한다

# main{} 안에 있는

Accounting1.valueOfSupply = 10000.0;
Accounting1.vatRate = 0.1;
Accounting1.expenseRate = 0.3;
Accounting1.print();

Accounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.5;
Accounting2.expenseRate = 0.2;
Accounting2.print();

클래스를 복제해서 서로 다른 상태, 서로 같은 메소드를 갖도록

하나의 클래스를 돌려막기한 것이 아니라, 복제된 클래스를 이용해서 편리하고 버그가 적은

코딩을 있게

 

그런데 이것도 좋지만 클래스의 정보를 바꿀려면 만든 모든 클래스의 정보를 바꿔줘야하기에

많이 번거로워질 (클래스를 생성할 때마다, 정보를 일일히 추가해줘야함…)

자바를 만든 사람들은 클래스라는 것을 복제할 있는 기능 만들었다

 

Accounting 앞에 new 붙여 복제

new Accounting();

Accounting a1 = new Accounting();

변수a1 앞에 Accounting 붙여서 a1변수값에는 반드시 Accounting 복제본만 들어올 있다라고 명시를 해줌

Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();

Accounting a2 = new Accounting();
a2.valueOfSupply = 50000.0;
a2.vatRate = 0.5;
a2.expenseRate = 0.5;
a2.print();

이렇게 복제가 가능하고, 여기서 다시 a1.print(); 해도 정상적으로 작동함

클래스를 복제하지 않아도 된다

 

인스턴스(Instance)란?

class 앞에 new 붙여서 만들어진 무언가 인스턴스

 

*인스턴스를 썼으면 위에 class Accounting에서 public 다음 static 사용되면 안되기에 지워야함

 

 

※ 자바에서는 메소드로 구조를 잡고

메소드와 변수를 grouping해서 클래스로 구조를 잡고

클래스를 복제한 인스턴스를 통해서 다른 구조를 만드는 구조가 자바와 다른 컴퓨터 언어들의 특징

 

 

 

728x90
반응형

+ Recent posts