반응형

만드는 순서 등을 복습 겸 정리. 

뇌피셜의 향연

 

pom.xml로 필요라이브러리를 다운로드하게 설정해준다.

 

https://www.youtube.com/watch?v=9Tmzt6Q9WI8

 

그다음 web.xml설정을 해준다.

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_4_0.xsd"
         version="4.0">


  <display-name>HelloSp4MVC</display-name>

  <!-- DispatcherServlet이 자동으로 실행되도록 설정 -->
  <!-- servlet-context.xml 설정정 -->
  <servlet>
    <servlet-name>HelloSp4MVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloSp4MVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- root-context.xml 설정 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/root-context.xml</param-value>
  </context-param>


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

  <!-- filter 설정 -->
  <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>
</web-app>

 

 

위의 코드를 보면 

dispatcher역할을 해줄 servlet-context 파일과 

JDBC의 정보를 담은 root-context파일을 설정해준걸 확인할 수 있다.

 

servlet-context파일에서는 뷰에 저장되있는 클라이언트에게 띄워줄 화면이 담아져 있는 위치 정보(jsp)를 포함하고 추가적으로웹 리소스 경로/ 파일 업로드 리졸버/ 컨트롤러 클래스 지정해주는 내용이 담아져 있다.

 

servlet-context

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--컨트롤러 클래스에 어노테이션을 사용하겠다는 의미 -->
    <mvc:annotation-driven/>
    <!-- 뷰 리졸버 설정 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
    </bean>

    <!-- 웹 리소스 경로 지정 -->
    <mvc:resources mapping="/resources/**"
                   location="/resources/" />
    <!-- 파일업로드 리졸버 설정 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760" /><!-- 10MB 제한 -->
    </bean>
    <!-- 컨트롤러 클래스 지정 -->
    <context:component-scan base-package="imlsw96.spring.mvc"/>

</beans>

root-context

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


    <!-- jdbc properties -->
    <util:properties id="jdbc"
                     location="/WEB-INF/jdbc.properties"/>


    <!-- dbcp datasource -->
    <bean id="dbcpDataSource"
          class="org.apache.commons.dbcp2.BasicDataSource"
          p:driverClassName="${DRV}" p:url="${URL}"
          p:username="${USR}" p:password="${PWD}" />
</beans>

IndexController

package imlsw96.spring.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

import java.text.DateFormat;
import java.util.Date;

@Controller
public class IndexController {

    @GetMapping("/first")
    public String first() {
        return "first";
    }

    @GetMapping("/today")
    public ModelAndView today(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("today");
        mv.addObject("today",getToday());
        return mv;
    }

    private String getToday() {
        Date date = new Date();
        // 날짜와 시간을 자세히 출력하는 형식 객체 정의
        DateFormat dateFormat=
                    DateFormat.getDateTimeInstance(
                            DateFormat.LONG, DateFormat.LONG );
        // date 객체를 DateFormat 객체를 통해
        // 자세한 날짜와 시간으로 변환
        String formattedDate = dateFormat.format(date);
        return formattedDate;
    }
}

 

어노테이션 @GetMapping의 처음 부분을 확인해보자. 

GetMapping("/first") 부분은 url을 지정해주는 것 같고 

아래 리턴으로 first.jsp파일을 리턴해주는 것 같다. first.jsp파일을 반환한다고 생각한 이유로는 

servlet-context에 뷰 리졸버로 jsp파일 경로를 지정해주었기 때문이다. 

추가적으로 컨트롤러 클래스 위치까지 지정해주어서 킹리적갓심이라고 해야 할까 

 

그렇게 하고 톰캣 서버를 열어서 확인해보면 잘 나온다.

first.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
    <title>Hello,World !!</title>
</head>
<body>
<h1>매우매우 졸리다 </h1>
<p>시간은 금이라구 친구 !!  내말 믿으라구 이말이야 ~</p>
</body>
</html>

위의 <% page contentType%> 이 부분은 html 문법을 사용할 수 있게 하는 태그 같다. 

 

그리고 두 번째 @GetMapping 어노테이션인 /today 부분을 보면

ModelAndView객체를 리턴하는 걸 확인할 수 있는데 ㅋㅋㅋ 뇌피셜로 지껄여보자면 

전에 올린 MVC글에서 보면

모델 애플리케이션의 정보(데이터)를 나타내며

 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 라는 부분을

확인할 수 있는데 and 두 개로 묶은 걸 보니까 데이터와 뷰 페이지 둘 다 혼용하는 뭐 그런 객체가 아니겠는가 

그렇게 코드르 분석해보면 setViewName 메서드로 today.jsp를 view페이지로 설정해주고 

addObject로 객체를 넣어주는데 이름은 today요 추가할 부분은 getToday()라는 메서드이다 

 

getToday메서드는 뭔가 하고 봤더니 아래 코드에 

현재 시간을 생성하는 메서드가 아닌가 

간단하게 실험하기 위해 클래스 내부에 생성해서 사용했다  

이제 today.jsp 파일을 봐보자.

 

<%@ page contentType="text/html;charset=UTF-8"  %>
<%@ taglib uri ="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>오늘 날짜, 시간 출력</title>
</head>
<body>
<h1>날짜, 시간 출력</h1>
<p>${today}</p>
</body>
</html>

 

 

봐보면 <p> 태그에 ${today}를 확인할 수 있고 맨 위에 태그들 중 못 보던 taglib 태그를 볼 수 있는데 

아까 컨트롤러에서 addObject로 객체를 추가한 걸 기억할 수 있는데 아마 html문에서 컨트롤러의 태그를 사용하기 위해서는

taglib 가 필요하고 추가한 객체를 사용하기 위해서는 ${} 달러표시를 통해 하는 거 같다. 

 

많은 시간 동안 수업내용에 대해 복습하는 글을 많이 못 올렸는데

못 올린 이유에는 일단 수업 자체가 확 어려워졌다고 느껴졌다. 

수업이 끝나는 기간은 정해져 있는데 해나가야 할 부분은 많다 보니 

수업내용에서도 많은 부분이 자세한 설명 없이 넘어가고 수업 대부분의 시간을 선생님의 코딩을

그저 따라갔다. 이해보다는 이렇게 하니 이런 결과물이 출력이 된다 정도로만 수업이 진행되었다고 

개인적으로 생각되는데 결과적으로 이런 수업을 듣고 나서 저녁시간 때 복습을 하려고 

수업의 결과물을 보니 행위의 결과물들만 남아있다고 느껴졌다. 

 

그렇게 복습을 하려고 하니 행위에 대한 이유? 저건 뭐고 이건 뭐지 하는 부분을 온전히 내가 공부해야 하는

상황이었는데  모르는 부분을 구글링을 하다 보니 모르는 걸 검색했더니 모르는 게 더 튀어나오는 상황을 겪었다.

 

이럴 때 내 안 좋은 습관들이 다시 나온 거 같다. 

어찌어찌 모르는 걸 해결하려고는 하는데 계속 모르는 늪에 깊숙이 계속 빠지는듯한 기분에 그냥 빠져나와서 

영화도 보고 운동도 하고 유튜브도 보고 머릿속에는 계속해야지 해야지 했는데 모르는 것들만 튀어나오니 손에 잡아야 한다는 걸 알지만 잡히진 않았다. 그렇게 수업을 듣고 의무적으로 들어야 하는 온라인 수업을 틀어놓으며 딴짓들을 요 며칠 했는데 당연한 이야기겠지만 위의 방법으로는 해결이 불가능하고 끝에는 포기를 하게 되는데

이 경험을 나는 이미 해봤고 포기는 하고 싶지 않아서 다시 늪에 들어가 발버둥 치려고 들어와 봤다. 

 

복습을 하면서 음 구글링으로 이게 뭔지 정확히 아는 것도 중요한 부분이라고 생각한다. 하지만 그 정확함을 알기 위해 

했던 행동들이 더욱 힘들게 했다. 그래서 일단 뇌피셜로 추측해가며 일단 복습해 나가고 그렇게 하는 와중에 오류가 생기면 다시 또 찾아보고 그렇게 나의 뇌피셜을 수정해나가는 방식으로 다시 시작해보려고 한다. 

 

 

 

 

반응형

+ Recent posts