본문 바로가기

Spring

Spring 기초

● Spring 기초 1. 개념 정리

[ Spring ]
프레임워크 의 일종.(Enterprises Java Bean : EJB - Spring 최초버전)
모든 라이브러리는 API 중심 (점프 하지 않아도 되도록)

[Spring 과 Servlet의 차이점]
1. Spring 모두 class <=> Servlet Module : Class, Controller : servlet
2. GET 과 POST 에 대한 parameter 값
     - Spring : ①HttpServletRequest, ②인자값, ③DAO(Setter)
     - Servlet : HttpServletRequest
3. Database 연결구조
     - Spring : class, xml(bean), properties
     - Servlet : class, properties
4. MVC 형태
     - Spring : Integer, int, long...(숫자 관련 메소드 외에 모두 사용가능)
     - Servlet : doPost, doGet, doService(Servlet에서 정해진 메소드만 활용)
5. 라이브러리 형태
     - Spring : pom.xml 전체 로드하여 라이브러리 활용
     - Servlet : 직접 프로젝트에 라이브러리를 load해서 사용해야함
6. View 형태
     - Spring : JSP, JSTL
     - Servlet : JSP

[ STS2 와 STS3의 차이점 ]
- STS 2
web client => pom.xml => web.xml => Dispatcher(접속보안, 언어셋, 파일첨부)
=> bean.xml => java class 파일 여러개 웹 파일 (만들떄 마다 bean에 추가해야함)
=>model + view + controller => jsp, jstl, jspx

- STS 3
web client => pom.xml => web.xml => Dispatcher(접속보안, 언어셋, 파일첨부)
=> bean.xml => @Controller 1개+ @RequestMapping
=>model + view + controller => jsp, jstl, jspx
(일일이 java class파일로 만들어서 bean에 추가해줘야했던걸 @RequestMapping으로 줄여줌)

- STS 4
web client => pom.xml => web.xml => Dispatcher+ Properties
=>@Bean + @Controller 1개+ @RequestMapping  
=>model + view + controller => jsp, jstl, jspx
(bean.xml 없애고 @로 로드하는 방식)


[ Spring Dispatcher 역할 ]

기존의 프레임워크는 .java 파일은 class 혹은 sevlet을 쓰임에 따라 따로 생성해줘야했지만 
Spring의  Dispatcher를 사용하는것으로 class 만 만들면 web으로 바로 출력할 수 있게 함 


[ Maven Project, Legacy Project ]

- Maven : 개발자가 모든 라이브러리 부터 모든 XML 까지 직접 구성
- Legacy : 기본적인 Controller  View을 미리 세팅
                 단, 그 외 DB, DAO, Bean, Properties 직접 추가 구성

 

 

 

● Spring 기초 1-1. STS 버전별 구조 차이1 ( STS 3 )

- STS3 방식
⑴ webpage.xml 에서 mainpage.java 를 핸들링
⑵ webpage.xml 구성
    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/mvc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:beans="http://www.springframework.org/schema/beans"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<!-- @를 일반 class 파일에 사용할 수 있도록 하겠다는 것 -->
    <annotation-driven></annotation-driven>
    <resources location="/" mapping="/**"></resources>
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- prefix : view 페이지를 보여줄 경로, suffix : view 페이지 파일 속성명 -->
        <beans:property name="prefix" value="/"></beans:property>
        <beans:property name="suffix" value=".jsp"></beans:property>
    </beans:bean>
    <!-- class를 로드하는 부분(controller) -->
    <beans:bean class="webspring.mainpage"></beans:bean>
    </beans:beans>​

 


⑶ mainpage.java 코드
  - do가 먼저 실행해야 jsp를 불러오는 것

  - 가상 웹 페이지로는 int, Integer, float, long 안됨, ArrayList<Integer> 는 가능
  - void , String , StringBuffer, ModelandView 는 작동 가능함
  - 배열클래스도 작동가능함(ArrayList, List, Map, LinkedList)

 

    @Controller
    public class mainpage {
        //가상의 웹 페이지1
        @RequestMapping("/mainpage.do")
        public void main() {

        }
        //가상의 웹 페이지2
        @RequestMapping("/mainpage2.do")
        public void main2() {
        }
        //가상의 웹 페이지 3
        @RequestMapping("/mainpage3.do")
        public ModelAndView main3() {
            return null;		
        }
        //가상의 웹 페이지 4
        @RequestMapping("/mainpage4.do")
        public ArrayList<Integer> main4() {		
			return null;
		}
    }​
 
⑷ jsp 와 do 파일 연결 방법
  - ⓐ 파란 박스 : 최상위 디렉토리에서 .jsp 파일을 찾아냄
  - ⓑ 빨간 박스 :  ①에 .jsp 를 입력하지 않아도 jsp를 찾음 =>suffix에 .jsp를 썻기 때문에 return에는 jsp를 쓰면 안됨
webpage.xml
mainpage.java

 

⑸ do 에서 data 전송

      ① attribute 로 data 전송
  - spring 은 response 가 없음 (script찍을 때는 사용함 - PrintWriter 사용시, 단 View 페이지는 제작하지 않음)
  - response 를 사용시 JSTL 을 사용하지 못함. 일반 JSP를 사용해야함(Model 사용못함)
결과 출력

∴ STS3 은 Controller 를 @로 불러와서 간편하게 사용가능함

 

 

 

 Spring 기초 1-2. STS 버전별 구조 차이 2 ( STS 2 )

- STS2 방식(sts3이해를 위해)
webpage2.xml 생성
webpage2.xml 에 test.do 올리기
    <?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:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

        <bean id="test.do" class="webspring.test"/>

    </beans>​


test.java 생성
  - do 파일을 먼저 실행 시켜야 jsp 에서 do를 가져올 수 있음 
  - POST. GET 모두 사용가능한 핸들러임 
    public class test implements Controller {
    	//POST, GET을 모두 사용가능한 핸들러임
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, 
        					HttpServletResponse response) throws Exception {
            ModelAndView mv = new ModelAndView();
            mv.setViewName("test.jsp");
            return mv;
        }
    }

∴ 1-1 의 STS3과 비교해서 STS2는 Controller를 implements 해서 Override 시켜서 ModelAndView 사용하여 return 시켜줘야했음 . 
∴ servlet 과 별반 차이 없음


JSTL 형태로 출력해보기
  - do 가 먼저 실행되어야 jsp에서 do를 가져 올 수 있으므로 실행할 때 .jsp 가 아니라 .do를 url에 넣고 실행시켜야함
     ① test.java
    public class test implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, 
        			HttpServletResponse response) throws Exception {
            //Attribute를 보다 쉽게 사용할 수 있도록 변환된 클래스임(Spring 전용)
            ModelAndView mv = new ModelAndView();

            String username = "홍길동";
            int age = 33;
            //해당 변수값 및 key이름으로 배열 형태로 추가 됨
            mv.addObject("username", username);
            mv.addObject("userage", age);
            mv.setViewName("test.jsp");
            return mv;
        }
    }​
     
      ② test.jsp
         - JSTL 형태로 ' ${변수명} ' 를 이용해 출력      
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    Spring view jsp ${username} <!-- jstl형태의 변수값 출력(ModelandView) -->
    <br>
    나이 : ${userage}
    </body>
    </html>

 


     ③ 출력 결과


⑸ Spring에 데이터 전송

     ① 간단하게 data.jsp 생성 (form 형식으로 작성)
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Spring에 데이터 전송</title>
    </head>
    <body>
    <form id="frm" method="post" action="./test.do">
    검색 : <input type="text" name="search"><br>
    <input type="button" value="전송" onclick="abc()">
    </form>
    </body>
    <script>
    function abc() {
        frm.submit();
    }
    </script>
    </html>​

     ② test.java 코드
       - console에 찍히도록 작성
    public class test implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, 
        			HttpServletResponse response) throws Exception {
            //Attribute를 보다 쉽게 사용할 수 있도록 변환된 클래스임(Spring 전용)
            ModelAndView mv = new ModelAndView();
            String search = request.getParameter("search");
            System.out.println(search);
            return mv;
        }
    }
   
      ③ 언어셋 설정 (web.xml에 언어셋 추가)
    <filter>
        <filter-name>encoding</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>encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>​

 

     ④ 콘솔에 잘 뜨면 언어셋 문제 x
 
한글도 문제 없이 잘 뜬다

 

 

'Spring' 카테고리의 다른 글

Database 연결 (Spring)  (0) 2024.07.09
JSTL 사용법  (0) 2024.07.09
Spring 의 Controller  (0) 2024.07.09
웹 경로에서 프로젝트 명 빼기  (0) 2024.07.08
Spring 설치 / 세팅 (Dynamic web project)  (0) 2024.07.08