javascript
spring多个视图解析器_在Spring中配置多个View解析器
spring多個視圖解析器
1.簡介
在Spring中,提供了View Resolver來使用模型中可用的數據來解析視圖,而無需與JSP,Velocity或Thymeleaf等View技術緊密綁定。 Spring可以根據需要輕松靈活地配置一個或多個View Resolver 。
2. Spring MVC應用程序流程
在繼續理解多個View Resolver如何達到目的之前,讓我們快速回顧一下Spring MVC應用程序流程 。
3.實施
讓我們從pom依賴關系開始。
pom.xml
<!-- Spring 3 dependencies --> <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version> </dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version> </dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version> </dependency><!-- Jackson JSON Mapper --> <dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>${jackson.version}</version> </dependency><!-- JSTL Dependency --> <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version> </dependency>web.xml的更改不多。
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>MultipleViewResolversExample</display-name><servlet><servlet-name>mvc-dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>mvc-dispatcher</servlet-name><url-pattern>/API/*</url-pattern></servlet-mapping></web-app>這是mvc-dispatcher-servlet,其中定義了多個視圖解析器 。
mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><mvc:annotation-driven /><context:component-scan base-package="com.jcombat.controller" /><!-- Bean View Resolver --><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="0" /></bean><!-- JSP View Resolver --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix"><value>/WEB-INF/</value></property><property name="suffix"><value>.jsp</value></property><property name="order" value="1" /></bean><bean name="jsonView"class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></beans>請注意,配置的兩個視圖解析器是InternalResourceViewResolver和BeanNameViewResolver 。 我們還使用View Resolver的order屬性設置了優先級。 因此, BeanNameViewResolver具有更高的優先級。 這意味著,當返回ModelAndView對象時, BeanNameViewResolver會使用返回的視圖名稱檢查可用的bean視圖。 如果找到匹配的bean視圖,則將其呈現。 如果不是,則進入下一個View Resolver,即InternalResourceViewResolver ,并類似地檢查ModelAndView返回的具有視圖名稱的JSP。 如果找到,則呈現視圖。 但是,如果沒有,并且層次結構中沒有更多視圖解析器,則會引發適當的異常。
繼續實現,我們擁有與最近使用的相同的Employee實體類。
Employee.java
package com.jcombat.bean;public class Employee {private String empId;private String name;public String getEmpId() {return empId;}public void setEmpId(String empId) {this.empId = empId;}public String getName() {return name;}public void setName(String name) {this.name = name;} }現在讓我們寫下EmployeeController 。
EmployeeController.java
package com.jcombat.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView;import com.jcombat.bean.Employee;@Controller @RequestMapping(value = "/Employee") public class EmployeeController {@RequestMapping(value = "/{name}/{empId}", method = RequestMethod.GET)public ModelAndView process(@PathVariable("name") String name,@PathVariable("empId") String empId) {ModelAndView modelAndView = new ModelAndView();Employee employee = new Employee();employee.setEmpId(empId);employee.setName(name);modelAndView.setViewName("employeeDetails");modelAndView.addObject("employee", employee);return modelAndView;} }現在,我們確保具有視圖名稱– employeeDetails的JSP存在。
employeeDetails.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Via JSP View Resolver</title></head><body><!-- Retrieve the model data through JSTL --><p>${employee.empId}</p><p>${employee.name}</p></body> </html>4.運行應用程序
當我們運行該應用程序時,將看到以下內容。
注意,我們沒有名稱為employeeDetails的任何bean視圖,而是與實際的JSP視圖文件employeeDetails.jsp匹配。 因此,視圖被解析為JSP。
現在,讓我們將視圖名稱返回為jsonView ,在controller方法中修改以下語句。
modelAndView.setViewName("jsonView");BeanNameViewResolver的優先級更高,這次將找到名稱為jsonView的bean視圖,并且不再呈現JSP視圖,而是使用相同的URI返回JSON 。
5.下載源代碼
- 下載源代碼
翻譯自: https://www.javacodegeeks.com/2016/03/configure-multiple-view-resolvers-spring.html
spring多個視圖解析器
總結
以上是生活随笔為你收集整理的spring多个视图解析器_在Spring中配置多个View解析器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为Mate60 RS UD今日亮相:采
- 下一篇: ddos页端源码(ddos页端sql)