티스토리 뷰

사용 예시는 비밀번호 찾기 ( 임시비밀번호 메일로 전송 ), 글쓰기( 사진 업로드 ), 좋아요 누르기 3가지를 예로 들어 설명하겠습니다.

 

 

이것은 적용할 수 있는 코드가 아닌, 제가 만든 프로젝트에서 사용한 코드 일부분들을 나열하여 MVC의 진행과정과 코드가 어떻게 적용되는지를 보여주기위한 글입니다.

 

 

이전글은 https://15051015.tistory.com/53

MVC에 대해 구조적 , 이론적으로 공부하고싶으시면 이전글을 보고 와주세요

 

A. 비밀번호 찾기

 

1. index_User.jsp

 

jsp에서 post 방식으로 userName 과 userEmail를 서버url로 전송합니다 .

 

2.UserRestController.java

 

RequestMapping 으로 url에 해당하는 컨트롤러를 동작합니다.

 

여기서 findpwd의 파라미터로 TbUserVO vo 를 적어주어서 자동으로 vo의 이름과 받은 변수의 이름이 같으면 vo에 값이 들어갑니다.

 

Box box = Box.makeBox(request); // box에 전달받은 값들이 들어갑니다.

Box ubox = commSearchService.selectSerch("selectTbUser",box);

 

cbiz 폴더에 있는 이미 정의되어 있는 검색서비스를 불러옵니다. select타입의 쿼리문은 이 문장을 통해 불러올 수 있습니다.

 

password = readomPassword(10); 을 통해 임시비밀번호 생성

vo.setUserPwd(Sha256Util.encrypt(password); // sha256 으로 암호화한 password를 vo에 저장합니다.

 

tbUserService.updateTbUserfindpwd(vo); //vo를 매개변수로 쿼리문을 실행합니다. ( 쿼리문에서 vo를 받아서 업데이트 함 )

 

jsonObj로 user_name, user_email, new_user_pwd 생성

 

3.UserRestController.java , context-properties.xml, SendMailUtil.java

 

UserRestController.java

SendMailUtill 클래스 생성 후, 미리 정의해둔 회사 메일로 메일 보내기 설정을 한다.

 

context-properties.xml

 

구글 SMTP를 사용하기 위한 설정이다. 여기서 mailId와 mailPW, snenderEmailNm, senderEmailAddr 을 원하는 아이디로 변경하여 사용하면 된다.

 

 

SendMailUtil.java

 

snedMail 함수를 통해 메일 제목과 내용을 보내게 된다.

 

 

 

구글의 smtp(메일 통신 프로토콜) 설정을 통해 메일을 보낸다.

 

 

 

메일이 성공적으로 보내졌는지 실패했는지 체크한다.

 

마지막으로 returnJsonResult를 통해 Json 결과를 보낸다.

 

B. 다이어리 글쓰기 (사진 파일 업로드)

 

1.index_Diary.jsp

 

form에서 enctype="multipart/form-data" 를 추가해준다.

 

파일을 입력받을 수 있게 <input type="file" name="img" > 파일타입을 만들어준다.

여기서 name 이 VO 값과 겹치면 string 타입으로 들어가려 하기 때문에 에러가 난다. name을 vo와 다르게 해야한다. (VO를 String으로 선언했기 때문에)

 

2.DiaryRestController.java

 

 

// MultipartHttpServletRequest multiRequest 이걸 사용해 준다. 멀티 리퀘스트를 통해 파일을 주고받을 수 있다.

multiRequest.setCharacterEncoding("utf-8"); // 멀티 리퀘스트

 

Box box = Box.makeBox(multiRequest,

 

propertiesService.getString("Globals.fileStorePath"), "data", model); // 설정한 파일경로에 data 폴더에 파일을 저장

파일경로 설정은 config-local.properties에서 한다.

 

2. src/main/resources/properties/config-local.properties 에서

 

Globals.fileStorePath=D:/bnsoft/workspace/dailynote_web/src/main/webapp/upload_data //자신이 저장하고 싶은 폴더

Globals.fileStoreUrl=http://192.168.1.178:8080/upload_data //다른사람이 접속해서 들어갈 수 있는 폴더 주소 설정

 

Box photoFile = box.getFileBox("img"); // box (photoFile) 에 파일 저장 (jsp 에서 img로 보내줬음)

vo.setImgFn(photoFile.get("file_nm"));

vo.setImgSfn(photoFile.get("sfile_nm")); //db에 각각 진짜 파일네임과 sno파일 네임을 저장 ( 파일 이름이 같을 수 있으니까 구분 시켜줌)

 

그 후 vo를 insert 해주면 글쓰기 완료

 

/////////////////////////////////////////////////////////////////////////////////////////////////

 

파일 불러오기

 

1. config=local.properties에서

Globals.fileStoreUrl=http://192.168.1.178:8080/upload_data //다른사람이 접속해서 들어갈 수 있는 폴더 주소

설정

 

 

2. 컨트롤러

Box ubox = commSearchService.selectSearch("selectTbDiaryImg", cbox);

putFileFullPath(ubox, "sfile_nm", "data");//url 에 접속할 수 있게 현재 파일이 저장된 경로를 말해준다 //public void putFileFullPath(Box box, String colNm, String subDir)

 

//////////////////////////////////////////// fileFullPath = fileStoreUrl+"/"+subDir+"/"+box.get(colNm).subtring(0, 6)+"/"+box.get(colNm);

////////////////////////////////////////////subDir : sfile_nm //data : 설정된 경로 + 저장되어있는 폴더 이름 (위에서 data 폴더에 저장했음) //colNm : sfile_name에서 앞 6자리만 따와서 저장 (저장할 때 자동으로 앞 6자리를 폴더를 만든 뒤 그 안에 해당하는 파일을 넣었기 때문)

 

이제 ubox.get("file_full_path")를 json으로 넘겨주면, 상대방은 저장된 파일의 경로를 알 수 있다. ( DB에 저장되어 있는 파일 경로 )

상대방은 url에 접속해서 알아서 이미지를 가져오거나, 다운받으면 된다.

 

//////////////////////////////////////////////////////////////////////////////////////////////////////파일 불러오기 끝

 

 

C. 좋아요 기능

 

1.index_Diary.jsp

 

diarySno와 userSno, isLike를 입력받는다.

 

2.LikeRestController.java

 

 

Box diaryBox= commSearchService.selectSearch("selectTbopenDiary", box);

Box userBox = commSearchService.selectSearch("selectTbUser", box);

 

if(diaryBox.isEmpty()) { //해당하는 글이 없을시 에러}

else if(userBox.isEmpty()) { // 해당하는 user가 없는 경우 error}

알고리즘은 그냥 보면 될 것 같습니다.

 

결론은 좋아요가 눌리면 DB에 LIKE 테이블을 하나 증가시키고, USER의 like_cnt를 하나 올려줍니다.

 

취소가 눌리면 동일한 방식으로 LIKE 테이블을 하나 삭제하고, USER의 like_cnt를 하나 줄여줍니다.

 

 

tbUserService 등록방법

src\main\java\egovframework\ubiz\web\AbstractController.java에서 등록한다.

 

@Resource(name = "tbUserService")

protected TbUserService tbUserService

이것은 tbUserService는 사용할 수 있는 함수로 src\main\java\egovframework\ubiz\service\TbUserService.java에서 가져온

public interface TbUserService {

String insertTbUser(TbUserVO vo) throws Exception;

void updateTbUser(TbUserVO vo) throws Exception;

void deleteTbUser(TbUserVO vo) throws Exception;

void updateTbUserser2(TbUserVO vo) throws Exception;;

void updateTbUserfindpwd(TbUserVO vo) throws Exception;

void updateTbUsereditpwd(TbUserVO vo) throws Exception;

}

 

를 포함한다. ////////////////////////여기서 vo는 DB와의 통신을 위해 만들어둔 변수들이다.

src\main\java\egovframework\ubiz\service\TbUserVO.java에 만들어있다.

 

src\main\java\egovframework\ubiz\service\TbUserVO.java에 만들어있다.

private String userSno = ""

private String userEmail = ""

private String userPwd = ""

private String userName = ""

private String userNickname =""

private String userHp = ""

private String userName2 = ""

private String lastLoginDt = null

private String rgDt = "" //////////////

 

위 Service의 함수들은 src\main\java\egovframework\ubiz\service\impl\TbUserServiceImpl.java에서 만들어진 로직으로 DAO와 상호작용한다.

 

 

@Service("tbUserService")

public class TbUserServiceImpl extends EgovAbstractServiceImpl implements TbUserService {

@Resource(name = "tbUserDAO")

private TbUserDAO tbUserDAO

@Resource(name = "commSearchService")

protected CommSearchService commSearchService

@Override

public String insertTbUser(TbUserVO vo) throws Exception {

tbUserDAO.insertTbUser(vo);

return null

}

 

 

src\main\java\egovframework\ubiz\mapper\TbUserDAO.java에서

vo는 최종적으로 매핑되어 쿼리문에 들어가게 된다.

 

src\main\resources\mapper\xml\TB_USER_SQL.xml의 일부이다.

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="egovframework.ubiz.mapper.TbUserDAO">

 

 

 

 

 

 

참고자료 :

https://engkimbs.tistory.com/692?category=767795 [새로비]

https://coding-factory.tistory.com/69

https://cheese10yun.github.io/spring-oop-04/

https://addio3305.tistory.com/41

https://hunit.tistory.com/189

https://www.manty.co.kr/bbs/detail/develop?id=13&scroll=comment

 

댓글
최근에 올라온 글
최근에 달린 댓글
250x250