인코딩 설정, 포트 에러, Context 에러, 경로 설정, Controller

Spring Legacy Project 새로 생성

 

생성된 프로젝트에서 pom.xml 파일 안의 자바와 스프링의 버전을 변경 후 저장 >> Maven Dependencies 의 버전이 변경되었는지 확인

 

javax.servlet-api

 

maven 버전 변경, java 버전도 1.8 로 변경

 

프로젝트 업데이트 진행

 

Ctrl + F11 >> Finish

 

서버가 실행되었지만 인코딩 오류로 인해 글자가 깨짐

 
▼ 인코딩 해결 코드 ▼

encodingFilter.txt
0.00MB

 

위 파일 내용 복사 후 진행

 

src > main > webapp > WEB-INF 폴더 내의 web.xml 파일에 해당 코드 붙여넣기 ( 인코딩 관련 코드 )

 

열려있던 웹 창 종료 후 프로젝트 클릭 > Ctrl + F11 클릭하여 재시작 시 한글이 깨지지 않고 정상적으로 출력됨

 
 
 
 
 


 
포트 충돌 에러가 발생하는 경우
 

서버 더블클릭 후 포트 정보를 변경

 


 
경로 충돌 에러가 발생하는 경우
 

여러 실습을 진행하면서 ex01 이라는 경로를 다른 파일에서 실행하더라도 경로가 겹쳐서 저장되게 된다, 그러므로 server.xml 에서 등록된 Context 를 주석처리해준 뒤 실행해준다

 


 
 
 
 
 

웹 브라우저 출력되는 부분을 보기 편하도록 Chrome 으로 변경 > 서버 실행 시 크롬으로 출력되는 것 확인

 

General - Workspace - Other : UTF-8 설정

 

CSS, HTML, JSP 파일 모두 인코딩 방식 UTF-8 로 설정 후 저장 종료

 

Controller 를 변경하여 default 경로를 /member 로 변경 후 접속 테스트 > 정상적으로 /member 경로로 접근할 때만 접속됨

 

테스트용으로 설정해둔 것이기 때문에 다시 돌려놓음

 

연습을 위해 MyController.java 와 jsp 파일 세개 를 폴더에 세팅

 

index.jsp 간단하게 작성

 

MyController.java 에 경로를 추가 후 서버 재실행하여 index 경로로 접속 >> 정상적으로 컨트롤러를 거쳐 웹 출력

@Controller 어노테이션 : 경로를 지정하는 클래스라는 걸 선언
@RequestMapping 어노테이션 : 경로를 설정 ( 따로 선언하지 않으면 GET 방식과 POST 방식을 모두 받을 수 있음 )
return 값에는 출력될 jsp 의 경로가 들어간다

 

@GetMapping 을 사용하여 접속

@GetMapping 어노테이션 : GET 방식의 요청을 처리

 

model 에 키와 값을 저장하여 전달 >> jsp 파일에서 키로 값을 꺼내서 사용 >> 출력

 

ModelAndView 를 사용하여 jsp 파일로 넘길 모델과 출력될 jsp 를 모두 설정 후 리턴으로 모델을 반환하여 출력

 
 
 
 
 


실습 예제

실습 예제

 

예제 풀이

예제 풀이

절대 경로로 설정하려면 /ex01/index 와 같이 설정
혹은 만약 경로가 변경될 일이 있을 수 있기 때문에 <%= request.getContextPath() %>/index 와 같이 표기하는 것이 가장 좋다
<%= request.getContextPath() %>/login
<%= request.getContextPath() %>/logout


728x90

 

 

 

 

 

Interface

Interface 생성해서 사용할 클래스 파일 4개와 Interface 파일 하나 생성

 

CarService 인터페이스 파일에 메소드 추가

 

CarServiceImple01.java 에서 CarService.java 를 상속받은 뒤 오버라이딩

 

MainClass 작성

 

SubClass.java 작성 후 MainClass.java 실행

 

만약 기능을 변경해야 하는데 변경해야될 부분이 너무 많다고 가정

 

기능 변경이 구현된 CarServiceImple02.java 작성

 

application_car.xml 생성 및 작성

 

MainClass.java 와 SubClass.java 의 생성자를 통해 사용하던 코드를 주석처리 하고 xml 에서 설정한 값을 받아서 처리하는 코드로 변경 후 실행 => 기존과 동일하게 작동

 

xml 에서 class 를 기존의 CarServiceImple01 에서 CarServiceImple02 로 변경했다면 >> xml 파일을 통해 가져와서 처리되므로 모든 해당 코드가 들어있는 모든 코드가 변경되어 실행된다

728x90

 

 

 

 

 

설정 파일에 변수 설정하여 사용하기

 

src/main/resources 안에 file 을 추가

 

파일 명 설정

 

설정 값을 저장하는 파일을 생성

 

db 설정에 관련된 내용을 파일에 추가

 

MainClass.java, DBClass.java 파일을 생성

 

DBClass.java 에 id 와 pwd 라는 변수를 생성 후 setter / getter 생성

 

기본 생성자와 아이디와 비밀번호를 받는 생성자 선언

 

resources 에 application_db.xml 파일 생성 및 작성

 

MainClass 작성 및 콘솔 결과 값 확인

 

db.properties 파일을 불러오기 위해 context 기능을 추가

 

context:property-placeholder 를 사용하여 db.properties 파일을 불러와서 사용

 

파일 안에서 선언한 변수를 사용할 때에는 ${} 를 사용하여 변수를 사용한다

 

MainClass.java 에서 파일의 변수로 생성자를 통해 생성한 db02 객체를 가져와서 출력 ( 콘솔 창 결과 값 확인 )

 

>>> 기본 생성자로는 기존에 사용하던 방식으로 먼저 객체를 생성하여 그 객체 안에 id 와 pwd 값을 xml 파일에서 property 를 사용하여 값을 주입하여 사용

>>> 두번째 방식은 이미 존재하는 값을 file 로 저장하여 파일 안의 내용을 불러와 id 와 pwd 값을 필요로 하는 생성자를 사용해서 사용

 


 

 

 

 

 

ArrayList 와 HashMap 에 xml 파일로 값 주입해서 사용하기

ListArray 와 HashMap 을 xml 파일로 설정해서 사용해 볼 것임 ( seter / getter 사용 )

 

방금 생성한 list 와 map 의 값을 xml 파일을 통해 주입해서 사용

 

MainClass.java 에서 출력해서 확인

 

ArrayList 와 HashMap 에 xml 파일로 값 주입해서 사용하기 완료

 


728x90

 

 

 

 

 

IOC, DI ( Dependency Injection )

IOC

IOC : 객체들을 저장하고 있는 틀

( 기존에는 new 연산을 사용해서 객체를 사용했으나, 스프링에서는 new 연산을 사용하지 않고 특정 객체를 미리 만들어 특정 저장소에 저장해둔 뒤 객체를 꺼내서 사용한다, 이때 객체를 저장하고 있는 틀이 IOC 이다 )

DI

DI : 의존관계 주입 기능

( 객체를 만들었을때 또 다른 객체와 연결되어 잇는 경우 의존 관계가 있다 )

ex) 칼이라는 객체가 있다.... 또 주방장이라는 객체가 있는데 주방장이라는 객체는 칼이 있어야 요리를 할 수 있으므로 주방장 객체는 칼에 대한 의존 관계이다.

 

 

 

 

 

xml 파일을 통해 객체를 만들어 사용하는 방법

Spring Legacy Project 생성

 

이름 짓고 Spring MVC project 선택 후 Next >

 

패키지 이름을 url 형식으로 만든 뒤 Finish

 

프로젝트 우측 클릭 > Maven > Update Project 클릭 하여 프로젝트를 업데이트

 

객체를 생성할 클래스 파일 생성

 

STBean.java 파일 작성

 

Student 클래스 파일 작성하여 작성

 

메인 클래스 생성

 

메인 클래스 작성

 

콘솔창에 출력됨

 

STBean 에서 변수를 생성 후 Student 클래스의 객체를 생성하여 안의 메소드를 사용 > 즉, STBean 이 객체를 연결시켜주는 DI 역할을 한다 ( 기존에 자바를 사용하던 방식 )

 

이제는 스프링에서 사용하는 DI 형태를 사용할 것임

 

스프링에서 사용하는 형태의 DI 를 사용할 것임, 패키지 생성 후 MainClass 생성

 

Spring Bean Configuration File > xml 파일 생성

 

이제 xml 안에 객체를 생성할 것임

 

id : 객체 이름, class : 객체 경로

 

id : 객체 이름, class : 객체 경로

 

st01 객체를 st 라는 이름으로 의존성을 주입한다는 의미 ( Beans Graph 를 눌러서 시각적으로 확인 가능, 돌아가려면 Source 클릭 )

 

이제 MainClass 에서 해당하는 값을 꺼내와서 사용할 것임

 

xml 파일에 선언해 놓은 객체를 GenericXmlApplicationContext 를 사용하여 경로를 불러와 변수로 담아 사용

 

이번에는 setter 로 객체에 내용을 생성하는 것이 아닌 xml 파일을 사용해서 값을 넣어서 사용 > 실행 결과

 

 

 

 

 

실습 예제

실습 예제

 

예제 풀이

파일 세팅

 

PrintBean.java 추가 작성

 

xml 작성 ( PS 객체를 생성하여 PB 객체 안의 ps 에 의존성을 주입 )

 

메인 클래스 작성 후 실행

728x90

 

 

 

 

 

Spring 설치 및 프로젝트 생성 시 오류 설정

 

spring 이 설치되어 있는 eclipse (sts) 설치

 

Spring Tool Suite 3.9.14 - New and Noteworthy

Spring Tool Suite 3.9.14: New and Noteworthy Important Note This is a minor bugfix and maintenance release that we ship to our existing STS3 users beyond the announced maintenance lifespan for your convenience. We strongly recommend to update to the new Sp

docs.spring.io

STS3 버전 사용할 것임

 

google 에 sts3 검색해서 나오는 페이지 들어간 뒤 다운로드 링크 클릭

 

상단의 zip 파일 다운로드

 

다운로드 완료

 

압축 해제

 

압축 해제된 폴더 안에 sts-3.9.18.RELEASE 폴더 안에 STS.exe 가 존재

 

STS.exe 실행

 

workspace 설정

 

기본으로 설정되어 있는 서버와 서버 파일 삭제

 

둘 다 삭제하면 왼쪽 화면은 빈 화면이 된다

 

서버를 Tomcat 9.0 으로 추가해 줄 것임

 

서버 Tomcat 9.0 으로 지정 및 Tomcat 9.0 폴더를 지정

 

톰캣 경로를 잡아준 뒤 Finish

 

잠시 STS 종료 후 진행

 

spring-master.zip
0.01MB

 

위 zip 파일 다운로드 받아 압축 해제

 

압축 해제 후 spring > spring-master 폴더에 plugins 폴더 접속

 

위에서 압축을 해제한 plugins 폴더 내의 설정 파일을 복사하여 workspace 폴더 내의\spring\workspace\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core 위치에 붙여넣기

 

Spring Legacy Project 생성

 

처음 프로젝트를 시작하면 오류 발생

 

다시 STS 종료 후 아래 과정 진행

 

위에서 압축을 해제한 sts템플릿 폴더 내의 설정 파일을 복사하여 workspce폴더 하위의 \spring\workspace\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2 경로 내에 3가지 파일을 붙여넣기

 

다시 STS 실행

 

이번엔 정상적으로 Spring MVC Project 가 생성된다.

728x90

 

 

 

 

 

파일 업로드, 다운로드

 

Servlets.com

Home What's New? COS File Upload Library Servlet Polls Mailing Lists Servlet Engines Servlet ISPs Servlet Tools Documentation Online Articles The Soapbox "Java Servlet Programming, Second Edition" "Java Enterprise Best Practices" Speaking & Slides About Ja

www.servlets.com

라이브러리 다운로드를 위해 위 사이트로 이동

 

좌측 COS File Upload Library 클릭 후 하단의 cos-22.05.zip 파일 다운로드

 

파일 세팅

 

저장될 폴더 생성

 

파일 세팅 ( lib 내의 cos.jar 는 위에 사이트에서 다운로드 받은 zip 파일 풀어서 lib 폴더 내에 있는 cos.jar 파일 가져오면 된다 )

 

 

 

 

 

파일 업로드 구현

upload_form.jsp 에 간단히 파일 업로드 폼 작성

 

upload.jsp 간단히 작성

 

FileOperation.java 작성

 

FileOperation.java 추가 작성

 

파일 업로드 정상적으로 되는 것 확인 ( 파일 이름이 중복되면 넘버링되어 저장됨 )

 

 

 

 

 

파일 목록 출력과 다운로드 구현

업로드 된 파일 목록을 띄워주면서 다운로드 가 가능한 기능을 만들 download_form.jsp 작성

 

FileOperation.java 에 업로드된 파일 목록을 가져와서 반환하는 getFileList() 메소드 생성

 

download_form.jsp 에 이미지를 출력하면서 이미지에 링크를 추가

 

download.jsp 내용 작성

 

FileOperation.java 파일에 fileDown() 메소드 작성

 

파일 다운로드 구현 완료
728x90

 

 

 

 

 

페이징

페이징 방식

 

회원 정보를 페이징하여 출력하기

 

페이징 처리를 위해 m_list.jsp 수정

 

페이징 처리를 위해 기존 MemberDAO.java 에 있떤 getList() 메소드를 변경 및 getTotalCount() 메소드와 getOperation() 메소드 추가

 

페이징 처리 완료
728x90

 

 

 

 

 

회원 가입, 삭제, 수정, 로그인 구현

파일 세팅

 

sql 문 작성

 

파일 세팅 완료

 

 

 

 

 

로그인 구현

header.jsp 작성

 

index.jsp 파일 생성 후 작성

 

m_login.jsp 작성

 

m_login_check.jsp 작성

 

MemberDAO.java 에 기본 DB 접근 준비 코드 작성

 

MemberDTO.java 에 컬럼명으로 변수 생성 및 getter / setter 선언

 

MemberDAO.java 에 쿼리문 실행 결과를 dto 에 각각 setter 를 사용하여 저장한 뒤 return

 

m_login_check.jsp 에서 DAO 객체를 통해 가져온 값과 입력 값을 비교 후 result 라는 변수를 생성, 로그인 성공이라면 session 을 발급하여 m_login.jsp 로 result 파라미터 값을 전달하면서 리다이렉트 시킨다

 

m_login.jsp 파일에서 전달 받은 loginId 세션이 null 이면 로그인 폼을 출력, null 이 아니라면 userName 세션의 값으로 출력 후 로그아웃 버튼 출력

 

m_logout.jsp 파일 작성 ( 세션을 모두 삭제하고 다시 로그인 페이지로 리다이렉트 하는 코드 작성 )

 

코드 실행 영상

 

 

 

 

 

멤버 목록 출력 및 개인 정보 출력 구현

header.jsp 에서 로그인 상태일때 logout 으로 경로 변경 및 m_list.jsp 로 경로 추가

 

m_list.jsp 작성

 

MemberDAO.java 에 getList() 메소드 생성하여 sql 문 실행 값을 dto 에 저장하여 반환 및 자원을 모두 사용한 뒤 닫아주는 작업까지 진행

 

m_list.jsp 에서  가져온 값 출력 및 a 태그 달아서 상세 페이지로 넘기는데 이때 세션 값을 확인하여 로그인 상태가 아니면 로그인 페이지로, 로그인 상태면 상세 페이지로 이동시킨다

 

m_info.jsp 작성

 

코드 실행 영상

 

 

 

 

 

회원가입 구현

m_login.jsp 에 회원가입 경로 추가

 

m_register_form.jsp 작성

 

m_register.jsp 작성

 

MemberDAO 에 register() 메소드 생성 ( 생성 성공 시 1 반환, 실패 시 0 반환 )

 

코드 실행 영상

 

 

 

 

 

회원 수정, 삭제 구현

회원 삭제, 수정 기능 버튼 추가

 

m_modify_form.jsp 작성

 

m_modify.jsp 작성

 

MemberDAO.java 에 modify() 메소드 정의 ( 성공 시 1 반환, 실패 시 0 반환 )

 

m_delete.jsp 작성

 

MemberDAO.java 에 delete() 메소드 작성

 

코드 실행 영상

 

 

 

 

 

!!! 문제 발생 !!!

회원 수정 이후 redirect 로 회원의 id 값을 넘기는 과정에서 url 에 한글이 들어가면 encoding 오류가 생기는 것을 확인 >

한글을 미리 인코딩 처리하여 변수로 담아 사용하니 해결

문제 해결

728x90

'BE > JSP' 카테고리의 다른 글

[JSP] 파일 업로드, 다운로드  (0) 2024.05.02
[JSP] 페이징  (0) 2024.05.02
[JSP] JSTL - 파라미터 값 받기  (0) 2024.05.01
[JSP] EL ( Expression Language ), JSTL ( if, for, exception )  (2) 2024.05.01
[JSP] 액션 태그, bean 객체 활용  (0) 2024.04.30

+ Recent posts