help->eclipse marketplace에서 sts
검색
spring tools 4
랑 spring tools 3
install
Open Perspective -> Spring 선택
기존 java 환경에서 스프링을 사용하기 좋은 환경을 구성했다
maven은 라이브러리 설치를 도와준다. maven 설치 사이트
Files -> Binary zip archive의 link apache-maven-3.8.3-bin.zip
설치
압축해제 후 폴더apache-maven-3.8.3
를 C드라이브에 폴더만들어서 저장
나는 Study로 했다.
경로 : C:\Study\apache-maven-3.8.3
내 PC -> 속성 -> 고급 시스템 설정 -> 환경변수에서 path 클릭->
새로만들기 눌러서 C:\Study\apache-maven-3.8.3\bin
추가
jdbc 라이브러리인 ojdbc6.jar
추가하기
mvn install:install-file -Dfile=[본인의ojdbc6.jar설치경로] -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar
BUILD SUCCESS
가 뜨면 성공!new -> Spring Legacy Project
로 프로젝트 만들기
Spring MVC Project 선택하고 Next
프로젝트 경로 설정 후 만들면 MVC가 설치진행됨
생성된 프로젝트에서 마우스 우클릭->properties
접속
Dynamic Web Module=3.1
, java=1.8
로 version 설정 후 apply이렇게 서버를 연결해놓으면 개발자가 선택하지 않아도 spring이 알아서 연결해줌.
Spring Regacy Project에 MVC Project 만들기
- Templates에 MVC가 없다면
configure templates
클릭
spring-defalut
빼고 다 remove하기
Apply and Close
누르면 MVC project가 생겨있음
프로젝트를 처음 만들고 보면 예시파일이 자동으로 만들어져있음. HomeController.java나 home.jsp
파일들은 자동으로 MVC 형태를 갖추고 있다
http://localhost:8080/ex01/
초반에 지정한 프로젝트 경로로 접속하면 views폴더에 생성된 home.jsp
가 실행됨
src/test/..
: main경로와 별개로 test를 위한 패키지가 자동으로 만들어져 있음
Maven Dependencies
: 많이 쓰이는 라이브러리를 자동으로 넣어놨음. 필요한게 있으면 추가도 가능하다
WEB-INF 속 views
폴더가 프론트사이드 위치.
프론트사이드에 직접접근을 막아놓음
뿐만 아니라 controller도 경로 직접접근이 막혀있다.
pom.xml
: 프로젝트, 라이브러리 버전 등을 총괄해서 관리함.
servlet-context.xml
에 있는
<context:component-scan base-package="edu.spring.ex01" />
controller, 서비스 등등 전부 컴포넌트의 하위개념.
스프링은 객체를 자동으로 생성해서 사용하는데 스프링이 컴포넌트를 스캔하면서 관리할 때 객체도 자동으로 생성하는 것.
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.8.RELEASE</org.springframework-version>
<org.aspectj-version>1.8.10</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<!-- Logging -->
부분 log4j 버전 변경<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<!-- Servlet -->
부분<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- Test -->
부분<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
maven-eclipse-plugin
부분. version 2.10으로 변경<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.10</version>
...
</plugin>
maven-compiler-plugin
version 변경<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
exec-maven-plugin
부분. <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
라이브러리를 모아놓는 저장소인 maven repository에서 사용할 버전의 라이브러리의 태그를 붙여넣으면됨.
라이브러리는 최신버전이라고 무조건 좋은건 아님. 안전성문제가 발생하거나 프로그램에 따라 적용이 안될수도 있음. 사람들이 가장 많이 사용하는 버전을 선택하는게 안전함
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.11.3</version>
</dependency>
<!-- Test -->
의 junit 바로 밑에 이어서 붙이면 된다.
<web-app>
설정 덮어쓰기<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
servlet-context.xml
파일에서 component-scanning의 대상으로 만들어주는 어노테이션이다.@Component
어노테이션을 써도 같음.@Controller
어노테이션을 설정하면 controller역할(통신 및 데이터이동 기존의 servlet역할)을 수행할 수 있도록 바뀜. extends HttpServlet
가 생략됨.import org.slf4j.Logger
private static final Logger LOGGER = LoggerFactory.getLogger(SampleController1.class);
LOGGER.info("sample1() 호출");
INFO : edu.spring.ex01.SampleController1 - sample1() 호출
라고 뜬다GET - 페이지를 불러오는 역할
POST - 데이터를 저장하는 것
PUT - 데이터 업데이트
DELETE - 데이터 삭제
@RequestMapping(value="/sample1", method=RequestMethod.GET)
public String sample1() {
LOGGER.info("sample1() 호출");
return "sample1"; //부르려는 jsp의 경로 및 이름
}
기존에 자바에서 requestURL.contains()을 사용해 매핑했던 것을 @RequestMapping을 사용해 매핑하는 것.
servlet-context.xml
에서 접두사와 접미사로 경로를 지정해놓고 생략할 수 있게 만들어놓음.
설정된 WEB-INF/views/sample1.jsp
로 찾아감
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
컨트롤러 메소드 return 값의 의미
- ViewResolver에게 실체 view를 결정하도록 요청함
- return 타입이 void인 경우 URL매핑(value값)을 통해서 스스로 view를 찾는다.
@RequestMapping(value="/sample2") public void sample2() { LOGGER.info("sample2() 호출"); }
- return값이 있을 땐 return 값을 view 파일명과 다르게 입력한 경우 오류발생
최대한 value(URL)와 메소드 이름, jsp 파일명까지 똑같이 만드는게 좋다.
@GetMapping("/test1")
public String test1(Model model, String username, int age) {
LOGGER.info("test2() 호출");
LOGGER.info("username = "+username);
LOGGER.info("age = "+age);
model.addAttribute("username", username);
return "param-test";
}
Model
import org.springframework.ui.Model
view에 데이터를 전송하기위한 객체
key-value 방식.
username == request.getParameter("username");
매개변수가 곧 데이터를 받아오는 변수가 된다.
int age
parameter는 String으로 넘어오는데 스프링은 매개변수가 int이면 int형으로 자동 파싱된다. 단, 만약 int변수에 문자열값을 받게 되면 에러가 발생하기 때문에 예외처리 필요함.
매개변수 자리에서 사용하는 어노테이션. 요청받은 데이터를 바로 views에 전송함. 코드함축
데이터를 그대로 보낼때만 사용한다 가공불가능
@GetMapping("/test3")
public String test3(@ModelAttribute(name="username") String username, @ModelAttribute(name="age") int age) {
return "param-test";
}
(name="username") == model.addAttribute("username", username);
이 동일하다.A클라이언트에서 받은 username을 서버가 B클라이언트로 전송함
....dh 어렵다 ༎ຶ‿༎ຶ