본문 바로가기
카테고리 없음

자바 - 백앤드 학습 #2. 이클립스 + 메이븐 webapp ( 2024. 5월 기준 )

부스트 코스의 백앤드 학습을 하면서 메이븐(Maven)이라는 약간 복잡한 부분을 진행해보았는데요.
이클립스에서 메이븐을 사용하는 방법인데 이클립스 버전도 바뀌었고 설정이 그리 쉽지 않습니다.
해당 부분 공유드리겠습니다. 역시나 크레이도 나중에 제 글을 보고 도움을 받으려는 의도이지요 :)

원본 강의 게시글 : https://www.boostcourse.org/web326/lecture/58938?isDesc=false


프로젝트생성

이클립스 2024. 3 버전을 설치하셨다면 별 다른 플러그인 설치 없이 바로 Maven 프로젝트를 만들 수 있는데요.
이클립스를 시작하여 File - New - Maven Project 메뉴를 선택하고,

아래 화면에서는 Next 버튼 클릭,

아래 화면에서는 Artifact Id 값maven-archetype-webapp 1.0 을 선택하시면 되는데요.
항목이 너무 많아 찾기 힘들기 때문에 CatalogInternal 로 바꾸어 주면 찾기 쉽습니다
그러면 제일 아래 항목이 노출되며 선택 후 Next 버튼 클릭,

Group IdArtifact Id 는 자유롭게 적어주면 되는데요.
보통 Group Id 는 도메인 주소를 역순으로 적는다고 합니다.
2곳 영역을 채워준 후 Finish 버튼 선택!

콘솔창에 설치 현황이 표시될텐데요.
분명 아래 화면에서 딱 멈춰서 진행이 안될겁니다.
이때 아래와 같이 작업해줘야 합니다.
1) Console 탭 선택
2) Y 라고 표시된 부분을 클릭, Enter 키를 눌러주세요.

그리고 나면 다시 설치가 진행되며 아래 화면이 나오면 끝입니다.

하지만 무언가 오류가 있다는 표시가 프로젝트 탐색기에 딱 표시될 겁니다.

오류 지점을 찾아보면 뭐 별것도 없는 간단한 소스인데 오류가 나고 있는 것을 볼 수 있습니다.


컴파일 버전 1.8 변경

이 문제를 해결하기위해 Maven의 jdk 컴파일 버전을 변경해야 하는데요.

pom.xml 파일을 연 다음에,

<finalName>...</finalName>  아래에 아래 소스를 추가하고 저장합니다.

<plugins>
  <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <version>3.6.1</version>
     <configuration>
         <source>1.8</source>
         <target>1.8</target>
     </configuration>
 </plugin>
</plugins>

결과화면

이어서 프로젝트 속성 창을 열어줍니다.
프로젝트 선택Alt + Enter 키를 치면 됩니다.

1) Maven 메뉴를 펼쳐
2) Java EE Integration 선택
3) Enable Project Specific Settings 체크상자를 활성화하고
4) Apply and Close 버튼을 선택합니다.


서블릿 설치

이어서 서블릿을 설치해줘야 하는데요.

pom.xml 파일의 <dependencies> 영역에 아래 코드를 추가합니다. ( 빨간색 )


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
  </dependencies>


다시 프로젝트 속성 창을 열어 ( 프로젝트 선택 후 Alt + Enter )
이번에는
1) Project Facets 선택
2) Runtime 탭 선택 후,
3) New 버튼을 선택합니다.

이어서 4) Apache 폴더를 펼쳐 Apache Tomcat v8.5 선택
5) Next 버튼 선택

6) Browse 버튼을 선택하여 톰캣이 설치된 폴더를 선택하고
7) Finish 버튼을 선택합니다.

8) Apache Tomcat 8.5 체크상자를 선택
9) Apply and Close 버튼을 선택,

10) 창이 몇번 뜨는데 각각 Yes 버튼을 눌러주면 됩니다.

크레이는 여기까지 처음에는 되었다가 다시 안되어서 프로젝트 속성 창의
Java Build Path - Maven Dependencies 체크상자를 체크하고 Apply 해주었더니

그제서야 빨간 색 경고가 없어졌습니다.

JSP 코드도 잘 작동하더라구요 :)

<html>
<body>
<h2>Hello World! 1 to 9</h2>
<%
for(int i=1;i<10;++i)
	out.print(i);
%>
</body>
</html>

하지만 아직 아래와 같은 EL 태그 ( ${스코프변수}  )는 제대로 작동하지 않습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample</title>
</head>
<body>
<%
request.setAttribute("apple", 3);
%>
과일 이름은? ${apple}
</body>
</html>

결과화면


JSTL 설치

JSTL 모듈을 종속성에 포함시켜 보겠습니다.
pom.xml 파일에 아래 내용을 추가한 다음, ( 빨간색 )


         :
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
  </dependencies>
        :


아래 파일을 열어

src/main/webapp/WEB-INF/web.xml

전체 내용을 아래와 같이 수정 후 저장합니다.

<?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">
  <display-name>Archetype Created Web Application</display-name>
</web-app>

이어서 윈도우 탐색기에서 프로젝트 아래  .settings/org.eclipse.wst.common.project.facet.core.xml 파일을 열어 전체 내용을 아래와 같이 수정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="jst.web" version="3.1"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="java" version="1.8"/>
</faceted-project>

이제 이클립스에서 프로젝트를 우클릭 - Maven - Update Project 를 선택합니다.

이 단계까지 완료하면 보통 톰캣 실행시 오류가 발생하는데요.
다음 차례로 진행하면 됩니다.

1) 실행중인 하단의 Server 탭을 선택하고
2) 하단의 Tomcat 8.5 선택Delete 키를 누릅니다.
3) OK 를 눌러 실행중인 서버를 삭제합니다.

4) 프로젝트 탐색창Server 도 선택 후 Delete
5) OK 를 눌러 삭제합니다.

다시 파일을 마우스 우클릭, Run As - Run on server 로 페이지를 실행하면 결과가 잘 나오는 것을 볼 수 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample</title>
</head>
<body>
<%
request.setAttribute("apple", 3);
%>
과일 개수는? ${apple}
</body>
</html>

EL 태그 외에도 JSTL 태그도 잘 나오는 것을 확인할 수 있습니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page import="java.util.*" %>
<%
    List<String> list = new ArrayList<>();
    list.add("hello");
    list.add("world");
    list.add("!!!");
    request.setAttribute("list", list);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach items="${list}" var="item">
${item } <br>
</c:forEach>
</body>
</html>

서블릿도 생성해서 시도해보았는데요.
방금 전의 과정들을 모두 거치니 잘 되는 걸로 확인됩니다.

package exam;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Hello
 */
@WebServlet("/Hello")
public class Hello extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Hello() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		response.getWriter().print("Hello !");
	}
}

오늘은 부스트코스의 메이븐 세팅에 대해 살펴보았습니다.
그동안 진행한 진도율이 48%! 이제 거의 중반이군요.


아무쪼록 필요하신 분께 도움이 되시길 바랍니다.
오늘도 방문해주신 모든 분들께 감사드립니다!


찬양 한곡 공유드립니다.
힘을 내고 싶을 때 들어보시면 좋을것 같아요~

항상 우리를 그리스도 안에서 이기게 하시고 우리로 말미암아 각처에서 그리스도를 아는 냄새를 나타내시는 하나님께 감사하노라
- 고린도후서 2장 14절 말씀 -


다음 게시글 : https://itadventure.tistory.com/673

 

자바 - 백앤드 학습 #3. 부스트코스 프로젝트 A 변형 제작

부스트 코스의 자바 백앤드 심화과정 학습을 하면서 '과제'란게 있어서"엇? 이런것도 있네?" 하고 도전의욕을 불태우며(?) 내심 기대했다가..아쉽게도 과제 제출 서비스는 종료되었더라구요.원본

itadventure.tistory.com