GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Servlet

[Servlet] Maven 맨바닥 Servlet 세팅 (intellij)

Backcoder 2022. 8. 6. 23:20

[[ Maven 맨바닥 Servlet / JPA 셋팅 ]] (intellij)

1. Maven 으로 프로젝트 생성
=> *webapp 모듈 추가해서 생성

2. main에 java 파일 생성
- main 안에 webapp 은 있는데, java 가 없다고 당황하지 말자. (intellij)
=> new - directory 하면 "java 경로폴더" 를 만들수 있게 해준다.

3. Tomcat(WAS) 연동

4. UTF-8 세팅 Language level 맞추기
Language level
(1) pom.xml
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
(2) 프로젝트 module - Language 레벨 통일
(3) Setting - java Compiler language 레벨 통일 (same as 로 default )

- UTF 는 따로 정리해둔 것 참고

5. properties / Dependencies 설정 ( pom.xml )

 

Tomcat 라이브러리 ( servlet / jsp 내포 ) 
Servlet/JSP 라이브러리 
JSTL 라이브러리
Spring MVC 라이브러리
MySQL Driver 라이브러리

...

등 필요에 따라 설치




- https://mvnrepository.com/
Maven 리포지터리 공식 사이트에서

필요한 라이브러리 검색해서 JAR 파일 다운받고 라이브러리에 추가

== 

pom.xml에 depencency 코드 추가 
( 해당 maven repository 페이지에서 dependency 코드 )


-  dependency 코드 추가하고  빌드하면, 

자동으로 해당 jar 파일이 설치되고, maven library 에 추가, 적용된다.



=> intellij 에서 dependency 부분에서 빌드해도, 컴파일 에러가 뜰 때가 있는데 ( 인텔리제이 호환문제 )
=> 우측 콘솔에 있는 Maven을 열고
=> 새로고침표시 해주면 해결 (메이븐 프로젝트를 직접 reload)


6. DataBase 연동
- 라이브러리 / 의존성 세팅

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>


(  JDBC - Mysql 연동 글 참고 )


---------------------------------
[ pom.xml 예시 ]

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>webServlet</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring-webmvc-version>5.2.6.RELEASE</spring-webmvc-version>
<javax.servlet-api-version>4.0.1</javax.servlet-api-version>
<javax.servlet.jsp-api-version>2.3.3</javax.servlet.jsp-api-version>
<javax.servlet.jsp.jstl-api-version>1.2.2</javax.servlet.jsp.jstl-api-version>
<taglibs-standard-impl-version>1.2.5</taglibs-standard-impl-version>
<junit-version>4.11</junit-version>
</properties>


<name>webServlet Maven Webapp</name>
<url>http://maven.apache.org</url>


<dependencies>

<!-- MVC -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-webmvc-version}</version>
</dependency>


<!-- Servlet -->

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

 


<!-- JSP -->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>${javax.servlet.jsp-api-version}</version>
<scope>provided</scope>
</dependency>

<!-- JSTL -->
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>${javax.servlet.jsp.jstl-api-version}</version>
</dependency>


<!-- TagLibs -->
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>${taglibs-standard-impl-version}</version>
</dependency>

<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>


<build>
<finalName>webServlet</finalName>
</build>
</project>



---------------------------------


[[ web.xml 스키마 변경 ]]

=> web.xml 파일의 첫 부분 == ( 스키마 )

Tomcat 버전 ( Servlet 라이브러리 버전 / JPA 버전 )   =>   web.xml 스키마 부분

스키마 부분을 맞춰서 사용한다. 

( 표 수정 - Tomcat 9.0 버전 - Servlet 4.0버전 - JSP version  " 2.3 "  tomcat 공식페이지상 안내 )  

=> Tomcat 은 자체적으로 서블릿 api 와 JPA api를 자기 버전에 맞게 내포하고 있다. 

즉, web.xml 스키마 정도만 조종해주면 된다. 

 

톰캣 9.0 버전을 사용할 경우 
=> 해당 4.0 버전 스키마를 아래에서 골라, web.xml 설정을 해준다.

Servlet 4.0
<?xml version="1.0" encoding="UTF-8"?> <web-app 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_4_0.xsd" version="4.0">

 

Servlet 2.5
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 
Servlet 3.0
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 
Servlet 3.1
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.1">



-----------------------------

- intellij Community 버전으로 비비려고 시도해보다가
1차 tomcat server 못까는데서 한번 석이 나갔고,
2차 이 web.xml 스키마 설정에서 javaEE 들어간 URL 컴파일 안되서 또 한번 석이 나갔고, ( EE = 기업용버전)
3차 Spring 환경에서 webapp 을 사용하는게 거의 막혀있다는데서 또 한번 석이 나갔다.
( Ultimate 버전에서는, 중간에도 Spring을 모듈로 가져다 쓸 수 있다. )

대신 비비려고 시도하고, 꼼지락대보면서 배운게 많아 쌤쌤이다.
제대로 구별도 안하고 쓰던 Maven Gradle에 대해 더 알게 되었고, WAR 과 JAR,
Tomcat server, web.xml, pom.xml 등에 대해서도 많이 배우게 됬다.


--------------------------------



- Spring Boot로, 그 와중에 편하디 편한 gradle 을 써가며,
Spring initializr로, 필요할 거 같은 라이브러리 싹 모아둔 거
정말 ADD Dependencies 클릭 한번으로 각종 라이브러리들이 자동으로 추가되고,
자동으로 의존성 관계 다 정리되고, 당연하다고 생각했던게

정말 엄청난 발전의 결과물이구나

라는걸 오랜시간 삽질을 통해 몸소 느끼게 되었다.

이렇게 밑바닥 부터 배워가는게
처음엔 사실 좀 그랬다.

과도기에 그 연결부분을 메꾸기 위해 임시적으로 사용될 지식을 배우는,
쓸모없어질 지식을 배운다는 생각에 효율성 생각이 먼저 들었다.

근데, 막상 접해보니까
일단 크게 다르지 않다.

다 같은 맥락과 형식에서 조금씩 "편해지기 위한" 발전을 해오는 것이
어느 정도 시야에 잡혀가고, 그게 생각보다 재밌다.

이렇게 밑에서부터 올라가서
다시 Spring Boot 와 MVC 를 만나면
기반지식과 시야가 크게 발전되어 있을거라 생각이 든다.