Bean 사용법
JSP의 결과와 동일함.
=> 동일한 결과를 구현하지만
기존의 JSP코드에
Java코드를 추가함.
왜 Java코드를 추가하나?
1) 처리속도가 (Java > JSP)
2) 보안성
3) 안정성
4) 활용성
①Java 서버에서만 실행됨.
JSP는 서버에서 실행됨 + 클라이언트에서 실행됨
②Java 보안성 측면에서 JSP보다 안전함.
③JSP코드는 Java코드로 변환되어 실행되므로
문제발생 소지가 Java코드만 실행하는 것보다 더 큼
④JSP에서 활용할 수 있는 Library, API 보다
Java에서 활용할 수 있는 Library, API가 더 많음.
그렇다면 전체코드를 왜 Java로 만들지 않는가??
=> Java코드는 브라우저에서 직접 인식안됨.
(Web server, WAS, WC같은 API(Tomcat))에서
JSP를 실행하여 HTML로 변환할 수 있으나
Java코드는 변환 할수 없음.
=> Servlet 서블릿 이라는 방법을
구현하였으나 JSP를 사용하지 않고
Servlet 만으로 구현된 Java코드는
실행속도가 가장 느림)
보기. 자바 클래스 파일에서 HTML을 실행하도록
소스를 구현함.(단, Servlet Import 필요함.)
out.print("<!DOCTYPE html>");
out.print("<html lang='ko'>");
out.print("<meta charset='utf-8'>");
...
Servlet 서블릿 위치와 사용
jsp 파일도 .metadata 폴더안을 살펴보면 java파일로 생성되어있는 걸 볼수 있다.
예전에는 Servlet으로 구현했으나 실행속도가 가장 느려 현재는 추천하지 않는다.
처리속도와 작업의 편의성을 위한 최종 선택
1) JSP코드로만 작성한다. -> 2순위
Model 1 방식
2) JSP+Servlet -> 1순위
--------
Java Class == Bean(빈)
Model 2 방식
3) Servlet -> 3순위 (추천X)
방식 이름 없음
Model 2 방식을 편리하고 효율적으로
작업하기 위해 프레임워크를 사용한다.
(프레임워크 종류 : Spring , 전자정부 표준 프레임워크,
MyBatis, iBatis, ...)
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" autoFlush="true" %>
<%@ page import="pack_Bean1.Sample" %>
<!-- 객체를 만들어 JSP가 클래스를 인식함 위치는 상관 없음~-->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="shortcut icon" href="#">
<link rel="stylesheet" href="/Dwp_Ch11_Bean/style/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/Dwp_Ch11_Bean/script/script.js"></script>
</head>
<body>
<div id="wrap">
<h1>page 지시자</h1>
<% //스크립트릿(Scriptlet)
/* out.print("클래스의 데이터 첫번째 출력 :"+Sample.strData); */
Sample obj = new Sample();
out.print("String 기본값 :" +obj.getStrData() + "<br><br>");
String data="ABC123";
obj.setStrData(data); //데이터 전달
out.print("데이터 전달 후 String : "+ obj.getStrData());
%>
</div>
<!-- div#wrap -->
</body>
</html>
java
package pack_Bean1;
public class Sample {
private String strData; //String 기본값 null / 속성(Property,프로퍼티)
public void setStrData(String strData) {
this.strData = strData;
}
public String getStrData() { //게터
return this.strData;
}
}
액션태그
1) 초기화 액션 태그 =>
<jsp:setProperty name="A" property="B" value="C" />
A : useBean 액션태그의 id 속성 값(클래스 지정)
B : property는 "속성"이라는 뜻으로 사용함. (필드이름)
클래스에서는 필드가 속성에 해당
그리므로 필드명을 의미함.
C: 필드에 초기화할 값
그리고 액션태그는 JSP기능을 함축적으로 포함하고 있으므로
필드와 세터(Setter)를 묶어서 동시에 실행한다.
단 해당 세터가 클래스에 존재하고 있어야함.
2) 반환 액션태그
<jsp:getProperty name="useBean의 id값" property="속성값" value="초기화값" />
단 해당 게터가 클래스에 존재하고 있어야함.
※html에서 id는 하나의 id에 적용. 클래스는 요소를 공통적으로 실행할수 있도록.
jsp에서 jsp:useBean id 는 이름, class 는 패키지.클래스 속성값
jsp:setProperty name은 id값과 동일
-----------------------------------------------------------------
[JSP 파일에서 클래스1에 데이터 전송후
클래스2에 데이터를 전송하여 클래스2에서
해당 데이터 출력]
jsp 파일 예
<%@page import="pack_Bean1.Sample"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" autoFlush="true"%>
<jsp:useBean id="a"
class="pack_Bean1.Sample"
scope="page" /> <!-- 세션 유지 시간동안 사용가능 -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="shortcut icon" href="#">
<link rel="stylesheet" href="/Dwp_Ch11_Bean/style/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/Dwp_Ch11_Bean/script/script.js"></script>
</head>
<body>
<div id="wrap">
<h1>Action 태그</h1>
<jsp:setProperty name="a" property="strData" value="오렌지"/>
<!-- setter역할 -->
<jsp:getProperty name="a" property="strData" />
<!-- getter역할 -->
<%-- <%
out.print("setProperty로 초기화된 필드값 출력 : " +strData+"<br><br>");
%> --%>
</div>
<!-- div#wrap -->
</body>
</html>
java 파일
package pack_Bean1;
public class Sample {
private String strData; //String 기본값 null / 속성(Property,프로퍼티)
public void setStrData(String strData) {
this.strData = strData;
}
public String getStrData() { //게터
return this.strData;
}
}
JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" autoFlush="true"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="shortcut icon" href="#">
<link rel="stylesheet" href="//style/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/script/script.js"></script>
</head>
<body>
<div id="wrap">
<h1>index.jsp</h1>
<jsp:useBean id="objSample" class="pack_Bean2.Sample" />
<!-- JSP 액션태그는 JSP의 기능을 함축적으로 갖고 있다. -->
<%-- <jsp:setProperty property="num" name="dataObj" value="3"/>
<h1 style="color: #f80">
<jsp:getProperty property="num" name="dataObj"/>
</h1> --%>
<%
int insData=3;
int num=objSample.mtd(3); //Sample.java 변수와 다르다.
out.print("Data 클래스의 필드 num의 값 : " +num);
%>
</div>
<!-- div#wrap -->
</body>
</html>
Sample.java 파일
package pack_Bean2;
public class Sample {
public int mtd(int insData) { //setter getter 그 무엇도 아닌 커스텀 메서드 역할만 함
Data objData = new Data(); //객체 생성
objData.setNum(insData); // 5로 초기화
int num = objData.getNum(); //5 반환
return num;
}
}
package pack_Bean2;
public class Data {
//VO: Value Object
//DTO : Data Transfer Object
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
Data.java 파일.
Data.java 파일이 데이터를 중간에서 서버와 클라이언트에게 전달하는 역할을 한다.
Eclipse 상에서 의 숫자의 이동 경로!
---------------------------------------------------------
[HTML에서 전송한 데이터를
JSP에서 수신 후 클래스에 전달(=초기화)]
HTML파일
입력2(PW)
입력3(Age)
입력4(gender) male female
JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" autoFlush="true"%>
<jsp:useBean id="objData" class="pack_Bean3.Data" />
<jsp:setProperty name="objData" property="*" />
<%
//objData.mtd();
%>
<jsp:useBean id="objDAO" class="pack_JDBC.DAO" />
<%
objDAO.mtd_JDBC(
objData.getUid(),
objData.getUpw(),
objData.getuAge(),
objData.getGender());
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="shortcut icon" href="#">
<link rel="stylesheet" href="//style/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/script/script.js"></script>
</head>
<body>
<div id="wrap">
<<h1>Class 필드 데이터 초기화 완료!!</h1>
</div>
<!-- div#wrap -->
</body>
</html>
Data.java 파일(DAO)
package pack_Bean3;
public class Data {
private String uid;
private String upw;
private int uAge;
private int gender;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUpw() {
return upw;
}
public void setUpw(String upw) {
this.upw = upw;
}
public int getuAge() {
return uAge;
}
public void setuAge(int uAge) {
this.uAge = uAge;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public void mtd() {
System.out.println("uid : "+uid);
System.out.println("upw : "+upw);
System.out.println("uAge : "+uAge);
System.out.println("gender : "+gender);
System.out.println("Print ok!!");
}
}
getter와 setter 메서드 만들때 uAge면 setuAge 형태로 첫글자가 소문자로 생성된다.
get set 생성 단축키는 alt s r - alt a r
<jsp:setProperty> 사용시 property="*" 로 필드 전체 사용가능.
주의점은 네임 속성과 필드의 이름이 같아야 한다
'코딩 해보자' 카테고리의 다른 글
220916 jsp와 DB서버를 연동하여 입력된 회원 삭제 하기 (2) | 2022.09.16 |
---|---|
220914 JSP - Java - SQL(DB) 연결 (0) | 2022.09.14 |
220907 DB 와 JSP 연동으로 간단한 회원가입/로그인 구현 (0) | 2022.09.11 |
JSP 파일 업로드 (Cos.jar 사용하기) (2) | 2022.09.07 |
220902 session 사용법 (0) | 2022.09.02 |
댓글