Posts spring_project-1. 환경설정,
Post
Cancel

spring_project-1. 환경설정,

Spring 프로젝트 환경세팅

포트번호와 도메인주소를 직접 수정해줘야할경우 포스팅을 참고한다 https://yunrap.github.io/posts/was/

  1. 자바 환경변수 설정해주기
1
2
3
그전에 자바 설정되어있어야한다
자바는 1.8버젼으로 설치해줬다
또한 환경변수도 설정해줘야한다
  1. maven 다운로드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
url https://maven.apache.org/download.cgi

c 밑에 프로젝트 폴더안에 넣어주었다.
apache-maven-3.8.1-bin.zip

C:\project\maven-3.8.1\conf 의 settings 로 들어간다

<localRepository>/path/to/local/repo</localRepository>
55라인에 추가해준다

그후 repository 폴더를 만들어야한다
C:\project\maven-3.8.1\repository 폴더를 만든후

경로를 수정해준다 
<localRepository>C:\project\maven-3.8.1\repository</localRepository>



환경변수 설정

path부분에 설정해준다
C:\project\maven-3.8.1\bin 


1
2
3
4
5
6
C:\Users\yunrap>mvn -version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: C:\project\maven-3.8.1\bin\..
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_291\jre
Default locale: ko_KR, platform encoding: MS949
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
1
2
1. preferences 설정 
UserSettings

C:\project\maven-3.8.2\conf\settings.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2. eclipse market 
sts설치 올선택해서 설치한다
spring tools 3 

또한 tomcat plugin을 설치해준다
원숭이모양


3. file new  spring legacy project 만든다
spring mvc project

hiboard로 만들어준다음
com.icia.web


utf-8 설정도 해준다
4. java buil path path

test 부분 삭제해준다.

그다음 /hiboard/src/main/java
/hiboard/src/main/resouces 부분
output foler 를 hiboard/src/main/webapp/WEB-INF/classes로 설정해준다


그다음
included: **/*.java  remove 삭제해준다


그다음
librarie의 jdk 1.8을 설정해준다


그다음
add libarary로 톰캣을 추가해준다


그다음
WEB-INF lib 폴더 추가해준다


그다음
src/main/resources
log4.j 삭제


그다음
src main test 폴더 삭제


프로젝트 밑에 log폴더를 만든다

archived 파일도 만든다.


그다음
pom.xml을 소스를 받아서 덮어준다.


그후 선생님이줄폴더를 받고

main부분에 java resources webapp 세폴더를 넣어준후
pom.xml에서 다시 maven build를 눌러줘서 추가해준다


그후 host파일을 연다
hiboard.icia.co.kr 를 추가해준후


C:\project\maven-3.8.1\conf\settings.xml

간단한 용어

JSTL

JSTL은 라이브러리이기 때문에 사용전 header에 추가해야 함

1
views의 taglib.jsp 파일에 선언해줬다

MyBatis

sql을 별도의 파일로 분리해서 관리하게 해준다

수동적인 파라미터 설정과 쿼리매핑 구문을 제거할수있음 SQL 문과 프로그래밍 코드의 분리

Maven 란

자바 프로젝트의 빌드를 자동화 해주는 빌드 툴 maven은 update하지말고 install해야한다

dispatcher servlet

dispatcher servlet은 어노테이션을 통해서 그 값들을 매핑해준다 즉 제일 앞에서 서버로 들어오는 모든 요청을 정의하는 곳이다

전에 jsp 기본 프로젝트에서의 web xml 모든 설정을 해줘야되는거에비해서 훨씬더 편해진다

모든 url을 타고들어갈때 dispatcher servlet을 통해서 요청을 받고 요청을 준다라고 생각하면된다

spring annotation

1
2
3
4
@component : 어노테이션이 있으면 스프링 빈으로 자동등록된다.
@component를 포함하는 다음 어노테이션도 자동등록된다
1. @autowired  2. @service 3.@repository

ResponseBody

1
2
3
4
@ResponseBody : HTTP body 부분만 전달 

예시  내프로젝트에선 ajaxResponse변수로 jsp파일에 리턴하였다

Autowired

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Autowired : 의존성을 "타입"을 통해 찾아 주입해주는 역할을 해준다

이해가 잘안간다면 쉽게말하면 연결고리이다


@Controller("userController")
public class UserController {
   private static Logger logger = LoggerFactory.getLogger(IndexController.class);
   
   //쿠키명
   @Value("#{env['auth.cookie.name']}")
   private String AUTH_COOKIE_NAME;
   
   @Autowired
   private UserService userService;
   

usercontroller에서 autowired로 선언해주면 controller를 호출할때 스프링 빈에 등록되있는 userService 있는 객체를 가져다가 넣어준다

이게 바로 dependency injection이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1. User 컨트롤러에서 선언
@Autowired
   private UserService userService;
   
  
   
    User user = userService.userSelect(userId);
  
   
   이렇게 userService라고 타입을주입해주면
   
2. service로 간다
 @Service("userService") 라고설정하면 스프링에서 service 라는것을 인식한다.
 
 그후
 user = userDao.userSelect(userId);
 userSelect 메소드를 따라간다
 
 가 선언되어있는데 이때 상단에
   @Autowired
	private UserDao userDao;
 이렇게 설정하면 userDao를 가져다가 주입을해줄수있다
 
 
 

MVC 처리순서

  1. 클라이언트가 서버에 요청을 하면 controller인 dispatcherservlet 클래스가 요청을 받는다
  2. dispatcherservlet은 프로젝트 파일내의 servlet context xml 파일의 controller인자를 통해 등록한 요청 컨트롤러를 찾아 매핑된 컨트롤러가 존재하면 requestMapping을 통해 요청을 처리할 메소드로 이동한다
  3. 컨트롤러는 해당 요청을 처리할 service를 받아 비즈니스로직을 서비스에게 위임한다
  4. 서비스는 요청에 필요한 작업을 수행한다 즉 메소드를 구현을해준다 5.dao 는 상수와 추상메소드만존재 하며 정의되있는 메소드가 xml id값으로 동일하게한다 그후 xml문으로간다
  5. xml 는 sql문을 처리하는 문구가 있다

spring bean

1
2
* 0개이상의 문자와 매칭
** 0개 이상의 디렉토리와 파일 매칭

인터셉터

인터셉터가 dispatcherservlet 전에 시작되므로 예시는 하나의 인터셉터로 프로젝트 내의 모든 요청에 로그인 여부를 확인할수있다

pregandle 컨트롤러가 호출되기 전에 실행되는 메서드 posthandle 컨트롤러가 호출되고 난후에 실행되는 메서드

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  1. user login

로그인 버트을 눌렀을때 /user/login으로 호출될 컨트롤러를 작성해준다

UserController 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.icia.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.icia.web.model.Response;

@Controller("userController")
public class UserController {
	private static Logger logger = LoggerFactory.getLogger(UserController.class);
	
	//쿠키명
	@Value("{env['auth.cookie.name']}")
	private String AUTH_COOKIE_NAME;
	
	@Autowired
	private UserService userService;
	
	@RequestMapping(value="/user/login", method=RequestMethod.POST)
	@ResponseBody
	public Response<Object> login(HttpServletRequest request, HttpServletResponse response)
	{
		
	}
	
}

빨간줄 뜰시 임포트해주기 login메소드만 빨간줄뜸

UserDao.xml 구현

window -> preference-> xml -> xml file-> template 부분에 add를 눌러서 선생님이 보내주신 문구 추가

xml 파일 형식추가

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

그후 com.icia.web.mapper 에 추가해준다. UserDao.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”> 떠있는것을 확인한다

그후

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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="com.icia.web.dao.UserDao">

<resultMap type="com.icia.web.model.User" id="userResultMap">
	<id column="USER_ID" property="userId"/>
	<result column="USER_PWD" property="userPwd"/>
	<result column="USER_NAME" property="userName"/>
	<result column="USER_EMAIL" property="userEmail"/>
	<result column="STATUS" property="status"/>
	<result column="REG_DATE" property="regDate"/>
</resultMap>

<select id="userSelect" parameterType="string" resultMap="userResultMap">

SELECT
    USER_ID,
    NVL(USER_PWD, '') AS USER_PWD,
    NVL(USER_NAME, '') AS USER_NAME,
    NVL(USER_EMAIL, '') AS USER_EMAIL,
    NVL(STATUS, 'N') AS STATUS,
    NVL(TO_CHAR(REG_DATE, 'YYYY.MM.DD HH24:MI:SS'), '') AS REG_DATE
FROM
    TBL_USER
WHERE
    USER_ID = #{value}
    
</select>
</mapper>

이렇게 작성해준다

UserController login메소드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.icia.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.icia.common.util.StringUtil;
import com.icia.web.model.Response;
import com.icia.web.model.User;
import com.icia.web.service.UserService;
import com.icia.web.util.CookieUtil;
import com.icia.web.util.HttpUtil;
import com.icia.web.util.JsonUtil;

@Controller("userController")
public class UserController {
	private static Logger logger = LoggerFactory.getLogger(UserController.class);
	
	//쿠키명
	@Value("#{env['auth.cookie.name']}")
	private String AUTH_COOKIE_NAME;
	
	@Autowired
	private UserService userService;
	
	@RequestMapping(value="/user/login", method=RequestMethod.POST)
	@ResponseBody
	public Response<Object> login(HttpServletRequest request, HttpServletResponse response)
	{
		String userId = HttpUtil.get(request, "userId");
		String userPwd = HttpUtil.get(request, "userPwd");
		Response<Object> ajaxResponse = new Response<Object>(); //응답으로 보낼것을 객체로 념겨준다
		
		if(!StringUtil.isEmpty(userId) && !StringUtil.isEmpty(userPwd))
		{
			User user = userService.userSelect(userId);
			
			if(user != null)
			{
				if(StringUtil.equals(user.getUserPwd(), userPwd))
				{
					CookieUtil.addCookie(response, "/", -1, AUTH_COOKIE_NAME,
							CookieUtil.stringToHex(userId));
					
					ajaxResponse.setResponse(0, "success");
				}
				else
				{
					ajaxResponse.setResponse(-1, "Passwords do not match");
				}
			}
			else 
			{
				ajaxResponse.setResponse(404, "Not Found");
			}
		}
		else
		{
			ajaxResponse.setResponse(400, "Bad Request");
		}
		logger.debug("[UserController] /user/login response\n" + JsonUtil.toJsonPretty(ajaxResponse));
		return ajaxResponse;
 	}
	
}

이걸로 로그인 최종 컨트롤러 구현이끝났다

spring 구현 순서

This post is licensed under CC BY 4.0 by the author.