SPRING

SPRING View 영역 구현

Adev 2022. 11. 14. 20:00

1. ViewResolver 설정

: springMVC의 화면 설정은 ViewResolver 객체를 통해 이뤄진다.

DispatcherServlet은 ViewResolver를 사용해 Controller가 지정한 View 이름으로부터 응답 결과를 출력할 View 객체를 구한다.
브라우저에서 직접 접근할 수 없는 '/WEB-INF/views' 폴더를 경로로 지정한다.

 

ServletConfig.java - ViewResolver와 static 자원 경로 지정

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {

		InternalResourceViewResolver bean = new InternalResourceViewResolver();
		bean.setViewClass(JstlView.class);
		bean.setPrefix("/WEB-INF/views/");
		bean.setSuffix(".jsp");
		registry.viewResolver(bean);
	}
    
    	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {

		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
	}

 

 

 

1.1 주요 ViewResolver 구현 Class

(파)InternalResourceViewResolver : View 이름으로부터 JSP나 Tiles 연동을 위한 View 객체를 리턴.
VelocityViewResolver : View 이름으로부터 Velocity 연동을 위한 View 객체를 리턴.

 

 

1.2 ViewResolver Interface 정의

public interface ViewResolver{
         View resolveViewName(String viewName, Locale locale) throws Exception;
         }

 

 

1.3 View 객체

ViewResolver는 Controller가 지정한 View 이름으로부터 응답 결과를 출력할 View 객체를 리턴한다. 

 

 

1.4 View Interface 설정

public interface View{
         String RESPONSE_STATUS_ATTRIBUTE = View.clss.getName() + ".responseStatus";
        
         String getContentType(); //응답결과의 컨텐츠 타입을 리턴
         void render(Map<String,?> model, HttpServletRequest request) throws Exception; //응답 결과를 생성
         }

 

 

1.5 InternalResourceViewResolver 설정

: InternalResourceViewResolver Class는 JSP나 HTML 파일과 같이 WEB Application의 내부 Resource을 이용하여 뷰를 생성하는 AbstractUrlBasedView타입의 View 객체를 리턴한다.

 

 

1.6. InternalResourceViewResolver Class 설정

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
p:prefix="/WEB-INF/viewjsp" p:suffix=".jsp">
         </bean>


cf) View 이름이 hello일때 사용하는 Resource 경로 : /WEB-INF/viewjsp/hello.jsp

+ JSTL에서 사용하려면 JstlView Class를 viewClass 프로퍼티로 지정한다.

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
p:viewClass="org.sprinframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/viewjsp" p:suffix=".jsp"/>

 

1.7 BeanNameViewResolver 설정

 

: View 이름과 같은 이름을 갖는 Bean을 View 객체로 사용한다. (주로 커스터 View Class를 View로 사용할 때 쓴다)


View 이름은 download, View Class는 DownloadView일 때 BeanNameViewResolver Class는 아래와 같다.

<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
         <bean id="download" class="madvirus.spring.chap07.view.DownloadView"/>

 

 

1.8 다수의 ViewResolver 설정

DispatcherServlet은 "order" 프로퍼티의 값이 작을수록 우선순위가 높다. 
즉, 값이 더 작은 ViewResolver에게 먼저 View객체를 요청한다.
(InternalResourceViewResolver는 마직막 우선순위로 설정)


ex)

<bean class="org.springframework.web.servlet.view.XmlViewResolver"
            p:location="/WEB-INF/nonHtml-view.xml"
            p:order="0"/>
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            p:prefix="/WEB-INF/viewjsp/"
            p:suffix=".jsp"
            p:order="1"/>

 

 

 

2. HTML 특수 문자 처리 방식 설정

: 각 View 기술과 관련해 Message나 Command 객체의 값을 출력 시 특수 문자 처리 방식을 설정한다.

ex) JSP를 View기술로 사용할 때, HTML에서 '<' 와 '>'는 특수문자이다.

defaultHtmlEscape 컨텍스트 파라미터를 통해 특수문자 처리 여부를 지정한다.
defaultHtmlEscape 컨텍스트 파라미터의 기본값은 true로, 특수문자를 엔티티 Reference로 치환한다.
값이 false라면, 특수문자를 그대로 출력한다.

<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>false</param-value>
</context-param>

 

 

 

3. JSP를 이용한 View 구현

 : InternalResourceViewResolver를 설정해 JSP를 View로 사용한다.

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
         p:prefix="/WEB-INF/viewjsp/"
         p:suffix=".jsp"/>
      </bean>

 


+WEB-INF 하위 디렉터리에 JSP파일을 위치시킴으로써 클라이언트가 JSP에 직접 접근하는 것을 막는다.

 

 

3.1 JSP에서 사용할 수 있는 커스텀 태그

1)  <spring:message> 커스텀 태그

: message 국제화. 

MessageSource로부터 Message를 가져와 출력한다.

 

ex) Message Resource 파일은 코드에 해당하는 Message를 설정하고 있다.

login.form.type=Login Type

<label for="loginType"><spring:message code="login.form.type" /></label>

 

 

2) 폼 관련 커스텀 태그

: spring은 Command 객체의 값을 입력 폼에 출력해주는 JSP 커스텀 태그를 제공한다. 이 태그들을 사용하려면 커스텀 태그 설정이 필요하다.

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

 

  •   <FORM:FROM> 태그
<form:form commandName="커맨드 객체명">
...
</form:form>

속성 -

action : 폼데이터를 전송할 URL 입력

enctype : 전송될 데이터의 인코딩 타입

method : 전송방식

 

metod 속성의 기본값은 "post"이고 action 속성의 기본값은 현재 요청 URL의 값이다.

 

  • <INPUT> 태그

<form:input> : text 타입

<form:password> : password 타입

<form:hidden> : hidden 타입

 

path 속성을 사용해 바인딩 될 커맨드 객체의 프로퍼티를 지정한다.

<form:form commandName="memberInfo">
           		<p>
           			<form:label path="userId">회원 ID</form:label>
           			<form:input path="userId"/>
           			<form:errors path="userId"/>
           		</p>

 

  • <SELECT> 태그

: 선택 옵션을 제공한다.

 

<form:select> : <select>태그 생성

<form:options> : 컬렉션 객체를 이용해 <option>태그 생성 (ex. 컬렉션에 포함되어있지 않은 값을 추가할 때 사용)

<form:option> : 한 개의 <option>태그 생성. value 속성을 사용해 값을 지정한다.

 

 

<form:checkboxs>, <form:checkbox> : 체크박스.

<form:radiobuttons>, <form:radiobutton> : 여러 옵션 중 한가지 선택.

<form:textarea> : 여러 줄을 입력 받는 경우.

CSS 및 HTML 태그와 관련된 속성을 제공한다.

 

3) 에러 Message 출력을 위한 커스텀 태그

<form:errors> : 프로퍼티와 관련된 한 개 이상의 error Message를 출력한다. 

<form:errors path="userId" element="div" delimeter=""/>

 

4) <spring:htmlEscape> 커스텀 태그와 htmlEscape 속성

: JSP 페이지 별로 특수 문자 치환 여부를 설정한다. (WEB Application 전체를 대상으로할 때는 defaulthtmlEscape 컨택스트 파라미터 사용)

 

5) <form:form>의 RESTful 지원

: 데이터 전송 시 GET, POST 방식 뿐만 아니라 PUT, DELETE 방식도 이용할 수 있도록 한다.

'SPRING' 카테고리의 다른 글

HTML 이외의 View 구현  (0) 2022.11.17
SPRING tiles2  (0) 2022.11.16
SPRING Controller Model  (0) 2022.11.13
SPRING View 지정  (0) 2022.11.12
SPRING Controller 구현  (0) 2022.11.11