반응형

스프링 환경에서 jsp form 을 전송하는 경우 한글이 깨지는 경우가 발생한다. 


이러한 경우 web.xml 에 아래와 같이 추가해주면, form을 전송시 한글이 정상적으로 전송되는 것을 알 수 있다.



반응형
반응형

spring mybatis mysql 을 연결하여, DB에 한글을 insert 혹은 update 하면 한글 깨짐 현상이 발생하는 경우가 있다.


이러한 경우에는 mysql 을 연결하는 url에 다음과 같은 문장을 추가하면된다. 


useUnicode=true&characterEncoding=utf8



ex)


jdbc:mysql://127.0.0.1:3306/DB명?useUnicode=true&characterEncoding=utf8

반응형
반응형

스프링 servlet-context.xml 파일에 interceptor를 설정하는 도중 다음과 같은 에러가 발생. 


The prefix "mvc" for element "mvc:interceptors" is not bound.


다른 원인이 있을수도 있으나, 상단 beans 설정에 아래의 소스가 업어도 발생, 아래의 소스 추가 후 정상 작동


xmlns:mvc="http://www.springframework.org/schema/mvc"

반응형
반응형

스프링 시큐리티를 사용하여 비밀번호를 암호화 하는 방법을 알아보겠습니다. 


스프링 시큐리티를 찾아본 결과 설정하는 방법도 여러가지 있습니다.


여기서는 단순하게 bcrypt 방식으로 비밀번호만을 암호화 하는 방법입니다. 


전체적인 설정을 하시려면 다른 글을 참조하시는게 좋습니다.


1. 메이븐 pom.xml 에 스프링 시큐리티를 아래와 같이 추가합니다.

스프링 버전은 4.3.0.RELEASE 를 사용해주며, 스프링과 같은 스프링시큐리티 4.x 버전을 선택했습니다.

(스프링과 버전이 다르면 에러가 난다고 알고있습니다.)




2. spring-security.xml 파일을 생성합니다.

경로는 WEB-INF/spring/spring-security.xml 이며, 아래와 같은 소스로 작성을합니다.

여기서는 단순히 비밀번호만을 암호화 하기 때문에 아래와 같이 간단합니다. 




3. web.xml 에 spring-security.xml 을 추가합니다.

root-context.xml 아래에 추가했습니다. 



4.1 스프링 시큐리티 암호화 

암호화를 하려는 controller 혹은 service에서 


소스에 아래와같은 @Autowired를 추가하고, 



아래와 같은 방식으로 비밀번호를 암호화 하여, DB에 저장하면 됩니다.

여러번 실행해보면 알겠지만, 실행할때마다 암호화된 값이 다르게 나옵니다. 




4.2 스프링 시큐리티 암호화 비교

위에서 비밀번호를 암호화해서 DB에 저장을 했다면, 로그인을 할때 비교를 해야한다.

새로 암호화를 해서 DB에 저장된 값과 비교를 하면 동일한 비밀번호를 입력했지만, 암호화된 값이 다르기 때문에 비교가 불가하다.

그렇기 때문에 matches라는 메서드를 사용하여, 입력된 비밀번호와 DB에 저장된 값을 비교 할 수있다.



여기서는 암호화된 비밀번호를 DB에 저장하고, 불러오는 부분은 생략했습니다. 

일반적으로 select문을 통해 id와 pw가 일치하는 계정의 정보를 받아오는 방식하고는 다르지만,

간단하게 spring security를 사용하기 위한 방법이었습니다.



반응형
반응형

자바에서 자바스크립트 alert을 실행하는 방법


아래와 같은 스프링 예제 소스가 있습니다.


예제는 id와 pw를 받아서 해당 계정이 존재하는지 확인하는 소스이며, 

계정정보가 존재하지 않는경우 자바스크립트를 통해 alert을 보여주며, 뒤로가리를 실행합니다.



위의 소스중에서 아래의 부분이 자바에서 자바스크립트 alert을 실행하는 부분입니다. 


반응형
반응형

3. Controller , Dao , mapper 작성


우선 첫번째로 아래와 같이 프로젝트 구조에서 


controller, dao, domain 패키지를 추가합니다. 

(domain 패키지는 vo이며, 여기서는 사용하지 않으니 설명은 생략합니다.)



이제 실제 소스를 작성하는 부분이며, 간단하게 유저 아이디 숫자를 카운팅하는 예제입니다. 

(controller - dao - mapper 의 구조로 구성되어있으며, 소스는 간단하기에 설명은 생략하겠습니다.)


UserController.java

-쿼리문의 결과를 json으로 return



UserMapper.java

-쿼리문을 실행하는 xml 파일과 연결하는 java



userMapper.xml

-실제 쿼리문을 작성하는 xml




마지막으로 프로젝트를 실행하고, 

테스트를 해본 결과 아래와 같이 json 결과로 나오는 것을 확인 할 수 있습니다. 

(크롬 앱 postman을 사용하여 테스트 하였으며, 사용 방법은 생략합니다.)




https://github.com/nahosung/springboot_setting

 

반응형
반응형

2. DB 연결을 위한 설정


maven에 DB 접속에 관련된 dependency를 추가하도록 합니다. 


pom.xml 파일에 아래와 같은 dependency를 추가합니다.

(각각에 대한 설명은 생략 하며, https://mvnrepository.com/ 에서 검색하여 다른 버전을 사용하면됩니다.)



다음으로 application.properties 파일에 DB 접속 정보에 대해 입력 합니다. 

( 최초 application.properties 는 아무런 내용도 없으며, DB뿐만아니라 각종 설정에 대한 값을 작성한다. ex)server.port(톰캣포트) )



그 다음으로  mybatis 쿼리를 작성하기 위한 파일을 만들도록 합니다. 


src/main/resources 경로 아래에 mappers 폴더와 mybatis-config.xml 파일을 만들도록 합니다. 




mappers 폴더 안에는 실제 mybatis로 쿼리문을 작성하는 xml 파일이 존재합니다.

우선 여기서는 해당 폴더만 만들어 놓고 , Controller 만들때 실제 xml 파일을 생성 하도록 합니다. 


mybatis-config.xml 파일의 내용은 아래와 같으며, mybatis에 대한 설정이 필요할때 해당 파일에 작성을 하면됩니다.

지금은 넣을 내용이 없으니 아래와 같이 만들어 놓습니다.



그 다음으로 프로젝트명Appplication.java 파일을 열어 설정을 합니다.

(여기서는 SpringbootSettingApplication.java 파일이며, 스프링부트 프로젝트 생성시 프로젝트명Application 이름으로 자동 생성됩니다.)


application.java 파일은 main메서드만 들어있는 클래스 파일이며, 

아래와 같이 MapperScan 어노테이션과 SqlSessionFactory을 추가합니다. 


(위에서 작성한 mappers 폴더 안의 xml 파일과 , mybatis-config.xml 에 대한 부분이 들어있습니다.)


기본적인 DB 접속에 대한 설정은 끝났으며,

다음은 실제로 rest api 호출을 통해 json 으로 반환되는 부분을 작성하겠습니다.

(Controller , Dao , mapper ...)



https://github.com/nahosung/springboot_setting

반응형
반응형

이클립스 spring boot 를 사용하여 rest api 서비스를 구축하는 간단한 프로젝트입니다.


윈도우 운영체제를 사용하였으며, 이클립스 mars 사용했습니다.


Maven 과 Mysql 을 사용하였으며, 설치에 대한 설명은 없습니다. 


1. springboot 프로젝트 생성


우선 STS를 설치하도록합니다. 

상단 메뉴 - Help - Eclipse MarketPlace - sts 를 검색 - Spring Tool Suite (STS) for Eclipse ..을 다운 받습니다. 




설치를 완료 하였으며, 프로젝트를 생성합니다.

상단메뉴 - File - new - Project... 을 클릭하고 스프링 폴더에서

Spring Starter Project 를 선택하고 next



아래와 같은 화면이 등장하며 , Name, Group, Package를 입력합니다.

여기서 Maven 또는 Gradle 을 선택할수 있으며, War와 Jar로 선택이 가능합니다.

저는 Maven으로 프로젝트를 진행하겠습니다.



다음으로 아래와 같은 화면이 등장합니다.

spring boot 버전은 선택되어있는 그대로 사용을 하겠습니다.

그리고 여기서는 Web만을 체크하고 Next 혹은 Finish를 클릭합니다.

(여러가지 설치를 할 수있으며, sql을 클릭하여 보면 mysql, mybatis 등 있는 것이 확인가능합니다.

 여기서는 Web만을 선택하며, 다른 부분은 maven을 통해 설치 할 것입니다.)



Next를 클릭하면 아래와 같이 나오며, Finish를 클릭하면 아래 화면 없이 프로젝트가 생성됩니다.



아래와 같은 프로젝트 구조를 가지고 있으며, 

프로젝트이름Application.java 와 ServletInitializer.java 파일이 자동으로 생성된다.

다음 과정에서 수정이 필요한 파일들로 우선은 넘어가도록 한다.




spring boot 는 톰캣을 포함하고 있기 때문에, 별도의 톰캣 설치와 설정(이클립스 서버 설정)이 필요하지 않습니다.


프로젝트 선택 후 마우스 오른쪽 버튼을 클릭 - Run As - Spring Boot App 을 클릭하여 서버를 구동합니다.


기본 포트는 8080을 사용하며, 콘솔창에 아래와 같은 화면이 나오며, 실행되는 것을 확인 할 수 있습니다.

(application.properties 파일에서 ' server.port = 포트번호 ' 를 입력하여 포트 번호 변경 가능)




브라우저를 통해 접속하여 보면 아래와 같은 화면이 나오며, 


아직 Controller와 View 에 아무런 작업을 하지 않았기에 아래와 같은 화면이 나오는 것입니다. 

(REST API 프로젝트이므로 화면쪽은 별로 상관 없기는 합니다...)



첫번째 스프링 부트 프로젝트 생성을 했으며, 


다음으로 spring boot 로 mybatis , mysql 설정을 하도록 하겠습니다.


https://github.com/nahosung/springboot_setting

반응형
반응형

3. controller / service / dao / mapper 생성


이제 마지막으로 실제 자바 소스 코드를 작성하는 부분입니다.


1. controller 파일 생성.

기본적으로 스프링 프로젝트를 생성하면 자신이 생성한 패키지명 아래에(ex com.spring.test) controller라는 폴더가 존재합니다.

또한 기본적으로 HomeController.java 파일이 존재합니다. 실행을 해보면, home.jsp파일을 화면에 띄우는 것을 확인할수있습니다.

(HomeController.java에 대한 설명 생략)

(was(톰캣...) 연동하는 부분 생략)


mybatis를 통해 쿼리문을 실행하는 것이 목표이므로, controller패키지 안에 MemberController.java파일을 생성하도록 합니다. 

MemberController.java


위와 같은 소스의 controller 파일을 만들었습니다. 

간단히 설명을 하면, 

/test/usercheck 로 호출이 가능하며, 

memberservice.userIdCheck("admin"); 를 통해 admin이란 아이디가 존재하는지 쿼리를 실행합니다.

main폴더 아래 index.jsp 파일을 호출하는 소스입니다.(jsp 호출에 관련돼서는 뒤에 설명)


2. service / serviceimpl 파일 생성

우선 기본 패키지 아래에 service라는 패키지를 생성합니다.(controller의 하위가 아닌 같은 위치)

그리고 service / serviceimpl 파일을 생성합니다.

여기서는 MemberService.java 파일과 MemberServiceImpl.java 파일을 생성합니다.

(serviceimpl파일 같은 경우 service 패키지 아래에 serviceImpl이라는 패키지를 생성하여 위치하는 경우가 많다.

어디까지나 파일의 위치가 다를뿐 만드는 사람의 자유가 아닌가 싶다.)


MemberService.java


MemberServiceImpl.java


MemberService는 인터페이스이며, 

MemberServiceImpl에서 상속받고있습니다.

MemberServiceImpl 파일에서  dao파일을 호출하고 있습니다.

(자세한 내용을 설명하려면 너무 길어지기에 간단히 설명하겠습니다.)


3.dao / daoimpl 파일 생성

위에서 service패키지를 생성하는 것과 같이 dao 패키지를 생성하고, dao / daoimpl 파일을 생성합니다.

여기서는 MemberDao.java / MemberDaoImpl.java 파일을 생성합니다.


MemberDao.java


MemberDaoImpl.java


MemberDao는 인터페이스이며, MemberDaoImpl에서 상속받고 있습니다.

MemberDaoImpl 파일에서 mapper파일(xml파일)을 호출하고 있습니다.

(dao 패키지에서는 인터페이스는 만들지 않는 경우가 더 많은 것 같습니다.

여기서는 인터페이스를 만들어서 사용하지만, 복잡하다고 생각되면, 생략하는 것이 좋을듯합니다.)


4.mapper 파일 생성

이제 실제 mybatis를 사용하여 DB에 쿼리문을 작성하여 실행하는 부분 입니다.

resources 폴더 아래에 mapper라는 폴더를 생성하고 그안에 mapper파일을 생성합니다.

여기서는 memberMapper.xml 파일을 생성합니다.


memberMapper.xml


(admin이란 테이블의 admin_id 컬럼의 값을 카운팅하는 예제로 테이블에 대한 설명은 생략합니다.)

namespace와 쿼리문의 id의 조합으로 호출이 되며, 쿼리문을 실행하고 결과를 반환합니다.

이전 글의 root-context.xml 파일에서 sqlSession의 mapperLocations의 경로를 지정했기때문에 호출이 가능합니다.

위의 MemberDaoImpl.javad에서 mapper파일의 쿼리를 'mappers.memberMapper.usercheck' 로 호출하는 것을 확인 할 수 있습니다.



결론적으로 Controller -> Service -> Dao -> Mapper 의 순서로 진행되며, 

Controller에서 받은 결과를 jsp 로 전달하는 구조입니다.

순서대로 가장 기본적인 프로젝트 셋팅이었으습니다. 

dao에서 쿼리문의 목적에 따라 selectOne이 아닌 selectList등.. 사용가능하며,

mapper파일에서 결과 또는 입력을 하기 위해 VO(domain)를 사용 하는 등 다양한 방법으로 사용가능합니다.

(사실 vo는 필수적이며, 추후 내용을 추가 하도록 하겠습니다.)


(*controller파일에서 return 값을 통해 해당 jsp를 찾는 것은 src/main/wepapp/WEB-INF/spring/appServlet/servlet-context.xml 파일에서 설정을 해줬기때문입니다.

아래 소스 부분의 수정을 통해 다른 경로를 기본 위치로 변경 할 수 있습니다.)



( https://github.com/nahosung/spring_setting )

반응형
반응형

mybatis 사용중 아래와 같은 오류 발생


The content of elements must consist of well-formed character data or markup.


위의 오류의 원인은 < 등호 때문이다.


간단하게 <![CDATA[ 해당쿼리 ]]>

쿼리 겉에 넣어주면된다.

반응형

'SPRING > mybatis' 카테고리의 다른 글

spring mybatis Incorrect syntax near '@P0'.  (0) 2017.01.31
spring mybatis mysql 한글 깨짐 설정  (0) 2017.01.06
mybatis like 사용법  (0) 2016.10.21
mybatis mysql 한글 깨짐 현상  (0) 2016.10.18

+ Recent posts