코드 분석
Service
@Container
빈 객체가 되어 서블릿용 컨테이너에 생성
@Repository
@Service
해당 클래스를 루트 컨테이너에 빈 객체로 생성
@Component
@SuppressWarnings({" ", " "})
자바에서 노란줄의 경고등을 없애주는 어노테이션
빈공간
all: 모든 경고
cast: 캐스트 연산자 관련 경고
dep-ann: 사용하지 말아야 할 주석 관련 경고
deprecation: 사용하지 말아야 할 메서드 관련 경고
fallthrough: switch문에서 break 누락 관련 경고
finally: 반환하지 않는 finally 블럭 관련 경고
null: null 분석 관련 경고
rawtypes: 제너릭을 사용하는 클래스 매개변수가 블특정일 때의 경고
unchecked: 검증되지 않느 연산자 관련 경고
unused: 사용하지 않는 코드 관련 경고
VO
객체 내 데이터 변경작업이 있는 객체
루트 컨테이너, 서블릿용 컨테이너 생성할 때 어노테이션 검색하기 때문에, 컨테이너 생성시 참조하는 xml파일에 어노테이션 스캔 설정이 존재해야함
DB처리를 위해 DAO클래스 생성, @Repository 어노테이션
해당 클래스는 루트 컨테이너 빈 객체로 생성
DB작업을 위해 DAO 객체를 불러오려면 new 생성 X ,컨테이너 활용
public interface HmsBrdCateService { String insertHmsBrdCate(HmsBrdCateVO vo , MultipartHttpServletRequest request) throws Exception;
}
//HmsBrdCateVO vo 객체 , MultipartHttpServletRequest request 객체를 파라미터로 받고 예외처리로 던질 수 있는 Exception처리.
//Multipart 데이터 처리
멀티파트 데이터는 파일 업로드 등에서 사용되는 데이터 형식.
-----------------------------------
Servie(Interface)를 상속받은 Service Impl(class)
Serializable 인터페이스를 상속받은 HmsBrdCommentDefaultVo //Serializable을 implements (직렬화)
직렬화: 객체 데이터를 바이트 형태로 변환 하는 것
직렬화 대상 (멤버변수) 생성자X, 메서드X
객체를 바이트 단위로 변환하는 이유
데이터를 외부 서버로 전송하기 위해 (객체를 DB에 저장, 파일로 저장한 객체를 전송) --->Stream을 통해 데이터를 보냄 ---> Stream으로 데이터를 보낼 때 바이트 단위로 보내야 함
private 변수 선언;
private brdMngSeq;
public String getBrdMngSeq() {
return brdMngSeq;
}
public void setBrdMngSeq(String brdMngSeq) {
this.brdMngSeq = brdMngSeq;
}
HmsBrdCate jsp
// 상세, 카테고리명, 항목명, 순서, 수정, 삭제, 목록
디테일
<%@include file= "/common/taglib.jsp" %> //서버측 include가 아닌 클라이언트측의 include 출력 결과만 include한다.
jsp 파일을 자바소스로 변환할 때 처리
연결된 파일을 포함해서 같이 컴파일
include 지시어는 다른 JSP 소스 코드를 해당 JSP에 그대로 포함
조각난 코드를 삽입할 때 사용
<jsp:include> 태그
다른 JSP 소스코드가 아니라 다른 JSP 실행 결과 값을 해당 JSP페이지에 포함
페이지를 모듈화 할 때 사용
리스트
등록
public String toParam() {
StringBuilder sb = new StringBuilder();
sb.append("?pageIndex="+pageIndex);
if(!bmode.equals("")) {
sb.append("&bmode="+bmode);
}
if(!searchCondition.equals("")) {
sb.append("&searchCondition="+searchCondition);
}
if(!searchKeyword.equals("")) {
sb.append("&searchKeyword="+searchKeyword);
}
return sb.toString();
}
//StringBuilder: 코드에서 문자열을 연결하기 위해 사용
// 문자열 연산을 수행할때
HmsBrdCommentDefaultVo
인터페이스
클래스 (자식이 부모 다중상속)
추상 메소드, 상수만 포함
public interface HmsBrdCateService {
String insertHmsBrdCate(HmsBrdCateVO vo , MultipartHttpServletRequest request) throws Exception;
JSP
c: if 태크
test 속성내 EL의 결과가 참이면 실행
enctype="multipart/form-data"
모든 문자를 인코딩하지 않음을 명시한다.
이 방식은 <form> 요소가 파일이나 이미지를 서버로 전송할 때 주로 사용
세션사용
웹 클라이언트(이용자)가 요청하면 WAS에서 세션키, 저장소, 세션키를 담은 Cookie 생성
.web: 컨트롤러
VO: private 변수 선언 과 getter setter메소드
DefaultVO: 코드에서 문자열 연결하기 위해 사용
//HmsBrdCateList
검색항목 선택, 카테고리명, 목록, 번호 항목명, 순서,등록된 데이터가 없습니다. ,카테고리관리, 등록 목록
//HmsBrdCateRegister
글작성, 항목명, 순서, 저장, 목록
LOCALFOOD_SEOUL
login_01.jsp //로그인 화면
로그인후 이동 -->
CmLoginController @RequestMapping(/login)
수발주 시스템 호출
function fn_go_ibiz(user_id, user_pwd, comp_seq){
var d = new Date();
var userwidth = (screen.width - 10);
var userheight = (screen.height -80);
// 수발주 IBIZ 로그인
//splashWin = window.open("main.do?UserId="+user_id+"&LoginPwd="+user_pwd+"&Company="+comp_seq , d.getTime().toString(), "fullscreen=0,toolbar=0,location=0,directories=0,menubar=0,status=0,scrollbars=1,resizable=1,Height=" + userheight + "px,Width=" + userwidth + "px,Top= 0,Left= 0",true);
//splashWin.focus();
var params = {'UserId':user_id,'LoginPwd':user_pwd, 'Company':comp_seq};
fn_go_post_to_url("main.do", params);
}
@RequestMapping("/dsdsd")
컨트롤러 클래스에 대한 기본 URL 경로 : dsdsd
tobeAdapter loginService
두개의 빈을 @Autowired 토왜 자동 주입받음
mv.setViewName("/login/login_01");
@RequestMapping("/login"): "/login/login" 경로로 요청이 오면 login 메서드가 처리합니다. 이 메서드는 로그인 화면을 표시하는 뷰(login_01)를 반환합니다.
ModelAndView
데이터와 뷰 정보를 담고있는 객체
mv.setViewName("jsonView")
뷰의 이름: jsonView
이는 Spring에서 JSON 형식의 응답을 생성하는 뷰 resolver //클라이언트에게 JSON 형식의 데이터를 반환한다
오라클 DB에 쿼리 날리기
(insert, delete Update, select)
Statement와 PreparedStatement의 차이
캐시 사용 유무
PreparedStatement: 객체를 캐시에 담아 재사용, 반복적으로 쿼리 수행할때 좋음
statement: 보안적인 문제에 있어 취약, 사용x
jsp 파일에 쿼리문 수정