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 |