160408: 20회차
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
11 :>
VO = DTO 가튼것
요고 하고 있음.
파일명은 약간 다르긴 한데 -.-
ssi.jsp랑 ssi_dbclose.jsp 부분으로 나눠서 DBMS 관련 코드가 있으쉰것
READ.jsp 파일 고치고 있음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="./ssi.jsp" %>
<%
int memono = Integer.parseInt(request.getParameter("memono"));
sql = "update memo ";
sql += "set viewcnt = viewcnt + 1 ";
sql += "where memono = ? ";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);
pstmt.executeUpdate();
// 조회수 증가하시는것
sql = "select * ";
sql += "From memo Where memono = ? ";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, memono);
rs = pstmt.executeQuery();
String content = null;
String wdate = null;
if (rs.next()) {
content = rs.getString("content");
//얘만 가져온 이유는 변환하려고!
//뭐냐면 엔터나오면 라인스킵해주려고 :>
content = content.replaceAll("\r\n", "<br>");
wdate = rs.getString("wdate").substring(0, 10);
// substring(beginIndex, endIndex);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type = "text/javascript">
function updateM(){
var url = "updateForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
//혼파망...-_-);
}
function deleteM(){
var url = "deleteForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
}
</script>
</head>
<body>
<DIV
style='font-size: 24px; text-align: center;
text-decoration: underline; margin-top: 10px;
margin-bottom: 20px;'>
조회</DIV>
<table align="center" border="1px" cellpadding="10px"
cellspacing="0px">
<TR>
<TH>제목</TH>
<TD><%=rs.getString("title")%></TD>
</TR>
<TR>
<TH>내용</TH>
<TD><%=content%></TD>
</TR>
<TR>
<TH>조회수</TH>
<TD><%=rs.getString("viewcnt")%></TD>
</TR>
<TR>
<TH>등록일</TH>
<TD><%=rs.getString("wdate")%></TD>
</TR>
</table>
<DIV style='text-align: center; margin-top: 20px'>
<input type='button' value='등록'
onclick="location.href='./createForm.jsp'">
<input type='button' value='목록'
onclick="location.href='./list.jsp'">
<input type='button' value='수정'
onclick="updateM()">
<!-- on으롷 시작하는 함수는 그냥 자바스크립트 취급이라서
< % % > 안써도 됨
-->
<input type='button' value='삭제'
onclick="deleteM()">
</DIV>
</body>
</html>
<%
}
%>
//이 부분은 왜 이따구인가 ? -> 안 닫아줘서
<%@ include file ="./ssi_dbclose.jsp" %>
2. 일반적인 JSP 개발 패턴(JSP Model 1)
jsp가 자바빈을 사용하는거지 html이 직접 쓸 수느 ㄴ없음
웹부라오저 -> JSP -> 자바빈 -> 디비
디비 -> 자바빈 -> 쪠쎼피 -> 웹브라우저
3. 3 계층( 3 Tier)의 구성도
이런 시스템이군
HTML은 그냥 별로 하는 게 없는 새기입니다
일은 웹서버에서 다하네여 불쌍한것
4. DTO(VO)객체의 사용
- DTO: Data Transfer Object, JSP와 자바 빈즈간 데이터를 전달하는 기능을 합니다.
//DB써버까지 사용자한테 받은 데이타를 전달해줌! :>
//데이타-트랜스퍼-오부젝트
//그러니까 부라우저부터 DB까지 전달 담당입니다.
//ㅇㅇ 데이타를 갖고다니는애
//택배아저씨 같은 ...ㅇ ㅏ내 기타 왜 안와 ㅠㅠㅠㅠㅠㅠㅠㅠ 택배맨
//EMS양반....ㅠㅠㅠㅠㅠㅠ우체국국제배송 ㅠㅠㅠㅠㅠㅠㅠㅠ
- VO: Value Object, DTO와 같은 역활을 하며 명칭만 다릅니다.
//ㅇㅇ어쨌든 얘랑 비슷한 앤데영
//그냥 이름이 다름맨임
//근데 써준게 더 있어보임 + 파일에다가 저런 식으로 DTO VO라고 써줘야합니다★
- JSP 환경이 콤포넌트 기반의 개발이 되도록 지원하는 역활을 합니다.
비즈니스 로-직 을 갖고 있는 애 = 퍼시스턴스 계층 (-_-?)
찍어줍니다인애 - 프리젠테이션 계층
면접맨이려면 이런 것도 물어본댕
굿굿
5. VO(DTO) class의 제작
- VO(Value Object): 값 객체, 하나의 레코드 저장
//한 사람 정보! 한 사람 것! 한사람의 한개의. 정보!!
// ㅇㅇ 그러니까 레코드 1개! :>
// 데이타가 10개 - 디티오가 10개
- DTO(Data Transfer Object): VO와 같은 목적
- DTO, VO는 자바 디자인 패턴에 등장하는 용어들임으로 암기합니다.
// 예~ 디자인 뺴턴~~~~~~~
// >.< 책은 샀는데... 시험 끝나면 공부하개스빈다 ...
1) 작성 규칙
- 테이블의 컬럼명이 변수로 1:1 매칭이 되도록 합니다.
// 어 이거 이름이 같아야 먹어줍니다.
- 테이블에는 없지만 필요에 따라 추가적인 변수 선언이 가능합니다.
// 빼놓으면 안되는데 더 늘어나는건 괜찮습니다.
2) 변수 선언
- 변수는 다른 클래스에 로직이 분산되지 않도록 private으로 선언합니다(캡슐화).
private int memono;
3) setter의 선언
- 메소명을 구성시 set으로 시작하며 변수명의 첫자를 대문자로 연결합니다.
public void setMemono(int memono){
...
}
4) getter의 선언
- 메소명을 구성시 get으로 시작하며 변수명의 첫자를 대문자로 연결합니다.
public int getMemono(){
...
}
어 구래서
이렇게
자바리소스 -> 메모패키지 -> MemoVO 클래스 만들고 난 담에
sql문 복사해서
변수명들 생성해줬음!
wdate는 String으로 만들면 됩니다.
그리고 Getter&Setter 자동생성해줌 :>
이클립스 짱짱맨
--------------------------------------------------
DAO = 데이타 액세스 오부젝트
얘도 우리의친구 디자인패턴임 ㅋㅋㅋㅋㅋ
디자인패턴 - 코드를 이부게 디자인하는패턴인데 뭔 패턴 뭔 패턴 해서 종류가 졸마늠
- ANSI SQL92, 99에 기준하여 각 데이터베이스상에서 SQL을 사용할 수 있습니다.
- DQL(Data Query Language), 데이터 질의어, 데이터 검색, 출력과 관련된 쿼리
. SELECT..FROM..WHERE //얘는 있는걸 갖다가 검색해서 쓸 때 쓰는것
씰렉트(뭐를) 패쓰워드 푸롬(위치) 멤바테이블 웨어(조건) 10개만(다갖다써도됨)
- DML(Data Manapulation Language), 데이터 조작어, 데이터 입력, 수정, 삭제와 관련된 쿼리
. INSERT, UPDATE, DELETE // 얘는 데이타 입력 수정 삭제 할 떄 쓰는 거임 -_-)
인써트도 어쩌구저쩌구가 있는데 나중에 하것지 인서트 인투 어쩌구
업데이트 셋 어쩌구 저저구
- DDL(Data Definition Language), 데이터 정의어, 테이블 생성 및 삭제, 테이블 구조 수정과 관련된 쿼리
. CREATE TABLE, DROP TABLE, ALTER TABLE // 아까 쟤네 어디다가 넣냐고 -> 공간 확보! :> 테이블 형태로 만들어져서 다 테이블임
크리에이트 테이블 - 생성맨
드롭 테이블 - 이건 delete 기능임
알터 테이블 - column이 부족할 때 추가 추가
- TCL(Transaction Control Language), 트랜잭션 제어 언어, 안정적인 데이터 처리를 위한 데이터 처리와 관련된 명령어
. COMMIT, ROLLBACK, SAVEPOINT // 트랜잭션 :>! - 응? 계좌이체?
A라는 계좌에서 B라는 계좌로 돈을 이체시킴!
1) A에서 돈을 뺸다
2) 그 돈을 B라는 계좌로 넣는다
원자성... 어 아톰...뭔데 -_-);; Atomic?
이힣ㅎㅎㅎ
- DCL(Data Control Language)데이터 제어 언어, 권한 부여와 관련된 쿼리
. GRANT, REVOKE // ㅋㅋㅋㅋㅋㅋㅋ임 아니네 이건 DBMS가 해준댕 :D 굿
잉 OCP OCJP 볼라면 계정이 있어야한대 _-_) 흐흥
오라클 - 네이버 계정으로 만들었음
비번은 어.. .아마 잊을듯 -_-)
이거 다시 복습 :>
------------------------
Memo의
DBCLOSE
DBOPEN
MEMODAO
MEMOVO
CONSTANT
그리고 test.memo의 MEMOTEST 를 쓰고 있는뎅
//Constant.java
package memo;
public class Constant {
public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
public static final String USER = "soldesk";
public static final String PASSWORD = "1234";
}
//DBOPEN.java
package memo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBOpen {
public static Connection getConnection() {
Connection con = null;
try {
Class.forName(Constant.DRIVER);
//드라이버를 메모리에 올리는 것
//-_-? ★
try {
con =DriverManager.getConnection(Constant.URL, Constant.USER, Constant.PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
}
public class MemoDAO {
public List<MemoVO> list(Map map){
List<MemoVO> list = new ArrayList<MemoVO>();
return list;
}
오 맵도 써봅니다
SELECT memono, title, viewcnt, wdate, rownum r -- rownum은 순서를 알려주는 **임
FROM(
SELECT memono, title, viewcnt, wdate
FROM memo
ORDER BY memono DESC
)
3중문 필수
-- rownum은 순서를 알려주는 **임 - 가상 컬럼 (일련번호)
근데 오류가 있는 새기라서
1. 찾아온다
2. 로우넘에 박아준다
3. 이걸 또 출력한다
SELECT memono, title, viewcnt, wdate, r
FROM(
SELECT memono, title, viewcnt, wdate, rownum r -- rownum은 순서를 알려주는 **임 - 가상 컬럼 (일련번호)
FROM(
SELECT memono, title, viewcnt, wdate
FROM memo
ORDER BY memono DESC
)
)
WHERE r >= 1 and r <= 5 -- 5개가 넘어도 5개까지만 뽑아온당 :>
이런 시스템입니다.
이제 JSP라서 ssi.jsp가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "memo.MemoVO, java.util.*" %>
<%
request.setCharacterEncoding("UTF-8");
int cnt = 0;
%>
이모양이 됬ㅅ브니다
그리고 오늘 하는 거 약간 이해가 안되는 어려움이 있다....
Java Resource에 짠 memo 패키지의 java 파일을 좀뒤에 올리겠음 (-_-);;
이건 액션태그 쓰는 법 입니다.
액션 태그
action tag
객체를 생성하는 법을 액션 태그로 만드는 법
이건 한번 밀고 하는 것 ㅋㅋㅋㅋㅋㅋ
즐거운것
큰일났다 ㅋㅋㅋㅋ
--------------자바빈이 뭔데?----------------
출처: http://fromvenus.tistory.com/94
#자바빈(JavaBean)이란?
일반적인 웹사이트는 디자이너와 프로그래머가 협력하여 개발한다. 그런데 프로그래머가 JSP페이지에 자바코드를 입력했을때 디자이너 입장에서는 해석하기 어려워지고 효율또한 매우 떨어지게 된다. 이런 비효율적인 부분을 지원하기위해 제공되는 기능의 형태가 자바빈이다. 자바빈은 JSP페이지의 디자인 부분과 로직부분을 나눔으로써 복잡한 자바코드를 줄이고 프로그램의 재사용성을 증가시킨다.
#자바빈의 설계 규약
자바빈을 작성하기 위해서는 설계규약을 따라야 한다. 만약 설계규약과 맞지 않는 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴수 있다.
1. 멤버변수마다 별도의 get/set 메소드가 존재해야 한다.
2. get 메소드는 매개변수가 존재하지 않아야한다.
3. set 메소드는 반드시 하나 이상의 매개변수가 존재해야 한다.
4. 생성자는 매개변수가 존재하지 않아야 한다.
5. 멤버변수의 접근제어자는 private이고 각 set/get메소드의 접근제어자는 public , 클래스의 접근제어자는 public 으로 정의한다.
#자바빈 사용하기
1.<jsp:useBean/>태그
자바빈 객체를 생성하기 위한 코드이고 태그 속성은 다음과 같다.
<jsp:useBean id="빈 이름" class="자바빈 클래스 명" scope="사용범위"/>
id는 JSP페이지에서 자바빈 객체의 변수명, class는 자바빈에 사용할 클래스명(클래스가 패키지 않에 있다면 패키지 경로까지 적어주어야 한다. scope는 자바빈의 사용범위를 뜻하며 request, page, session, application 네종류가 존재한다. 디폴트값은 page로 설정된다.
2.<jsp:setProperty/>태그
자바빈 클래스의 속성 값을 설정하기 위한 태그이고 속성은 다음과 같다.
<jsp:setProperty name="빈 이름" property="속성명" value="설정할 값"/>
<jsp:setProperty name="빈 이름" property="속성명" param="파라미터명"/>
name은 선언된 자바빈 객체의 id property는 객체내의 속성명, value는 속성에 넣을 값을 의미한다. 여기서 클라이언트에서 전송되어오는 파라미터 값을 속성값으로 할당 하고 싶다면 value 속성대신 param속성을 이용하면된다. 그런데 여기서 자바빈으로 사용되는 클래스의 속성들은 설계규약에 의하여 private으로 설정되는데 <jsp:setProperty/>태그로 접근이 가능한 이유는 변수에 직접적인 접근이 아닌 set 메소드를 호출하여 접근하게 되는 것이다.
3.<jsp:getProperty/>태그
자바빈 클래스의 속성값을 가져오기 위한 태그이고 속성은 다음과 같다.
<jsp:getProperty name="빈 이름" property="속성명"/>
name는 값을 가져올 빈의 id, property는 가져올 속성의 이름이다.
#자바빈 예제
BeanTest.java
package test;
public class BeanTest {
private String name = null;
private int age = 0;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
자바빈으로 사용할 클래스이다. 멤버변수는 모두 private으로 선언되어있고 설계규약에 따라 set/get메소드를 만들어줘야 한다.
BeanTest.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- JavaBean 선언 -->
<jsp:useBean id="beanTest" class="test.BeanTest" scope="page"/>
<!-- beanTest라는 빈의 name속성을 KangWonDeok으로 설정 -->
<jsp:setProperty name="beanTest" property="name" value="KangWonDeok"/>
<!-- beanTest라는 빈의 name속성을 출력 -->
<jsp:getProperty name="beanTest" property="name"/>
<!-- beanTest라는 빈의 age속성을 26으로 설정 -->
<jsp:setProperty name="beanTest" property="age" value="26"/>
<!-- beanTest라는 빈의 age속성을 출력 -->
<jsp:getProperty name="beanTest" property="age"/>
</body>
</html>
beanTest라는 빈의 name속성과 age속성을 각각 "KangWonDeok" , "26"으로 할당하고 출력 만약 클라이언트가 요청한 파라미터 값으로 값을 지정하고 싶다면 value속성 대신 param속성을 대신하여 사용하면 된다.
출력결과
자바 빈(Bean)이란?
- 웹 페이지를 구축하다보면 같은 기능을 갖지만 페이지 구성이 달라질 경우 같은 수고를 반복할 경우가 있다.
- 웹 페이지를 보다 효율적이고 생산적으로 작성하려면 코드를 재활용 할 수 있어야 한다.
- 웹 사이트를 개발할 때, JSP로 웹 페이지를 디자인 하고 내부적인 데이터 처리는 자바 빈으로 구현한다.
- 빈(Bean)은 재활용이 가능한 컴포넌트(Component)와 마찬가지로 소프트웨어를 부품화 한것이다.
- 소프트웨어도 부품화하여 개발하는데 이를 자바에서 빈(Bean)이라고 하고 일반적으로 컴포넌트라고 한다.
- 빈(Bean)은 한번 개발하고 나면 여러가지 페이지에서 동시에 가져다 사용할 수 있다.
- 빈(Bean)은 재사용 가능한 객체로서 대부분 데이터를 저장하는 역할을 한다.
-------------이렇게 된 이상 액션태그 공부로 간다-----------------------------
출처: http://gangzzang.tistory.com/entry/JSP-%EC%95%A1%EC%85%98%ED%83%9C%EA%B7%B8-jspuseBean
제가 공부하려고 쓰는 블로그니까 출처 밝히고 좀 가져다가 분석좀 하겠습니다
JSP 액션태그 - <jsp:useBean>
1. 자바빈(JavaBean)
- 데이터를 표현하는 것을 목적으로하는 클래스이다.
- 데이터를 저장하는 필드, 데이터를 읽어올 때 사용하는 메서드, 값을 저장할 때 사용하는 메서드로 구성된다.
2. 자바빈 프로퍼티
- 프로퍼티는 자바빈에 저장되어 있는 값을 나타낸다.
- 메서드 이름을 사용해서 프로퍼티의 이름을 결정한다.
- 값을 설정하는 메서드는 프로퍼티 이름의 첫 글자를 대문자로 변환한 문자열 앞에 set을 붙인다.
- 값을 읽어오는 메서드는 프로퍼티 이름의 첫 글자를 대문자로 변환한 문자열 앞에 get을 붙인다.
- 프로퍼티의 타입이 boolean일 경우 get 대신에 is를 앞에 붙일 수도 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.tistory.gangzzang; public class Board { private String id; private String password; private String title; private String content; public String getId() { return id; } public void setId(String id) { this .id = id; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public String getTitle() { return title; } public void setTitle(String title) { this .title = title; } public String getContent() { return content; } public void setContent(String content) { this .content = content; } } // Board |
3. <jsp:useBean> 액션 태그
- <jsp:useBean id="빈이름" class="자바빈클래스이름" scope="범위"/>
- id : JSP 페이지에서 자바빈 객체에 접글할 때 사용할 이름을 명시한다.
- class : 패키지이름을 포함한 자바빈 클래스의 완전한 이름을 입력한다.
- scope : 자바빈 객체가 저장될 영역을 지정한다. (page, request, session, application 중 하나, 기본값은 page)
- JSP 페이지에서 사용할 자바빈 객체를 생성하고 지정한 영역에 저장을 한다.
- 지정한 영역에 이미 id 속성에서 지정한이름의 속성 값이 존재할 경우 객체를 새로 생성하지 않고 기존에 존재하는 객체를 그대로 사용한다.
- 각 scope의 영역별로 공유할 데이터를 쉽게 저장할 수 있다.
<!-- board.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:useBean id="b" scope="request" class="com.tistory.gangzzang.Board"/> <% b.setId("gz"); b.setPassword("1234"); b.setTitle("제목"); b.setContent("내용"); %> <jsp:forward page="boardUse.jsp"/>
<!-- boardUse.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:useBean id="b" scope="request" class="com.tistory.gangzzang.Board"/> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판</title> </head> <body> 아이디 : <%= b.getId() %><br> 비밀번호 : <%= b.getPassword() %><br> 제목 : <%= b.getTitle() %><br> 내용 : <%= b.getContent() %><br> </body> </html> <!-- 실행결과 아이디 : gz 비밀번호 : 1234 제목 : 제목 내용 : 내용 -->
4. <jsp:setProperty> 액션 태그
- <jsp:useBean> 액션 태그를 사용해서 객체를 생성하면 <jsp:setProperty>액션 태그를 사용하여 자바빈 프로퍼티를 변경할 수 있다.
- <jsp:setProperty name="자바빈" property="이름" value="값" (parm="파라미터 값")/>
- name : 프로퍼티의 값을 변경할 자바빈 객체의 이름, <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다.
- property : 값을 지정할 프로퍼티 이름
- value : 프로퍼티의 값, 표현식을 사용할 수 있다.
- param : 파라미터의 값을 프로퍼티의 값으로 지정할 때 사용한다.
- property 속성의 값을 '*'로 지정하면 각각의 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값을 설정한다. (폼에 입력한 값을 자바빈 객체에 담을 때 유용하다)
5. <jsp:getProperty> 액션 태그
- <jsp:useBean> 액션 태그를 사용해서 객체를 생성하면 <jsp:getProperty>액션 태그를 사용하여 자바빈 프로퍼티를 읽어올 수 있다.
- <jsp:getProperty name="자바빈이름" property="프로퍼티이름" />
- name : <jsp:useBean> 의 id 속성에서 지정한 자바빈 객체의 이름
- property : 출력할 프로퍼티의 이름
<!-- boardForm.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판 입력 폼</title> </head> <body> <form action="boardproc.jsp" method="post"> <table border="1" cellpadding="0" cellspacing="0"> <tr> <th> 아이디 </th> <td> <input type="text" name="id" maxlength="12"> </td> </tr> <tr> <th> 비밀번호 </th> <td> <input type="password" name="pwd" maxlength="15"> </td> </tr> <tr> <th> 제목 </th> <td> <input type="text" name="title" maxlength="20"> </td> </tr> <tr> <th> 내용 </th> <td> <textarea rows="25" cols="50" name="content"></textarea> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="등록"> <input type="reset" value="취소"> </td> </tr> </table> </form> </body> </html>
<!-- boardProc.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="b" class="com.tistory.gangzzang.Board"/> <jsp:setProperty name="b" property="*" /> <jsp:setProperty name="b" property="password" value="<%= b.getId() %>"/><!-- 비밀번호 숨기기위해서 아이디로 바꿔준다. --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판</title> </head> <body> <table border="1" cellpadding="0" cellspacing="0"> <tr> <th> 아이디 </th> <td> <jsp:getProperty name="b" property="id"/> </td> </tr> <tr> <th> 비밀번호 </th> <td> <jsp:getProperty name="b" property="password"/> </td> </tr> <tr> <th> 제목 </th> <td> <jsp:getProperty name="b" property="title"/> </td> </tr> <tr> <th> 내용 </th> <td> <jsp:getProperty name="b" property="content"/> </td> </tr> </table> </body> </html>
7. 자바빈 프로퍼티 타입에 따른 값 매핑
프로퍼티의 타입 | 변환 방법 | 기본 값 |
bolean 또는 Boolean | Boolean.valueOf(String)을 값으로 갖는다. | false |
byte 또는 Byte | Byte.valueOf(String)을 값으로 갖는다. | (byte) 0 |
short 또는 Short | Short.valueOf(String)을 값으로 갖는다. | (short) 0 |
char 또는 Character | 입력한 값의 첫번째 글자를 값으로 갖는다. | (char) 0 |
int 또는 Integer | Integer.valueOf(String)을 값으로 갖는다. | 0 |
long 또는 Long | Long.valueOf(String)을 값으로 갖는다. | 0L |
double 또는 Double | Double.valueOf(String)을 값으로 갖는다. | 0.0 |
float 또는 Float | Float.valueOf(String)을 값으로 갖는다. | 0.0f |
8. <jsp:useBean> 액션 태그의 사용 감소 이유
- MVC 구조에서는 로직을 자바 클래스에서 처리하고 결과를 JSP에서 보여주게 된다.
- 클래스에서는 <jsp:useBean> 액션 태그를 사용할 수 없기 때문에 사용할 일이 많지 않다.
- 또한 2.0 버전부터 표현 언어(Expression Language)가 추가되었는데 더 간결한 코드를 이용해서 프로퍼티 값을 읽어올 수 있다.
- 프레임워크와 같은 도입과 표현언어의 적용 등으로 사용 빈도가 저점 낮아지고 있다.
---------------------------------------------------------------오늘 사용한 코드 가져가야지
---------------------------------------------------------------
ssi.jsp
/////////////////////////////////////////////////////////////////
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "memo.MemoVO, java.util.*" %>
<%
request.setCharacterEncoding("UTF-8");
int cnt = 0;
%>
---------------------------------------------------------------
list.jsp
/////////////////////////////////////////////////////////////////
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="./ssi.jsp" %>
<jsp:useBean id="dao" class="memo.MemoDAO"></jsp:useBean>
<%
Map map =new HashMap();
map.put("sno", 1);
map.put("eno", 5);
List<MemoVO> list = dao.list(map);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type="text/javascript">
function read(memono){
var url = "./read.jsp";
url = url + "?memono=" + memono;
location.href = url; //자바스크립트에서 -get 방식- 링크 보내기
}
</script>
</head>
<body>
<DIV
style='font-size: 24px; text-align: center; text-decoration: underline; margin-top: 10px; margin-bottom: 20px;'>
메모 목록</DIV>
<Table align="center" border='1px' cellpadding="10px" cellspacing="0px">
<TR>
<TH>번호</TH>
<TH>제목</TH>
<TH>날짜</TH>
<TH>조회수</TH>
</TR>
<%
if (list.size()==0) {
%>
<TR>
<TD colspan='4'>등록된 메모가 없습니다.</TD>
</TR>
<%
} // end if
else {
for(int i = 0; i<list.size(); i++){
MemoVO vo = list.get(i);
//list 안에서 rs.next로 MemoVO 에다가 저장해줬었음 (희미한 기억)
%>
<TR>
<TD><%=vo.getMemono()%></TD>
<TD><a href = "javascript:read('<%=vo.getMemono()%>')"><%=vo.getTitle() %></a></TD>
<TD><%=vo.getWdate()%></TD>
<TD><%=vo.getViewcnt()%></TD>
</TR>
<%
} //end for
} //end else
%>
</Table>
<DIV style='text-align: center; margin-top: 20px;'>
<input type="button" value='등록'
onclick="location.href='./createForm.jsp'">
</DIV>
</body>
</html>
---------------------------------------------------------------
read.jsp
/////////////////////////////////////////////////////////////////
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="./ssi.jsp" %>
<jsp:useBean id="dao" class = "memo.MemoDAO" />
<%
int memono = Integer.parseInt(request.getParameter("memono"));
dao.upViewCnt(memono); //조회수 증가
MemoVO vo = dao.read(memono); // 한건의 레코드 가져오기
String content = vo.getContent().replaceAll("\r\n","<br>");
String wdate = vo.getWdate().substring(0, 10);
// substring(beginIndex, endIndex);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type = "text/javascript">
function updateM(){
var url = "updateForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
//
}
function deleteM(){
var url = "deleteForm.jsp";
url += "?memono=<%=memono%>";
location.href = url;
}
</script>
</head>
<body>
<DIV
style='font-size: 24px; text-align: center;
text-decoration: underline; margin-top: 10px;
margin-bottom: 20px;'>
조회</DIV>
<table align="center" border="1px" cellpadding="10px"
cellspacing="0px">
<TR>
<TH>제목</TH>
<TD><%=vo.getTitle()%></TD>
</TR>
<TR>
<TH>내용</TH>
<TD><%=content%></TD> <!-- 내용하고 등록일은 그대로 냅두려고 -->
</TR>
<TR>
<TH>조회수</TH>
<TD><%=vo.getViewcnt()%></TD>
</TR>
<TR>
<TH>등록일</TH>
<TD><%=wdate%></TD>
</TR>
</table>
<DIV style='text-align: center; margin-top: 20px'>
<input type='button' value='등록'
onclick="location.href='./createForm.jsp'">
<input type='button' value='목록'
onclick="location.href='./list.jsp'">
<input type='button' value='수정'
onclick="updateM()">
<!-- on으롷 시작하는 함수는 그냥 자바스크립트 취급이라서
< % % > 안써도 됨
-->
<input type='button' value='삭제'
onclick="deleteM()">
</DIV>
</body>
</html>
---------------------------------------------------------------
createForm.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
createProc.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
deleteForm.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
deleteProc.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
updateForm.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
updateProc.jsp
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
MemoDAO.java
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
MemoVO.java
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
/////////////////////////////////////////////////////////////////
---------------------------------------------------------------
/////////////////////////////////////////////////////////////////
5. 수업
진도:
hw:
6. 할것
map 복습 ㅋㅋㅋㅋ
Map map = new HashMap();
map.put("Object 중 key값", "Object 중 value"); -> Object로 저장된다
Map
-컬렉션에 포함되어져 있지 않은 그냥 맵구조인것
1) Key 와 Value 한쌍
-HaspMap, Hashtable']
-put메소드로 입력한다.
Int - (Integer) - Integer.ParseInt 차이 ㅋㅋㅋㅋ
문자열 -> 정수형 변경시
"100" String -> int
는 Integer.parseInt("100")
map.put("key", 100) -> Object - 박싱 & 업캐스팅
오브젝트 -> 꺼내올 때
100 <- (Integer)map.get("key") - 자식 타입으로 다운캐스팅! -
박싱 언박싱 ㅋㅋㅋㅋㅋㅋㅋㅋ
아오 다 헷갈리네
기본형을 감싸서 객체 타입으로 만들어주는 wrapper 클래스들 - (INTEGER) 이런애들
'Programming' 카테고리의 다른 글
160414: 23회차 (0) | 2016.04.14 |
---|---|
160412: 22회차 (0) | 2016.04.12 |
160407: 19회차 (1) | 2016.04.07 |
160406: 18회차 (3) | 2016.04.06 |
160405: 17회차 (3) | 2016.04.05 |