ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC2 - 1. 기본 설정
    JAVA/웹 프로그래밍 - Spring 2020. 12. 15. 22:28

     

    프로젝트를 생성시에 maven 프로젝트로 생성을 한다.

    File -> New -> Maven Project를 선택하고 Next를 선택한다.

     

     

    create simple project를 체크하고 Next를 선택한다.

     

    artifact id는 프로젝트 이름이다. 

    war는 웹 페이지로 만들 것이므로 이를 선택한다. 그리고 Finish를 선택한다.

     

    그리고 아래와 같이 Servers탭에서 아래의 Tomcat v9.0을 우 클릭한다.

     

    그리고 아래와 같이 Add and Remove를 선택한다.

     

    현재의 프로젝트만 오른쪽에 두고 나머지는 왼쪽에 둔다. 그리고 Finish를 선택한다.

     

    그리고 다시 Servers탭으로 돌아와서 Tomcat v9.0을 더클 클릭한다.

     

    왼쪽 하단에 Modules를 선택한다.

     

    아래와 같이 현재 프로젝트를 선택하고 Edit를 선택해서 Path를 /로 두고 OK버튼을 선택하고 저장한다.

    현재의 프로젝트의 컨텍스트 경로를 변경하는 방법은 위의 방법 말고 다른 방법도 있다.

    현재 프로젝트를 선택하고 우 클릭해서 아래와 같이 Properties를 선택한다.

     

    아래와 같이 Web Project Settings를 선택하고 Context root를 / 로 변경한다. 그리고 적용을 선택한다.

     

    그리고 perspective창에서 아래와 같이 Java EE를 선택하자.

    그 이유는 아래에서 설명한다.

     

    src/main/webapp폴더에 WEB-INF폴더를 만든다.

    만약 위에서 Java EE가 아닌 Java 상태에서는 아래와 같은 파일의 계층구조로 나타나지 않는다.

    pom.xml이 에러가 남을 알 수 있는데, 이는 web,xml 파일이 없기 때문이다.

    WEB-INF폴더에 web.xml파일을 만들자.

     

    web.xml

    더보기
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
      <display-name>springgmvc</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
       <servlet>
      	<servlet-name>dispatcher</servlet-name>
      	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>dispatcher</servlet-name>
      	<url-pattern>/</url-pattern>
      </servlet-mapping>
      
    </web-app>

     

    web.xml에서 아래와 같이 서블릿 매핑에서 url패턴에서 /혹은 /*을 쓰냐에 따라 그 결과가 매우 달라진다.

    우선은 아래와 같이 /로 둔다.

    우리가 Servers 탭에서 Tomcat 서버를 더블클릭해서 Context Path를 /로 두는 것과 같다.

     

    그리고 WEB-INF폴더에 dispatcher-servlet.xml 파일을 만들 것이다.

    이는 위의 web.xml에서 맵핑이 되어 있음을 알 수 있다.

    그런데 xml 파일로 만들지 않을 것이다.

    WEB-INF폴더를 선택하고 우클릭해서 new-> other -> spring 검색해서 spring bean configutation file을 선택하고 

    Next를 선택하고 파일이름은 dispatcher-servlet 으로 한다.
    namespaces에서 beans를 선택한다.
    그러면 bean을 만드는 파일과 내용이 비슷함을 알 수 있다.

     

    아래와 같이 파일 이름을 입력한다. 그리고 Next를 선택한다.

     

    아래와 같이 beans를 선택하고 Next를 선택하고 Finish를 선택한다.

     

    dispatcher-servlet.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">
    
    <!-- URL 설정 -->
    <bean id="/index" class="controller.IndexController"></bean>
    
    </beans>

     

    아래의 문장은 위의 xml파일의 내용이다.

    아래의 id가 의미할 것은 앞으로 우리가 만들 컨트롤러의 경로이다.

    class는 지금 만들 컨트롤러의 위치이다. 컨트롤러는 아래에서 만들 것이다.

    붉은 색선이 나오는 이유는 컨트롤러를 만들지 않아서 이다. 컨트롤러를 만들면 아래의 붉은 색선은 사라진다.

     

    그리고 아래와 같이 Maven에서 Update Project를 하자.

     

    pom.xml에서 다음과 같이 Tomcat, 자바 버전, springframework를 설정한다.

    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.iot</groupId>
      <artifactId>springmvc</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      
      <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
      
      <dependencies>
    	
    	<dependency>
    	    <groupId>org.apache.tomcat</groupId>
    	    <artifactId>tomcat-api</artifactId>
    	    <version>9.0.39</version>
    	</dependency>
    	
    	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.9.RELEASE</version>
    </dependency>
    
      </dependencies>
      
    </project>

     

     

    그리고 Maven에서 Update Project를 하자.

    서버가 제대로 실행되는지 확인하자.

    src/main/webapp폴더에 index jsp파일을 만들고 실행해서 확인을 하자.

    index.jsp

    더보기
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Insert title here</title>
    </head>
    <body>
    index.jsp
    </body>
    </html>

     

    index.jsp파일을 실행하자.

     

    컨트롤러를 만들어보자.

    패키지는 컨트롤러를 만드는 동시에 생성을 하자.
    src/main/java에 우 클릭해서 new->other-> class(자바 파일)를 선택한다.
    패키지의 이름은 controller라고 한다.
    그리고 여기에 IndexController라 하고 Finish를 선택한다.

     

    IndexController.java

    더보기
    package controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class IndexController implements Controller
    {
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
    			throws Exception 
    	{
    		System.out.println("url : index");
    		
    		ModelAndView mv = new ModelAndView();
    		
    		mv.addObject("data","123");				//	mvc2에서 request.setAttribute("data","123"); 과 동일
    		
    		//	상대경로
    		mv.setViewName("/WEB-INF/index.jsp");	//	RequestDispatcher dispatcher = request.getRequest & forward
    		
    		return mv;
    	}
    }

     

    아래의 문장의 의미는 

    아래의 두 문장을 합친 의미이다.

    RequestDispatcher dispatcher = 
    	request.getRequestDispatcher("/WEB-INF/index.jsp");
    		
    	dispatcher.forward(request, response);

     

    그리고 index.jsp파일을 다음과 같이 수정해서 위의 컨트롤러에서 저장한 값을 받아보자.

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>index.jsp</title>
    </head>
    <body>
    index.jsp <br>
    ${data} <br>
    </body>
    </html>

     

    여기서는 에러가 발생한다.

    그 이유는 index.jsp 파일이 WEB-INF에 있는 것이 아니라 webapp폴더에 있다.

    이는 WEB-INF폴더로 이동시키면 끝난다.

    서버를 실행시킨 후에, 웹 페이지를 하나 띄우고 아래와 같이 주소를 입력한다.

    localhost:9090/index

    위의 /index는 IndexController의 경로이다.

     

    그리고 web.xml에서 url패턴을 /*에서 /로 변경한다. 이 url패턴에서 /*와 /의 차이점이 있다.

    /는 뭐든지 다 통과시킨다. 모든 파일을 실행시킨다.

    webapp에 있는 모든 파일들을 접근한다.

    dispatcher-servlet.xml에 가서 확인을 한다. /이므로 통과한다.

     

    /*은 전부 걸려내겠다는 의미이다.
    웹 페이지에서 주소 창에 http://localhost:9090/index를 입력하면

    컨트롤러에는 들어오는데, index.jsp파일에는 접근이 불가하다. 

     

    web.xml에서 /*를 /로 변경하고, IndexController에서 함수의 매개변수를 다음과 같이 변경해보자.

    "index.jsp"에서 "/WEB-INF/index.jsp"로 변경한다.

    그리고 index.jsp파일을 WEB-INF폴더로 이동시킨다.

    http://localhost:9090/index 로 주소 입력을 하면 파일을 찾을 수 없다고 나온다.

     

     

     

    아래의 내용을 보도록 하자.

    designatedroom87.tistory.com/341

     

    Spring MVC2 - 2.

    아래의 글을 이어서 시작해보자. designatedroom87.tistory.com/340 New -> Maven Project를 선택하고 Next를 선택한다. create simple project를 체크하고 Next를 선택한다. artifact id는 프로젝트 이름이다. wa..

    designatedroom87.tistory.com

     

    댓글

Designed by Tistory.