일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Controller
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- 마이바티스환경설정
- View #
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- 정처기필기합격 #정처기합격후기
- 어노테이션 #@WebServlet #WebServlet #
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- 8 실무에서 가장 많이 사용하는 SQL
- 자바웹프로그래밍
- Init-param #context-param #
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- Model #
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- Doit #Doit오라클 #Doit시리즈 #연습문제
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- 정처기3회 #정보처리기사2023
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- web.xml #배포지시자 #서블릿테스트
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- 서블릿선언 #서블릿선언방법 #
- html #자바와서블릿 #자바와웹연결 #웹연결
- Today
- Total
장미의 개발일기
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard 본문
*Model 1 방식: JSP 프로그래밍에서 Model과 View를 따로 분리하지 않고 같이 섞어서 개발하는 방식이다.
=> UI(디자인)와 비즈니스 로직을 함께 처리하는 방식이라 코드의 재사용성이 떨어진다 => 유지보수가 어렵다.
*JSP 프로그래밍: jsp(Java Server Page)파일에서 Java 코드를 작성하는 프로그래밍 방식이다.
- jsp파일에 html과 java코드를 함께 작성
-셋팅: 톰캣 9.0 , 이클립스 EE, Tern 라이브러리 (js) , 오라클 , SQLgate
프로젝트 생성시, 다이나믹 프로젝트를 선택하고, 마지막에 web.xml 옵션 반드시 체크 !
모델1 파일경로 예시
1. SQL GATE에서 테이블 및 시퀀스 생성
--fboard
/*1.요구사항
미니게시판
-번호, 제목, 작성자,내용,
-조회수,
-작성자의 아이피,비밀번호
-작성날짜
*/
CREATE TABLE FBOARD(
NUM NUMBER CONSTRAINT FBOARD_NUM_PK PRIMARY KEY,
SUBJECT VARCHAR2(100) NOT NULL,
WRITER VARCHAR2(30) NOT NULL,
PWD VARCHAR2(10) NOT NULL,
CONTENT VARCHAR2(200),
HIT NUMBER(10),
REIP VARCHAR2(34),
FDATE DATE
);
CREATE SEQUENCE FBOARD_SEQ
INCREMENT BY 1
START WITH 1;
2. 데이터를 담을 DTO (Data Transfer Object) , VO 클래스를 생성 .
sql에서 생성한 테이블 코드를 그대로 가져와서 보고 작성하는 것이 좋다.
FBoardVO 클래스 : alt+s+sh => getter/setter => all 선택
package vo;
public class FBoardVO {
/*CREATE TABLE FBOARD(
NUM NUMBER CONSTRAINT FBOARD_NUM_PK PRIMARY KEY,
SUBJECT VARCHAR2(100) NOT NULL,
WRITER VARCHAR2(30) NOT NULL,
PWD VARCHAR2(10) NOT NULL,
CONTENT VARCHAR2(200),
HIT NUMBER(10),
REIP VARCHAR2(34),
FDATE DATE
);*/
private int num;
private String subject;
private String writer;
private String pwd;
private String content;
private int hit; //조회수
private String reip; //사용자의 ip
private String fdate;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}
public String getReip() {
return reip;
}
public void setReip(String reip) {
this.reip = reip;
}
public String getFdate() {
return fdate;
}
public void setFdate(String fdate) {
this.fdate = fdate;
}
}
3. DB에 접근할 객체, DAO (Data Access Object) 생성 / 인터페이스 생성 => DB처리를 전담한다.
연습용으로는 인터페이스는 굳이 안만들어도 되지만 가능한 사용을 권장 (실전에서는 거의 쓰기 때문)
FBoardDaoInter <interface> 추상메서드 설계
*FBoardDao class , 오버라이딩, 싱글톤 처리*
-//싱글톤 : 자원이 제한적일때 스레드간의 간섭을 피하면서 자원을 효율적으로 사용하기 위한 패턴이다.
- static 영역에 오직 하나만 생성하고 , 다른객체가 공유하는 개념
( static 변수, 멤버필드, 메소드 등의 개념을 잘 알고 있다면 이해하기 수월하다)
- 외부에서 생성되지 않고 getDao()메서드를 호출 시에 최초에 한번만 생성하고 다음부터는 이미 생성된 주소를 사용하자!
=> 매번 new 키워드를 사용해서 객체를 만들어내면 메모리 낭비가 심하니, 한번 dao객체를 생성 한 뒤에, 그 객체에
데이터를 담고, 한 작업을 끝내고 다른 작업을 할 때 다시 다른 데이터를 담고... 이런식으로 진행 된다.
package dao;
import java.util.List;
import vo.FBoardVO;
public interface FBoardDaoInter {
//설계가 들어가야한다.=> 추상메서드 설계
//입력을 처리하는 메서드
public void addFBoard(FBoardVO vo);
public List<FBoardVO> listFBoard(); //게시판 리스트
public void updateHit(int num); //hit 조회수 증가
public FBoardVO detailFBoard(int num); //상세보기 메서드
public boolean checkPwd(FBoardVO vo); //비번, 넘버 받아야하지만 1개이상이면 vo 객체로 해버려도된다.
//(String pwd, int num) 비번 체크 메서드 비번 중복 방지-넘버 ///비번조회
public void deleteFBoard(int num); //게시판 삭제
public void updateFBoard(FBoardVO vo); //게시판 수정
}
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.sun.net.httpserver.Authenticator.Result;
import vo.FBoardVO;
public class FBoardDao implements FBoardDaoInter {
//싱글톤 : 자원이 제한적일때 스레드간의 간섭을 피하면서
//자원을 효율적으로 사용하기 위한 패턴이다.
// 싱글톤 처리 영역
// static 영역에 오직 하나만 생성하고 , 다른객체가 공유하는 개념
private static FBoardDao dao;
// 외부에서 생성되지 않고 getDao()메서드를 호출 시에 최초에 한번만 생성하고
//다음부터는 이미 생성된 주소를 사용하자!
private FBoardDao() {
}
public static FBoardDao getDao() {
if(dao==null) {
dao = new FBoardDao();
}
return dao;
}
//싱글톤 처리 영역
@Override
public void addFBoard(FBoardVO vo) {
// TODO Auto-generated method stub
}
@Override
public List<FBoardVO> listFBoard() {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateHit(int num) {
// TODO Auto-generated method stub
}
@Override
public FBoardVO detailFBoard(int num) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean checkPwd(FBoardVO vo) {
// TODO Auto-generated method stub
return false;
}
@Override
public void deleteFBoard(int num) {
// TODO Auto-generated method stub
}
@Override
public void updateFBoard(FBoardVO vo) {
// TODO Auto-generated method stub
}
}
4.셋팅 점검 및 변경
TOMCAT서버의 server.xml 파일에서 Connector 부분을 찾는다.
1. port를 80으로 변경 (오라클도 포트 8080을 쓴다고 들어서 충돌방지하려고 변경하는 걸로 추정)
2. URIEncoding="EUC-KR" 을 코드 안에 추가 해주기
<Connector URIEncoding="EUC-KR" connectionTimeout="20000" maxParameterCount="1000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
- OJDBC6.jar를 복사해서 apache-tomcat-9.0.75\lib 폴더에 넣어주기 => 프로젝트 refresh
-------한번 설정해두면 그 다음 프로젝트부턴 안바꿔도 된다.
5. meta-inf 폴더 안에 context.xml 파일 생성
(파일 위치랑 파일명을 임의로 지정 x 똑같이 해줘야함)
context.xml 안에 코드 복붙:
myora는 내가 원하는대로 임의 지정이 가능하지만 jdbc는 불가능
username과 password에는 오라클 DB의 유저 이름과 비번을 작성 !
<Context>
<Resource name="jdbc/myora"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"
username=""
password=""
maxActive="20"
maxIdle="10"
maxWait="-1"
/>
</Context>
=> WAS (web application server) 즉 톰캣이 DB에 접속을 해주는 셈
6.MyConn 클래스 생성
DataSource 객체를 획득해서 Connection을 반환하는 메서드를 정의하는 것이 목적
// context.xml에 작성한 context를 읽어와서
// DataSource 객체를 획득해서 Connection을 반환하는 메서드를 정의하는 것이 목적
package conn;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class MyConn {
// context.xml에 작성한 context를 읽어와서
// DataSource 객체를 획득해서 Connection을 반환하는 메서드를 정의하는 것이 목적
private static DataSource ds;
static {
try {
// context.xml에 Resource 객체를 통해서
// jndi 방식: context.xml에 있는 name= "jdbc/myora" lookup이란 메서드로 검색
/* JNDI(java Naming and Directory Interface)는
* Was 단에 데이터베이스 커넥션 객체를 미리 네이밍 해두는 방식(context.xml)이다.
* Connetion Pool에 Connection을 가져와서 Connection으로 반환하는 객체
* 즉, DataSource의 이름을 검색하는 방식이다.
* 사전적으로는 디렉토리 서비스에서 제공하는 데이터 및 객체를 발견하고
* 참고하기 위한 자바 API라고 한다.
*/
InitialContext ctx = new InitialContext();
ds=(DataSource) ctx.lookup("java:comp/env/jdbc/myora"); //외우기
} catch (NamingException e) {
e.printStackTrace();
}
}
public static Connection getConn() throws SQLException{ //connection: sql관련 interface
return ds.getConnection();
}
}
7.weapapp 폴더에 간단한 jsp 파일을 생성하여 연결 테스트를 해본다.
테스트 코드는 자유지만, 나는 이걸 썼다.
<%@page import="conn.MyConn"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
//conntest
<%
Connection con = MyConn.getConn();
%>
<p>con => <%=con %></p>
아래 처럼 출력이되고, 오류창이 뜨지 않는다면 web 작업할 준비 완료 !!
다음 포스팅에서 본격 게시판 만들기 !!!
'개발일기 > JSP 프로그래밍 (Java 웹프로그래밍)' 카테고리의 다른 글
JSP 개발방식 모델1 과 모델2 방식 비교 + MVC 패턴 (1) | 2023.06.09 |
---|---|
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 2 FBoard (0) | 2023.06.04 |
Web java => Servelet 서블릿 선언 방법 2가지 / 2번째 (0) | 2023.06.04 |
Java/ Web java => Servelet 서블릿 선언 방법 2가지 (0) | 2023.06.04 |
서블릿 기초 : html 파일 1개 + 서블릿 클래스 1개로 간단한 예제 (0) | 2023.06.04 |