어떻게 생성하냐에 따라 다 세팅, 사용서버, 사용법이 다~~ 다름...
딱 정해진게 없음...
spring의 기본은 jsp파일 - html시 로드가 불가능
spring 은 JSTL과 많이씀
모든 라이브러리는 API로 사용
Eclipse 에서 setting시 old버전 -> 2021-09 버전 : spring 마지막 버전, 그 이후부터 spring boot
spring,spring boot 모두 bean이 기본임
sts4는 기본이 boot
✅ Spring maven project 기본 setting법 정리 (하단에 내가 메모한게 있긴함..)
- Widnow -> Preferences
encoding 검색 -> 모두 UTF-8로 변경
Install/update 체크박스 해제(autometically~)
Run/Debug 의 console 1000000 정도로 변경 - Project 생성 : Maven project 생성
-> create a simple project~ 체크, use default ~ 체크
-> Group Id, Artifact Id 동일한 이름으로 생성, Packaging : war 로 변경 - 프로젝트 우클릭 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 / 로 변경 - pom.xml에서 해당 라이브러리를 모두 추가
- web.xml을 생성(java EE tools -> Generate~) 및 해당 web.xml 수정 : Dispatcher 및 언어셋
- /WEB-INF에 /webpage.xml을 생성 (단, spring bean configuration file - 파일명.xml로 생성 )
* 주의 : bean,context,mvc 체크 후 최신버전(최상단 체크) 형태로 생성 => 나중엔 더 추가됨.... - server restart 후 controller를 생성 ( : 일반 class file - servlet 아님 !!)
- 7의 파일에 @controller, @RequestMappind("/생성할.do") 이용하여 웹페이지가 출력되는지 확인
- lombok 사이트에서 해당 라이브러리 설치 및 pop.xml에 추가
- 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
- encoding setting - TEXT 안에도 다 체크하고 utf-8로 세팅..할것..!
- maven project 생성
simple project ck - 이거 체크시 catalogs 모두 선택하는거임 - 무거워지지만 일단 이걸로 ㄱ
packaging : war
group id, artifact id : 동일하게 원하는걸로 => finish - 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 / - pom.xml 열어서 수정 :
maven repository 접속
maven-war-plugin => 1. Apache Maven WAR Plugin 3.3.2 maven 에서 복사해서
<build> <plugins><plugin> 안에 넣기 => 빨간에러 사라짐
=> 배포 파일에 맞춰서 해당 압축파일을 생성하는 라이브러리 - 프로젝트 우클릭 - java EE tools - generate~ 어쩌구 - web.xml 생성
- maven repository 접속 - 1. Tomcat Catalina 의 현재 apache버전과 동일한 버전 찾아서 (8.5.61)
dependency 코드 복사해서 <dependencies> 안에 넣기
=> Spring + tomcat 쓰겟다
=> <dependencies> : spring에 사용되는ㄴ 모든 라이브러리를 관리하는 태그 - 프로젝트 우클릭 - 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로 제대로 잘 바뀜 - 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번대 써야함 - 8번과 동일한 방법으로 MySQL Connector Java 8.0.33 추가 : Mysql 연결 라이브러리
- 8번과 동일한 방법으로 1. Spring JDBC - 5.3.37 (8번과 동일한 버전) 추가
=> Spring + mysql 연결 라이브러리 - maven repository 접속 - 2. JSTL 1.2 -> 얘 복붙 2임!! - 빨간줄 뜨면 에러임
=> JSTL(jsp update) - maven repository 접속 - 2. JavaMail API (compat) 1.4.7 복붙 -> 얘도 2임
=> mail을 사용하는 라이브러리 - maven repository 접속 - 2. JavaBeans(TM) Activation Framework 1.1.1 복붙
=> JDK8 이상일 경우 mail 보안오류 발생으로 라이브러리 추가
.. 라이브러리 또 추가 필요할시 추가하면 됨 지금은 8개 추가함..
=> 7번 방식으로 project 업데이트 다운받은 library 추가하면써 빨간줄 사라짐~ - 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후 정상 작동시 잘된거임 - web-inf 폴더 우클릭 - new - bins con어쩌구 파일 생성 (webpage.xml)
- beans 최신버전, context 최신버전, mvc 최신버전 체크 -> fisish
=> Spring은 기본으로 MVC 형태의 web프레임워크이므로 이런식으로 로드해아함
beans : 의존성 여부를 체크하는 소스코드
context(java class), mvc(jsp로 출력하는 형태 ) 필수 - web.xml의 parm-value 부분에 /WEB-INF/webpage.xml 추가 후 서버 재가동 - 파일 아이콘에 S생김 ㅋ
- webapp 우클릭 - new - test.jsp 생성 후 테스트해보면 잘나옴ㅋ
- java package 우클릭 - new class 생성 (public ~ 체크없이 mainpage.java)
밖에 @controller
안에 @RequestMapping("") ~ 하단 code 참고
/project명/ 없애고 싶으면 프로젝트 우클릭 - properties - web project settings - / 로 해주고
webapp에 index 만들고 서버 중지 후 jsp파일에서 ctrl+f11 해서 서버 실행(index 파일 속성 x) - webpage.xml beans 태그 beans:beans로 변경 ~ 후 18 return null 변경 후 restart : 하단 코드 참고
- 언어셋 세팅 :
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>
요거 추가 - 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 재실행 - 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> 추가 - 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
=>
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
난리났다 난리났어....
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#3-2 / coupon delete,update (spring + database) (0) | 2024.07.10 |
---|---|
#3-1 / coupon insert,select (spring + database) (0) | 2024.07.10 |
#2-2 / spring + database 연결,회원가입 JSTL+spring+Datasource (0) | 2024.07.09 |
#2-1 / spring 규칙2, JSTL 사용법 기초 (0) | 2024.07.09 |
#1-2 / @ , spring 규칙1 (0) | 2024.07.08 |