728x90

 

sql의 테이블 확인하고 

vo의 필드(전역변수) 세팅

필요한 값들을 필드에 넣기

 

package com.kh.test.model;

import java.sql.Date;

public class Test {
	
	public int seq;
	public String writer;
	public String title;
	public String content;
	public Date regDate;
	
	public Test() {}

	public Test(int seq, String writer, String title, String content, Date regDate) {
		super();
		this.seq = seq;
		this.writer = writer;
		this.title = title;
		this.content = content;
		this.regDate = regDate;
	}

	
	public int getSeq() {
		return seq;
	}

	public void setSeq(int seq) {
		this.seq = seq;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	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;
	}

	public Date getRegDate() {
		return regDate;
	}

	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
	
	

}
728x90
반응형
728x90

 

에러메시지

java.lang.IllegalStateException: 응답이 이미 커밋된 후에는, sendRedirect()를 호출할 수 없습니다.

원인 : sendRedirect를 써놓고 아래쪽에 forward문을 또 서둠

해결 : 아래쪽에 있는 getRequestDispatcher().forwad 삭제

 

 

728x90
반응형
728x90

 

404 error : Page Not Found(페이지를 찾을 수 없다)

image, file, page 등 못찾아서 발생하는 것

form action, servlet url 연결부분, href 등의 부분을 주로 살펴보면 대부분 고칠 수 있을 것이다.

 

 

이클립스 + 코드 이상 없는 경우

이클립스를 쓰고 있고,  경로랑 철자 등 코드에 문제가 없는데도 계속 HTTP 404 오류와 함께 경로를 찾을 수 없다고 뜬다면

코드를 복사하고 기존 파일을 삭제하고 새로 생성하므로써 해결했습니다.

이클립스 불안정한 부분인 듯 합니다.

 

728x90
반응형
728x90

 

location.href에서 뷰화면.jsp를 호출하는데 웹페이지가 에러도 안나고 작동도 안하는 경우

인터넷 콘솔창에도 에러가 안뜨고 자바에도 에러 안뜨고,

코드도 다 정확한데 안될 때는 location.href가 소문자인지 확인!!

(필자의 경우 UHD 4k라 글씨가 좀 확 안보일 때가 있어서 l L이 좀 헷갈리긴 한다)

728x90
반응형
728x90

 

자바와 db를 연결하는 부분에서 공통적으로 자주 사용되는 코드를 모아 끌어 쓸 수 있게하는

템플릿 클래스에서 Connection 부분 코드 해보았다

 

public static Connection getConnection(){

    Connection conn = null;

    try{

        Class.forName("oracle.jdbc.driver.OracleDriver");

        conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "Test", "Test");

    } catch(ClassNotFoundException e){

    	e.printStackTrace();

    } catch(SQLException e){

    	e.printStackTrace();

    }

    return conn;

}
728x90
반응형
728x90

 

controller인 서블릿에서 Service를 거쳐 받아온 Connection의 연결정보와 유저 데이터인 객체 클래스의 데이터를 최종적으로 DAO에서 db에 쿼리문을 작성해서 보내므로써 결과를 받아와 Service로 반환한다

유저정보가 뭐가 올지 모르기에 유동적인 정보를 받을 수 있는 PreparedStatement로 쿼리문을 보내고,

유저의 로그인 정보(pw, address, phone, nickname 등) 전체를 받아와야하기에 객체를 받는 ResultSet으로 결과값을 받고 

 

if문으로 로그인정보 전체를 가져올 수 있게 조건을 ResultSet reset의 값이 있는지 reset.next()로 다음 값이 있으면 가져오게끔 해서 getString()로 컬럼 항목 하나씩 객체에 저장하면 Service로 return할 객체 정보 추출 완료

 

마지막으로 try catch와 사용한 객체를 닫아주기 위해 close 해주고 반환 타입 확인 후 return

 

public Member login(Connection conn, Member mem){

    PreparedStatement pstmt = null;
    ResultSet rset = null;
    Member loginC = null;

	String query = "SELECT * FROM MEMBER WHERE USER_ID = ? AND USER_PWD = ?";

    try{
        pstmt = conn.prepareStatement(query);
        pstmt.setString(1, m.getId());
        pstmt.setString(2, m.getPwd());

        rset = pstmt.executeQuery();

        if(rset.next()){
            loginC = new Member(rset.getString("USER_ID"),
                                rset.getString("USER_PWD"),
                                rset.getString("USER_NAME"),
                                rset.getString("PHONE"));
        }
        
    } catch(SQLException e){
   		e.printStackTrace();
    } finally{
        close(rset);
        close(pstmt);
    }
    return loginUser;
}
728x90
반응형
728x90

사용 프로그램

java + eclipse

 

메세지

java.sql.SQLException: ORA-12899: value too large for column "JSP_SERVLET"."MEMBER"."USER_NAME" (actual: 30, maximum: 15)

 

상황

톰캣 사용하여 프로젝트 구동으로 서버를 통해 웹페이지를 작동시킬려는데 내정보보기 수정 과정에서 유저 이름의 항목이 최대 길이를 넘어서 들어갔기에 오류가 난 상황

 

원인

user_name 컬럼에 15글자까지 들어갈 수 있는데 30글자가 들어가면서 에러 발생

 

 

해결

 

맥시멈 길이를 늘리던가 들어가는 데이터를 15글자 이내로 조정

728x90
반응형
728x90

 

Servlet Mapping 방법 2가지

서블릿 매핑 : 서블릿하고 url를 연결

*매핑(mapping) : 하나의 값을 다른 값으로 대응시키는 것

1) web.xml

배포서술자(DD, Deployment Descriptor)

배포서술자의 파일로 web.xml를 사용하는 것

애플리케이션에 대한 전체 설정 정보를 담아두는 파일

여기서 설정이란 인코딩,보안,매핑 설정 등등을 듯함

<welcome-file>

시작 시 실행시키는 파일들을 명명하는 곳

web.xml파일이 실행되면 index.html 파일을 바로 실행하게함

<servlet>

url들어온 이름보고 같은게 있는지 확인하고 거기에 있는 클래스를 실행(<servlet-class>)

<servlet-mapping>

매핑이 url 뭐가 들어왔는지 확인

<url-pattern>

url 주소를 받아오는 곳

<servlet-class>

연결되면 어느 서블릿 클래스를 불러올지 지정하는 곳

 

web.xml 동작 순서

  1. 인터넷 주소창에서 url을 받아옴
  2. <url-pattern>태그에서 해당 url을 받아 저장
  3. <servlet>과 <servlet-mapping>의 <serlvet-name>태그 정보가 같은지 확인
  4. 같다면 <servlet>의 <servlet-class>에 지정된 자바 클래스 파일 실행

 

2) @Annotation

자바에서 Override할 때 사용. 명시로 알려주고, 관련 에러도 잡아줬었음

 


 

Servlet Container

웹서버와 서블릿 사이의 통신을 지원

서블릿 생명주기(life cycle)를 관리

새로운 요청이 들어올 때마다 자바 스레드를 생성해서, 사용자의 요청을 처리

선언적인 방법으로 보안관련 내용을 설정할 수 있다

 

 

 

728x90
반응형
728x90

 

컨트롤러인 서블릿으로부터 유저에게 받은 유저정보를 넘겨 받아 DAO로 연결 정보와 유저정보를 같이 넘겨주면서 DAO를 호출한다.

 

또한 Service 클래스에서 역할인 DB연결 Connection 클래스를 사용하여 오라클과 연결해주고, 기능이 복잡해지면 꼬일 수 있기 때문에 close로 닫아주도록 하자.

메소드 기능에 따라 트랜잭션 처리가 필요하면 commit & rollback 추가

 

public Member login(Member mem){
    Connection conn = getConnection();

    Member loginC = new MemberDAO().login(conn, mem);

    close(conn);

    return loginC;

}
728x90
반응형
728x90

 

db연결할 때 드라이버, 주소, sql 로그인 아이디, 비번 등

그리고 쿼리문을

코드 내부에 통합해서 작성할 수도 있지만,

외부 파일에 모아서 한번에 해결 가능하다 

 

이때 사용하는 자바 클래스 Properties

외부파일 확장자도 .properties이다

ex) sqlDriver.properties

어디서든 접근할 수 있게 선언은 필드로 한다

 

Dynamic Web프로젝트 파일에서의 Properties클래스 선언 및 외부파일 경로 지정

// 외부파일 로드용 클래스 Properties 선언
Properties prop = new Properties();

// 외부 파일 경로지정
public NoticeDAO() {
    String fileName = NoticeDAO.class.getResource("/sql/notice/notice-query.properties").getPath();

    try {
        prop.load(new FileReader(fileName));
    }catch(FileNotFoundException e) {
        e.printStackTrace();
    }catch(IOException e) {
        e.printStackTrace();
    }
}

 

쿼리문 사용 방법 예시

String query = prop.getProperty("selectList");

	public ArrayList<Notice> selectList(Connection conn) {
		// 고정값(공지사항)을 조회하는 거기에 Statement 사용
		Statement stmt = null;
		ResultSet rset = null;
		ArrayList<Notice> list = new ArrayList<>();
		
		String query = prop.getProperty("selectList");
        ...

 

드라이버 세팅 외부파일 처리

 

 

 

 

 

 

728x90
반응형

+ Recent posts