본문 바로가기
CLASS/SPRING,JSTL

#1-1 / [Spring maven project] start, setting - 70% 세팅완...

by hingu 2024. 7. 8.

어떻게 생성하냐에 따라 다 세팅, 사용서버, 사용법이 다~~ 다름...

딱 정해진게 없음...

 

spring의 기본은 jsp파일 - html시 로드가 불가능

spring 은 JSTL과 많이씀

모든 라이브러리는 API로 사용

Eclipse 에서 setting시 old버전 -> 2021-09 버전 : spring 마지막 버전, 그 이후부터 spring boot

 

spring,spring boot 모두 bean이 기본임

sts4는 기본이 boot


 

✅ Spring maven project 기본 setting법 정리 (하단에 내가 메모한게 있긴함..)

  1. Widnow -> Preferences
    encoding 검색 -> 모두 UTF-8로 변경
    Install/update 체크박스 해제(autometically~)
    Run/Debug 의 console 1000000 정도로 변경
  2. Project 생성 : Maven project 생성
    -> create a simple project~ 체크, use default ~ 체크
    -> Group Id, Artifact Id 동일한 이름으로 생성, Packaging  : war 로 변경
  3. 프로젝트 우클릭 properties
    -> java build path : JRE11, server를 라이브러리에 추가 (server가 미리 생성되어있어야 함 apache 8.5.61)
       * 주의 : HttpRequest 사용시 빨간색 밑줄 있을 경우 다운받은 서버 삭제 후 새로 다운로드하여 라이브러리에 추가
    -> java Compiler : 11버전으로 변경
    -> project Facets : JAVA11 , dynamic web Module 3.1 로 변경 , runtime apache로 체크
    -> Web project Setting : context root / 로 변경
  4. pom.xml에서 해당 라이브러리를 모두 추가 
  5. web.xml을 생성(java EE tools -> Generate~) 및 해당 web.xml 수정 : Dispatcher 및 언어셋
  6. /WEB-INF에 /webpage.xml을 생성 (단, spring bean configuration file - 파일명.xml로 생성 )
    * 주의 : bean,context,mvc 체크 후 최신버전(최상단 체크) 형태로 생성 => 나중엔 더 추가됨....
  7. server restart 후 controller를 생성 ( : 일반 class file - servlet 아님 !!) 
  8. 7의 파일에 @controller, @RequestMappind("/생성할.do") 이용하여 웹페이지가 출력되는지 확인
  9. lombok 사이트에서 해당 라이브러리 설치 및 pop.xml에 추가
  10. STS3를 종료 후 재실행 후 class 생성하여 @setter, @getter를 이용, 메소드가 자동생성 되는지 확인
    => window - show view - outline 에서 확인 가능!

 

[Spring]

- Maven Project => xml 기반의 Spring을 사용하는 프로젝트 (Tomcat 8.5) - 단독서버

Tomcat - Linux기반 

 pom.xml , web.xml , config.xml , mapping.xml

 => 이중 하나라도 , 한글자라도 오타가 있을 시 완져니 망가져버림~

 

 

- Spring legacy Project => properties기반의  Spring을 사용하는 프로젝트(VMware)

VMware - Linux(Ubuntu) 기반 , Docker(클라우드)와 연결  ==> cloude server

 

[Spring-Boot] - 얜 무조건 cloude server라고 보면됨

- Spring starter Project => Spring(v3.0 이하 - JDK16 이하),Spring-Boot(v3.0 이상 - JDK17 이상)

VMware - Linux(Ubuntu) 기반

 


 Maven Project 

 

  1. encoding setting - TEXT 안에도 다 체크하고 utf-8로 세팅..할것..!
  2. maven project 생성
    simple project ck - 이거 체크시  catalogs 모두 선택하는거임 - 무거워지지만 일단  이걸로 ㄱ
    packaging : war 
    group id, artifact id : 동일하게 원하는걸로  => finish
  3. pom.xml 절대 삭제 x  (모든 spring에 있는 파일 - 해당파일 삭제시 모든 프로세스 망가짐)
    프로젝트 우클릭 - properties - java compiler - java build path 파란 텍스트 클릭 
    - addlibray : jre system library , server runtime arpache tomcat v8.5로 추가
     java compiler  - v 11 로 변경
    project facets  java 11 , dynamic web module - 3.1 로 변경 , runtime 서버 확인
    web project settings  / 
  4. pom.xml 열어서 수정 :
    maven repository 접속 
    maven-war-plugin =>  1. Apache Maven WAR Plugin 3.3.2  maven 에서 복사해서
    <build> <plugins><plugin> 안에 넣기 => 빨간에러 사라짐
    => 배포 파일에 맞춰서 해당 압축파일을 생성하는 라이브러리
  5. 프로젝트 우클릭 - java EE tools - generate~ 어쩌구 - web.xml 생성
  6. maven repository 접속  - 1. Tomcat Catalina 의 현재 apache버전과 동일한 버전 찾아서 (8.5.61)
    dependency 코드 복사해서  <dependencies> 안에 넣기
    => Spring + tomcat 쓰겟다
    => <dependencies> : spring에 사용되는ㄴ 모든 라이브러리를 관리하는 태그
  7. 프로젝트 우클릭 - mavern -update  project - force ~ 체크 후 ok => j2SE-1.5로 바뀜
      <properties>
       <maven.compiler.source>11</maven.compiler.source>
       <maven.compiler.target>11</maven.compiler.target>
      </properties> => 사용할 JAVA 언어 버전 default를 설정하여 적용
    작성 후 update project 똑같이 또하면 우리가 사용할 JAVASE-11로 제대로 잘 바뀜
  8. maven repository 접속  - 1. Spring Web MVC - 5.3.37 - dependency 복사 - 6아래 추가
    spring-MVC 
    v6.1 => java 16번대 써야함
    v6.0 => java 14,15번대 써야함
    v5.3 => java 11,12,13번대 써야함

  9. 8번과 동일한 방법으로 MySQL Connector Java 8.0.33 추가 : Mysql 연결 라이브러리
  10. 8번과 동일한 방법으로 1. Spring JDBC - 5.3.37 (8번과 동일한 버전) 추가
    => Spring + mysql 연결 라이브러리
  11. maven repository 접속 - 2. JSTL 1.2 ->  얘 복붙 2임!! - 빨간줄 뜨면 에러임
    => JSTL(jsp update)
  12. maven repository 접속 - 2. JavaMail API (compat) 1.4.7 복붙 -> 얘도 2임
    => mail을 사용하는 라이브러리
  13. maven repository 접속 - 2. JavaBeans(TM) Activation Framework 1.1.1 복붙
    => JDK8 이상일 경우 mail 보안오류 발생으로 라이브러리 추가

    .. 라이브러리 또 추가 필요할시 추가하면 됨 지금은 8개 추가함..
    => 7번 방식으로 project 업데이트 다운받은 library 추가하면써 빨간줄 사라짐~
  14. web.xml 열어서 <web-app> 안에 수정
    org.springframework.web.servlet.DispatcherServlet 복사해서
      <servlet>
       <servlet-name>dispatcher</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value></param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
       <url-pattern>/</url-pattern>  -> 이걸 /* , *.jsp, *jspx... 이렇게두 할 수 있음(아래 차이 설명 ㅎ)
      </servlet-mapping>
    요렇게 작성.

    dispatcher의 
    url-pattern  / 로 세팅할 경우 : webapp에서 jsp,html..등 실행 가능
    url-pattern  /* 로 세팅할 경우 : webapp에서 jsp,html..등 실행 불가능 (무조건 do실행 후 실행 가능)
    - 우린 / 로 함  ^^.. , spring은 html 못씀 jsp가 기본 

    =>
    - dispatcher 부분 : web @(Contoller)를 사용하이 위한 xml로드 파일 구현
    : servlet일 경우 do를 생성하기 위해서 지속적으로 태그를 사용하는 형태였지만 spring으로 변환하면서 bean에서 관리하도록 변환됨 
    -  <load-on-startup>1</load-on-startup> : param-value에 사용되는 xml파일을 첫번째로 읽어서 사용
    - <servlet-mapping> : 보안 맵핑을 사용(view)  출력 형태

    => server add후 정상 작동시 잘된거임
  15. web-inf 폴더 우클릭 - new - bins con어쩌구 파일 생성 (webpage.xml)
    - beans 최신버전, context 최신버전, mvc 최신버전 체크 -> fisish
    => Spring은 기본으로 MVC 형태의 web프레임워크이므로 이런식으로 로드해아함
         beans : 의존성 여부를 체크하는 소스코드 
         context(java class), mvc(jsp로 출력하는 형태 ) 필수

  16. web.xml의 parm-value 부분에  /WEB-INF/webpage.xml 추가 후 서버 재가동 - 파일 아이콘에 S생김 ㅋ
  17. webapp 우클릭 - new - test.jsp 생성 후 테스트해보면 잘나옴ㅋ 
  18. java package 우클릭 - new class 생성 (public ~ 체크없이 mainpage.java)
    밖에 @controller
    안에 @RequestMapping("") ~ 하단 code 참고

    /project명/ 없애고 싶으면 프로젝트 우클릭 - properties - web project settings  - / 로 해주고
    webapp에 index 만들고 서버 중지 후 jsp파일에서 ctrl+f11 해서 서버 실행(index 파일 속성 x)

  19. webpage.xml  beans 태그 beans:beans로 변경 ~ 후 18 return null 변경 후 restart : 하단 코드 참고
  20. 언어셋 세팅 :
    14 아래에다
      <!-- 언어셋을 세팅하는 태그 -->
      <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>
       <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
       </init-param>
      </filter>
      <filter-mapping>
       <filter-name>encoding</filter-name>
       <url-pattern>/*</url-pattern> //여긴 /* 임
      </filter-mapping>
    요거 추가
  21. maven repository 접속 - 1. Project Lombok 1.18.34 복붙 : getter,setter
    https://projectlombok.org/download 여기서 추가 다운 후 이미지 참고 대로 하고 
    sts 재실행 
    lombok : setter,getter을 @을 이용하여 보다 쉽게 메소드를 생성하는 API
    pom.xaml에 추가하고 , lombok 사이트 접속해서 다운로드 받은 후 cmd를 이용하여 설치 후 sts ide 재실행

  22. maven repository 접속 - 2. Commons DBCP 1.4 복붙
    dbcp란? Database Connection Pool : spring,spring-boot에서만 사용가능
    => maven update
    => web.xml의 16번의 param-value 안에 /WEB-INF/dbconfig.xml
    => WEB-INF안에 beans 파일 생성 - dbconfig.xml : beans, context,mvc,jdbc 모두 최신 버전으로 체크
    => 해당파일에
    <bean id="dbInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="cohttp://m.mysql.cj.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/cms"></property>
    <property name="username" value="hana"></property> //db id
    <property name="password" value="hana1234"></property> //db 비번
    </bean> 추가

  23. maven repository 접속 - MyBatis 3.5.16 복붙 , MyBatis Spring 3.0.3 복붙
    : mybatis database 의존성 연결 라이브러리 (java에 DAO + SQL colomn 을 서로 연동하여 사용할수 있는 기능)
    => webpage.xml에 <beans:bean> 모두 주석처리 (얘는 특정 view만 열어주는거) 후  
      <context:component-scan base-package="webspring" /> 
       : package 전체에 어노테이션 및 XML에 사용하는 id값을 연동할 수있도록 오픈함 (webspring : package명)
         package추가시 webspring, 하고 추가하면 됨
    => 적용 : https://dev-eunse.tistory.com/196 여깄음

 

 

21 참고 이미지

이거 후 고추 그려진 프로그램 켜지면 우리가 쓰는 sts 추가 후 install 

=>

자동으로 getter,setter 마구 생성됨

 

 

18 - code

package webspring;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class mainpage {
	//가상의 웹페이지 1
	@RequestMapping("./mainpage.do")
	public void main() {
		
	}
	
	//가상의 웹페이지 2
	@RequestMapping("./mainpage2.do")
	public String main2() {
		return "test"; //파일명만 작성(.jsp를 입력하지 않아도 됨)
        //web.xml의 suffix,prefix 사용함
        //mainpage2.do 접속시 test.jsp 파일이 노출됨
	}
}


//가상 페이지 2개 만든거임

 

19 - webpage.xml 수정 - 후 restart

<?xml version="1.0" encoding="UTF-8"?>
//beans => beans:beans 로 수정
<beans:beans xmlns="http://www.springframework.org/schema/mvc" //여기 수정댐
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
   	 //아래 :beans 추가
	xmlns:beans="http://www.springframework.org/schema/beans" //여기수정댐
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <!-- @를 일반 class 파일에 사용할수 있도록 하겠다 -->
        <annotation-driven></annotation-driven>
	
        <!-- 모든 파일을 사용할 수 있도록 적용
            단, resources에 특정 파일을 적용시 해당 파일 속성만 적용된다 => /** 모두 가능
        -->
        <resources location="/" mapping="/**"></resources>
		<!--prefix : view 페이지를 보여줄 경로, suffix : view 페이지 파일 속성명-->
		<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<beans:property name="prefix" value="/"></beans:property>
			<beans:property name="suffix" value=".jsp"></beans:property>
		</beans:bean>
	<!--class를 로드하는 부분 (contoller)-->
        <beans:bean class="webspring.mainpage"></beans:bean> //java 파일명 작성
</beans:beans>

 

 

*** STS2

web.xml param-value에

/WEB-INF/webpage2.xml 

 

15번방식으로 (webpage2.xml) 생성 후 해당 파일에
<bean id="/test.do" class="webspring.test" />  => class를 해당 id를 이용하여 가상의 파일명으로 변환

 

test.java - 해당 방식은 역사속으로 사라짐... 잘안씀

package webspring;


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

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;


public class test implements Controller{
	@Override
	//post,get 모두 사용 가능한 핸들러
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView mv = new ModelAndView();
		
		String username="홍길동";
		int age=33;
		
		//해당 변수값 및 key이름으로 배열 형태의 구성으로 추가됨
		mv.addObject("username",username);
		mv.addObject("userage",age);
		
		mv.setViewName("test.jsp");
		return mv;
	}
}

*ModelAndView

: spring 전용 (servlet의 setAttribute 역할ㅋ) , Attribute를 보다 쉽게 사용할 수 있도록 변환된 class

 

.test.jsp => JSTL 형태( ${변수명} )의 변수값 출력 (ModelandView)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Spring view JSP test ${username} : ${userage}
</body>
</html>

//test.do에 => Spring view JSP test 홍길동 : 33 출력

 

=> test.do 접속 가능 (do가 먼저 실행되어야 jsp가 실행 가능 하므로 .do로 해야지만 해당 변수를 출력할 수 있음)

--이게 발전되서 상단 sts3 방식으로 바뀐거임

 

[STS2 spring 작동 순서]

web client => POM.xml => web.xml => Dispatcher(접속보안,언어셋,파일첨부)

=> bean.xml => java class 여러개의 웹 파일 => Model+View+Controller => JSP or JSTL or JSPX

 

파일 2개 만들고 싶으면 webpage2.xml에

<bean id="/test2.do" class="webspring.test2" />  이런식으로 계~ 속 추가

 

[STS3 spring 작동 순서]

web client => POM.xml => web.xml => Dispatcher(접속보안,언어셋,파일첨부)

=> bean.xml => @Controller 1개 , @RequestMapping
=>  Model+View+Controller => JSP or JSTL or JSPX

: 속도가 빠르고 관리할 파일이 적다

 

파일 2개 만들고 싶으면 위 18번에 public 추가하면됨

 

[STS4 spring boot 작동 순서]

web client => POM.xml => web.xml => Dispatcher(접속보안,언어셋,파일첨부) + properties

=> @Controller 1개 , @RequestMapping , @Bean

=>  Model+View+Controller => JSP or JSTL or JSPX

 

난리났다 난리났어....