ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Windows] Spring MVC 프로젝트 수동 생성
    개발/개발환경구축 2022. 11. 24. 17:46

     

    본 과정은 Eclipse IDE 를 기준으로 하고 있으나 메이븐 프로젝트 인식이 가능한 IDE 라면 상관 없습니다.

     

    +2022-12-12 spring xml 임포트 과정 수정


    1.메이븐 설치

     

    https://maven.apache.org/download.cgi

     

     

    바이너리 Zip 파일을 다운로드 받아서 C:에 압축을 풀어줍니다.

    폴더명은 maven 이라고 바꿔두겠습니다.

     

     

    고급 시스템설정 - 환경 변수

     

     

    시스템 변수 측에서 새로만들기를 누르고 작성합니다. (maven은 압축 해제한 폴더명입니다.)

     

     

    시스템 변수 목록에서 Path 를 찾아서 편집 버튼을 누릅니다.

     

     

    %MAVEN_HOME%\bin을 추가해 줍니다.

     

    만약에 화면에서 위와같은 UI 가 보이지 않으며 한줄의 텍스트 타이핑으로 보인다면

    텍스트 값 문단 끝에 이 글자를 이어 붙혀 줍니다.

    %MAVEN_HOME%\bin;

     


    2.프로젝트 폴더 생성

     

     

    아래와 같은 새로운 파일경로를 만들어 주세요

     

    프로젝트 이름 - src - main - java

                                              └webapp - WEB-INF

                                                             └ view

     

     


    3.pom 설정하기

     

     

    원래라면 메모장을 열어서 메이븐 기본 경로와 의존들, 컴파일러등을 전부 타이핑 해야 합니다.

    시간 낭비가 심하니 작자가 작성한 파일을 공유합니다.


      

    pom.xml
    0.00MB

     

     

    바이러스나 악성코드는 없습니다. 그저 믿고 깔아주세요.

    다운로드 뒤에 메모장으로 열어서 주석을 단 부분을 원하는 이름으로 수정해주세요.


     

    아니면 접은 글로 타이핑을 적어 둘 테니 메모장에 복사하시고

    저장할때 모든 파일 형식으로 pom.xml로 저장하시길 바랍니다.

     

    더보기

    <?xml version="1.0" encoding="UTF-8"?>
    <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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springtest</groupId><!--그룹 이름-->
    <artifactId>mvctest</artifactId><!--프로젝트 이름-->
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
    <dependency>
    <groupId>javax.servlet</groupId><!--서블릿 추가-->
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>javax.servlet.jsp</groupId><!--JSP 추가-->
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.2-b02</version>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>javax.servlet</groupId><!--컨트롤러 api 추가-->
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId><!--mvc 작용 추가-->
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId><!--DB연동 사용 추가-->
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
    <groupId>org.apache.tomcat</groupId><!--DB연동 사용 추가2-->
    <artifactId>tomcat-jdbc</artifactId>
    <version>8.5.27</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId><!--Spring 모듈1-->
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId><!--Spring 모듈2-->
    <artifactId>spring-test</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId><!--Spring 모듈3-->
    <artifactId>spring-core</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>

     

    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId><!--test 모듈-->
    <version>4.13.2</version>
    </dependency>


    <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId><!--AOP-->
    <version>1.8.14</version>
    </dependency>
    </dependencies>

    <build>
    <plugins>
    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>utf-8</encoding>
    </configuration>
    </plugin>
    </plugins>
    </build>

    </project>

     

     

    작성하신 pom을 프로젝트에 가장 밖에 넣어주세요.

     

    (선택사항)

    이 spring-project 파일을 c: \ workspace 안에 넣어두겠습니다. (eclipse IDE 프로젝트경로)

     


    4.maven으로 작성한 의존들을 설치하기

     

    본 과정은 위의 maven 설치 및 환경변수 설정을 잘 따라왔을 때 실행 가능합니다.

     

     

    cmd 를 열고 자신의 프로젝트 내부로 들어가 줍니다.

    작성자는 프로젝트 파일을 c드라이브의 workspace 폴더 안에 넣어 놨었습니다.

     

    cd c:\workspace\spring-project

     

    이제 의존들을 설치하겠습니다.

     

    mvn compile

     

     

    무사히 의존 설치가 완료되었습니다.

     


    5.Eclipse에 이식하기

     

     

    File - import - Existing Maven Projects

     

     

    Finish 버튼을 누르면 Eclipse 이식이 완료됩니다.

    하지만 war를 인식 못하고 x 표시가 난 상태로 인식됩니다.

     

     

     

    프로젝트 우클릭 - java EE Tools - Generate 를 클릭하면 해결됩니다.

     


    6.MVC 기본 틀 구성하기 (선택사항)

     

    여기부터 자신이 알고 있는 Spring 지식들로 기본 구성을 이루면 됩니다.

    코딩의 영역이지만 최소한의 필요한 영역만 구축해봅시다.

     

    1.webapp - WEB-INF - web.xml에 서블릿 태그를 추가합니다.

     

    더보기

    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextClass</param-name>
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    config.MvcConfiguration <!--임의의 java의 패키지.클래스-->
    </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <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>
    </filter>
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>


     

    2.src/main/java에 config 패키지를 만들고 Configuration 과 Controller 와 Vaildator를 추가합니다.

    ※ 물론 xml 로 처리하셔도 됩니다.

     

    이클립스의 경우

    ctrl + shift + o 를 눌러서 일괄 임포트가 가능합니다.

    ctrl + shift + f 를 눌러서 일괄 줄 정리가 가능합니다.

     

    MvcConfiguration.java

    더보기

    @Configuration
    @EnableWebMvc
    //@ImportResource({"classpath:/config/configuration.xml"})
    public class MvcConfiguration implements WebMvcConfigurer{


    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

    //json 데이터를 일괄 변형 처리
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

    //Web AOP, interceptor안에 정의, false 시 컨트롤러의 실행을 취소.
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.jsp("/view/","jsp");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/view").setViewName("newView");
    }

     

    //아래 두 객체는 이후 추가할 내용

    /*
    @Bean
    public RootController rootController()
    {return new RootController();}

    @Bean
    public Validator validator()//validator 를 글로벌 범위로 쓸려면 추가
    {return new RootVaildator();}
    }

    */

     

    +

    더보기

    여기에서 classpath: 란 IDE 내에서 설정하여 지정한 경로를 의미합니다.

    예를 들어 Eclipse를 사용할 경우

     

    classpath 는 프로젝트 우클릭 - 속성 - Build path 에 등록되어있는 해당 경로를 의미하게 됩니다.

     


    RootController.java

    더보기

    @Controller
    //@Profile("dev,")
    //@RequestMapping(value="/", method=RequestMethod.GET) //이경우엔 메소드에 안쓸 수 있음.
    public class RootController {

    @InitBinder
    protected void inliBinder(WebDataBinder binder){
    //binder.setValidator(new RootValidator());//컨트롤러 단위만
    //binder.addValidator(new RootValidator());//글로벌 + 컨트롤러
    }

    @GetMapping("/")
    public String getRoot(Model model, /*@RequestParam(value="test",required = false) String paramGet,*/ Error err) {
    return "index";
    }

    @PostMapping("/")
    public String postRoot(HttpServletRequest http, Model model) {
    return "index";
    }

    }


    3.RootVaildator.java

    더보기

    @Component
    public class RootVaildator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
    //데이터 필터. 원하는 형태만 받는 코드를 작성
    return false;
    }

    @Override

    public void validate(Object target, Errors errors) {

    // 데이터의 값을 비교검증. 

    //errors.rejectValue("parameter","ERROR OCURED!")

    }

    }


    +configuration.xml(작성 참고용, 복붙으로 사용할 수 있는 항목이 아닙니다)

    더보기

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
    default-autowire="byType"
    >

     

    <import resource="classpath:externalConfiguraion.xml"/>


    <bean id="test" class="com.package.test" /> <!--빈 생성 예제 1번-->


    <bean id='ob1' class='com.exjemple.beans.Bean' autowire="constructor">
    <constructor-arg value='200' index='0' type='int'/>
    <constructor-arg value='생성자대입' index='1'/>

    </bean> <!--빈 생성 예제 2번-->

     

    <bean id="ob2" class="com.exjemple.beans.Bean2">
    <constructor-arg value="0.1" type="double"/>
    </bean> <!--빈 생성 예제 3번-->


    <bean id="databaseInfo" class="com.database.DatabaseInfo">
    <property name="Id" value="externalBean1" /><!--property 란 field 값을 뜻한다.-->
    <property name="pass" value="externalBean2" /><!--externalBean은 다른 configuration에서 등록한 Bean-->

     

    <property name="list"><!--DatabaseInfo 에 정의한 list field 는 Set 구조를 지님-->

    <list>

    <bean class='com.exjemple.Data'/><!--데이터 형태 선언 으로 대입-->

    <bean class='com.exjemple.Data'/>

    <ref bean='externaldata'/><!--externalData는 다른 configuration에서 등록한 Bean-->

    <ref bean='externaldata'/>

    </list>

    </property>

     

    <property name="map">
    <map>
    <entry key="index1" value='문자열'/>
    <entry key='index2' value='100' value-type='int'/><!--예시를 보여주기 위한 작성, 실행불가-->
    </map>
    </property>


    </bean>
    </beans>

     

    3.src/main/webapp/view에 index.jsp 를 작성해서 추가합니다.

     

    index.jsp

    더보기

    <!DOCTYPE html>

    <html>

    <head><title>hello world</title></head>

    <body>hello world!</body>

    </html>

     

     

    화면이 보인다면 정상작동에 성공한 것입니다.

     


     

    댓글

개발에 관심을 가지는 블로그