Undergoing

[Maven+Spring] Eclipse Web Project 생성 1 - new project 생성 본문

개발/Web Development

[Maven+Spring] Eclipse Web Project 생성 1 - new project 생성

Halkrine 2014. 6. 12. 19:06

만들어진 웹 템플릿에 익숙해지면 SI 작업 및 기초 지식 함양에 하등 도움이 안 되기 때문에 떠올리는 차원에서 아예 삽 들고 새로 땅을 파보기로 했다.


참고 사이트 : http://blog.beany.co.kr/archives/1030

Tiles 관련 참고 사이트 : http://blog.naver.com/PostView.nhn?blogId=jazz1234k&logNo=40123376205


File → New → Maven Project 선택 혹은 Ctrl+N  Maven Project 선택



Use default Workspace location 체크 후 Next 클릭. Dynamic Web Project로 생성하는 방법도 있는 것 같은데 일단 익숙한 방법대로 ㄱㄱ.



Group Id 는 org.apache.maven.archetypes를, Artifact Id 는 maven-archetype-webapp(a simple Java web application)를 선택한 후 Next



각 속성에 알맞은 값을 입력한다.

- Group Id : 프로젝트 그룹의 식별 문자열

- Artifact Id : Group Id 에 따른 하위 프로젝트를 구분하기 위한 ID

- Version : Artifact 의 버전인데 기본 세팅된 정보를 사용

- Package : 프로젝트 생성시 기본으로 생성되는 패키지



참조한 블로그에도 나와 있지만, main 폴더 하위에 src 폴더를 생성하면 java 관련 src 폴더가 생성되므로 잊지 말고 추가하자.


여기까지 하면 maven 기반 웹 프로젝트의 껍데기는 완성된다. 이제 웹 프로젝트를 구동하기 위한 기본적인 세팅을 해야 한다. 보통 maven은 pom.xml에 기본적인 설정을 해두면 알아서 필요한 jar 파일을 다운로드 받기 때문에 관리하기 편하다.


필수로 들어가야 할 건 spring 관련 세팅과 jstl, 로깅을 위한 slf4j 정도. 여기에 타일즈 세팅도 추가. junit도 공부하기 위해 junit 세팅까지 추가. 각 세팅은 properties → property 엘레먼트에 추가하면 된다.


pom.xml을 더블클릭한 후 우측 하단 끝에 있는 pom.xml 클릭.



이런 화면이 나오는데, 이제 각 속성 별 세팅을 해야 한다. properties 엘레먼트를 만들고 거기에 각각의 버전을 명시하면 차후에 버전 업 할 때 편하게 바꿀 수 있으리라 생각한다.


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>kr.co.halkrine</groupId>

  <artifactId>webTraining</artifactId>

  <name>webTraining Webapp</name>

  <packaging>war</packaging>

  <version>0.0.1-SNAPSHOT</version>

    <properties>

        <java-version>1.6</java-version>

        <org.springframework-version>3.2.2.RELEASE</org.springframework-version>

        <org.springframework.security-version>3.2.2.RELEASE</org.springframework.security-version>

        <org.apache.tiles-version>2.2.2</org.apache.tiles-version>

        <org.aspectj-version>1.6.10</org.aspectj-version>

        <org.slf4j-version>1.6.6</org.slf4j-version>

        <tiles.version>2.2.2</tiles.version>

    </properties>

    

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    

       <!-- Spring -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-tx</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-jdbc</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-oxm</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-orm</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context-support</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-expression</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-aop</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-aspects</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-test</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>

        

            <!-- jstl -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>jstl</artifactId>

            <version>1.2</version>

        </dependency>

        

          <!-- junit -->

        <dependency>

       <groupId>junit</groupId>

       <artifactId>junit</artifactId>

       <version>3.8.1</version>

       <scope>test</scope>

        </dependency>

        

                 <!-- org.apache.tiles -->

        <dependency>

            <groupId>org.apache.tiles</groupId>

            <artifactId>tiles-core</artifactId>

            <version>${org.apache.tiles-version}</version>

        </dependency>

        <dependency>

            <groupId>org.apache.tiles</groupId>

            <artifactId>tiles-servlet</artifactId>

            <version>${org.apache.tiles-version}</version>

        </dependency>

        <dependency>

            <groupId>org.apache.tiles</groupId>

            <artifactId>tiles-jsp</artifactId>

            <version>${org.apache.tiles-version}</version>

        </dependency>

        

         <!-- slf4j -->

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-api</artifactId>

            <version>1.5.10</version>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>jcl-over-slf4j</artifactId>

            <version>1.5.10</version>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-log4j12</artifactId>

            <version>1.5.10</version>

            <scope>runtime</scope>

        </dependency>

  </dependencies>

  

  <build>

    <finalName>webExerToSpring</finalName>

  </build>

</project>


pom 작성을 완료하면 서버에서 관련 jar 파일을 다운로드 받는데, 만약 버전이나 엘레먼트 정보가 다르면 에러가 나니 주의.


src → main → webapp → WEB-INF → web.xml을 열고 웹 프로젝트 세팅을 해야 한다. web.xml의 역할과 세팅 방법은 검색하면 쉽게 나오는 거라 추가 기술할 건 없을테고, servlet 세팅 및 context 파라미터는 커스텀했으므로 헷갈리지 않게 기술. 아, spring listner도 기술해야 한다.


web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

    <display-name>WebTraining</display-name>

    <description>웹 페이지 개인 구축 연습</description>

 

     <!-- application listener -->

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    

    <!-- context-param -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/config/servlet-context.xml</param-value>

    </context-param>

    <context-param>

        <param-name>ProjectName</param-name>

        <param-value>webTraining</param-value>

    </context-param>

 

     <!-- Servlet Setting -->

    <servlet>

        <servlet-name>appServlet</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/config/servlet-context.xml</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>appServlet</servlet-name>

        <url-pattern>*.pn</url-pattern>

    </servlet-mapping>

        <servlet-mapping>

        <servlet-name>appServlet</servlet-name>

        <url-pattern>*.err</url-pattern>

    </servlet-mapping>

 

    <!-- Filter Setting -->   

    <filter>

        <filter-name>encodingFilter</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>encodingFilter</filter-name>

      <url-pattern>/*</url-pattern>

    </filter-mapping>

 

     <!-- Welcome File -->

    <welcome-file-list>

        <welcome-file>Index.jsp</welcome-file>

    </welcome-file-list>


</web-app>


tiles를 사용하기 위해 config 폴더에 layouts.xml 파일을 생성. 


layouts.xml

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE tiles-definitions PUBLIC

       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"

       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">


<tiles-definitions>


    <definition name="layouts-tiles" template="/WEB-INF/tiles/Tiles.jsp">

        <put-attribute name="header"    value="/WEB-INF/tiles/HeaderTiles.jsp" />

        <put-attribute name="content"   value="" />

    </definition>

    

    <definition name="*.Tiles" extends="layouts-tiles">

        <put-attribute name="content"   value="/WEB-INF/pages/{1}.jsp" />

    </definition>

    <definition name="*/*.Tiles" extends="layouts-tiles">

        <put-attribute name="content"   value="/WEB-INF/pages/{1}/{2}.jsp" />

    </definition>

    <definition name="*/*/*.Tiles" extends="layouts-tiles">

        <put-attribute name="content"   value="/WEB-INF/pages/{1}/{2}/{3}.jsp" />

    </definition>

    <definition name="*/*/*/*.Tiles" extends="layouts-tiles">

        <put-attribute name="content"   value="/WEB-INF/pages/{1}/{2}/{3}/{4}.jsp" />

    </definition>

</tiles-definitions>


content 의 value가 빈 값인 이유는 저 부분에 페이지가 동적으로 들어가기 때문. 원래 footer도 만들지만 귀찮으니 header에서 타협.


headerTiles는 헤더 부분에 들어갈 코드를 넣으면 되고, Tiles.jsp는 다음과 같이 작성하면 된다. 주목해야 할 건 t 커스텀 태그.


<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="t"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

</head>

<body>

    <t:insertAttribute name="header" />

    <t:insertAttribute name="content" /> 

</body>

</html>


이제 페이지 엑세싱을 위해 ModelAndView를 이용하여 mainController 클래스 파일을 작성해본다. ModelAndView를 사용한 건 내가 익숙해서..


mainController.java

package kr.co.halkrine.webExerToSpring;



import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.stereotype.Controller;

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

import org.springframework.web.servlet.ModelAndView;


@Controller

@RequestMapping(value="/main.pn")

public class mainController {

protected final Log logger = LogFactory.getLog(mainController.class);


@RequestMapping(params ="!command")

public ModelAndView init(HttpServletRequest req, HttpServletResponse rep){

ModelAndView mv = new ModelAndView("/main.Tiles");

return mv;

}

}


이제 url을 입력하면...



PROFIT!!!


이제 갖고 놀 일만 남았다.



* 한창 작업 잘 하다가 index.jsp 파일에 뻘건 엑박이 쳐져서 확인해보니



이건 Build Path → Configure Build Path에서 java 버전을 1.6 이상으로 맞춰주니 자동으로 해결되더라. 아니면 Build Path에서 server runtime을 추가하면 됨.