<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Spring MVC 面試問題與答案 > 原文: [https://howtodoinjava.com/interview-questions/spring-mvc-interview-questions-with-answers/](https://howtodoinjava.com/interview-questions/spring-mvc-interview-questions-with-answers/) 這些 **Spring MVC 面試問題**和答案均已編寫,可幫助您為 [**面試**](https://howtodoinjava.com/java-interview-questions/) 做好準備,并快速地對總體概念進行修訂。 如果有多余的時間,我強烈建議您更深入地研究每個概念。 您知道的越多,您就會越有信心。 ## 什么是 Spring MVC 框架? Spring Web MVC 框架提供 [**MVC 架構**](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) (模型視圖控制器)和現成的組件,這些組件可用于開發靈活且松散耦合的 Web 應用程序。 MVC 模式導致分離應用程序的不同切面(輸入邏輯,業務邏輯和 UI 邏輯),同時在應用程序的模型,視圖和控制器部分之間提供松散的耦合。 與其他 MVC 框架相比,Spring 框架具有許多優勢。 1. **角色明確分開** – 控制器,驗證器,命令對象,表單對象,模型對象,`DispatcherServlet`,處理器映射,視圖解析器等。每個角色都可以由專門的對象來實現。 2. 框架和應用程序類的功能強大且直接的**配置選項**作為 JavaBeans。 3. **可重用的業務代碼** – 無需重復。 您可以將現有業務對象用作命令或表單對象,而不是對其進行鏡像,以擴展特定的框架基類。 4. 可定制的綁定和驗證 5. 可自定義的**處理器映射**和視圖分辨率 6. 可自定義的區域設置和主題解析 7. 在 Spring 2.0 中引入的 JSP 表單標記庫(**FTL**)使在 JSP 頁面中編寫表單變得更加容易。 等等 ## 什么是`DispatcherServlet`和`ContextLoaderListener`? 與許多其他 Web MVC 框架一樣,Spring 的 Web MVC 框架**請求驅動**圍繞一個處理所有 HTTP 請求和響應的中央`Servlet`設計。 Spring 的`DispatcherServlet`所做的不只是這些。 它與 Spring **IoC 容器**完全集成在一起,因此您可以使用 Spring 擁有的所有功能。 收到 HTTP 請求后,`DispatcherServlet`會參考`HandlerMapping`(配置文件)來調用相應的控制器。控制器接收請求并調用適當的服務方法并設置模型數據,然后將視圖名稱返回給`DispatcherServlet`。 `DispatcherServlet`將從`ViewResolver`獲得幫助,以獲取請求的已定義視圖。 一旦視圖完成,`DispatcherServlet`將模型數據傳遞到視圖,該視圖最終在瀏覽器上呈現。 ```java <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 默認情況下,`DispatcherServlet`使用`<servlet_name>-servlet.xml`加載其配置文件。 例如。 對于上面的`web.xml`文件,`DispatcherServlet`將嘗試在類路徑中找到`spring-servlet.xml`文件。 `ContextLoaderListener`讀取 spring 配置文件(在`web.xml`中具有`contextConfigLocation`的值),對其進行解析并加載在該配置文件中定義的 bean。 例如 ```java <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ``` ## Spring MVC 的前端控制器類是什么? **前端控制器**定義為“處理 Web 應用程序所有請求的控制器”。`DispatcherServlet`(實際上是 Servlet)是 Spring MVC 中的前端控制器,它攔截每個請求,然后將請求分派/轉發給適當的控制器。 將 Web 請求發送到 Spring MVC 應用程序時,調度程序 Servlet 首先接收該請求。 然后,它會組織在 Spring 的 Web 應用程序上下文中配置的不同組件(例如,實際的請求處理器控制器和視圖解析器)或控制器本身中存在的注解,這些都是處理請求所需的。 ## 如何使用基于 Java 的配置? 要配置基于 Java 的 MVC 應用程序,請首先添加所需的依賴項。 ```java <!-- Spring MVC support --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.4.RELEASE</version> </dependency> <!-- Tag libs support for view layer --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> <scope>runtime</scope> </dependency> ``` 現在,在`web.xml`文件中添加`DispatcherServlet`條目,以便所有傳入請求僅通過`DispatcherServlet`發出。 ```java <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 現在,在 spring 配置文件中添加以下條目。 ```java <beans> <!-- Scan all classes in this path for spring specific annotations --> <context:component-scan base-package="com.howtodoinjava.demo" /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- Vierw resolver configuration --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` 添加控制器代碼。 ```java @Controller @RequestMapping("/employee-module") public class EmployeeController { @Autowired EmployeeManager manager; @RequestMapping(value = "/getAllEmployees", method = RequestMethod.GET) public String getAllEmployees(Model model) { model.addAttribute("employees", manager.getAllEmployees()); return "employeesListDisplay"; } } ``` 另外,您還應該添加管理器和 Dao 圖層類。 最后,添加 JSP 文件以顯示視圖。 > **閱讀更多: [Spring MVC Hello World 示例](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-hello-world-example/)** ## 我們如何使用 Spring 創建返回 JSON 響應的 Rest Web 服務? 為了在您的 spring 應用程序中添加 **JSON** 支持,您需要在第一步中添加 **Jackson** 依賴項。 ```java <!-- Jackson JSON Processor --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1</version> </dependency> ``` 現在,您準備好從 MVC 控制器返回 JSON 響應。 您要做的就是從方法中返回帶有 JAXB 注解的對象,并在此返回類型上使用`@ResponseBody`注解。 ```java @Controller public class EmployeeRESTController { @RequestMapping(value = "/employees") public @ResponseBody EmployeeListVO getAllEmployees() { EmployeeListVO employees = new EmployeeListVO(); //Add employees return employees; } } ``` 或者,您可以使用`@RestController`注解代替`@Controller`注解。 這將消除使用`@ResponseBody`的需要。 > `@RestController = @Controller + @ResponseBody` 因此,您可以如下編寫上述控制器。 ```java @RestController public class EmployeeRESTController { @RequestMapping(value = "/employees") public EmployeeListVO getAllEmployees() { EmployeeListVO employees = new EmployeeListVO(); //Add employees return employees; } } ``` > **閱讀更多: [Spring REST Hello World JSON 示例](https://howtodoinjava.com/spring/spring-restful/spring-rest-hello-world-json-example/)** ## 我們可以有多個 Spring 配置文件嗎? 是。 您可以有多個 spring 上下文文件。 有兩種方法可以讀取和配置 spring。 * 使用`contextConfigLocation` `param-value`指定`web.xml`文件中的所有文件。 ```java <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> WEB-INF/spring-dao-hibernate.xml, WEB-INF/spring-services.xml, WEB-INF/spring-security.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` * 或者,您可以**將它們導入到已經配置的現有配置文件**中。 ```java <beans> <import resource="spring-dao-hibernate.xml"/> <import resource="spring-services.xml"/> <import resource="spring-security.xml"/> ... //Other configuration stuff </beans> ``` ## `<context:annotation-config>`與`<context:component-scan>`之間的區別? 1. 這兩個標簽之間的第一個大區別是`<context:annotation-config>`用于在應用程序上下文中激活已注冊 bean 中的應用注解。 請注意,bean 是否通過哪種機制注冊都沒有關系,例如使用`<context:component-scan>`或在`application-context.xml`文件本身中定義。 2. 第二差異是由第一差異本身驅動的。 它**將在配置文件中定義的 bean 注冊到上下文中,并且還掃描 bean 內部的注解并激活它們**。 因此,`<context:component-scan>`的作用與`<context:annotation-config>`的作用相同,但它還會掃描軟件包并在應用程序上下文中注冊 Bean。 **`<context:annotation-config>` = 掃描和激活“已注冊的 bean”中的注解。** **`<context:component-scan>` = Bean 注冊 + 掃描并激活注解** > 閱讀更多:[注解配置和組件掃描](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-difference-between-contextannotation-config-vs-contextcomponent-scan/)之間的區別 ## `Component`,`@Controller`,`@Repository` & `@Service`注解之間的區別? 1. `@Component`注解將 Java 類標記為 Bean,因此 spring 的組件掃描機制可以將其拾取并將其拉入應用程序上下文。 要使用此注解,請將其應用于類,如下所示: ```java @Component public class EmployeeDAOImpl implements EmployeeDAO { ... } ``` 2. `@Repository`注解是`@Component`注解的特化,具有相似的用途和功能。 除了將 DAO 導入 DI 容器之外,它還使未經檢查的異常(從 DAO 方法拋出)有資格轉換為 Spring `DataAccessException`。 3. `@Service`注解也是組件注解的特化。 目前,它沒有提供`@Component`注解以外的任何其他行為,但是最好在服務層類中的`@Component`上使用`@Service`,因為它可以更好地指定意圖。 4. `@Controller`注解將一個類標記為 Spring Web MVC 控制器。 它也是`@Component`專長,因此標有它的 bean 將自動導入 DI 容器中。 將`@Controller`注解添加到類時,可以使用另一個注解,即`@RequestMapping`; 將 URL 映射到類的實例方法。 > 閱讀更多: [`@Component`,`@Repository`,`@Service`和`@Controller`注解?](https://howtodoinjava.com/spring/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/) ## `ViewResolver`類是什么? `ViewResolver`是要由可以通過名稱解析視圖的對象實現的接口。 有很多方法可以用來解析視圖名稱。 這些接口的各種內置實現都支持這些方式。 最常用的實現是`InternalResourceViewResolver`類。 它定義`prefix`和`suffix`屬性來解析視圖組件。 ```java <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 因此,使用上述視圖解析器配置,如果控制器方法返回`"login"`字符串,則將搜索并呈現“ `/WEB-INF/views/login.jsp`”文件。 ## 什么是`MultipartResolver`?何時使用? Spring 附帶`MultipartResolver`來處理 Web 應用程序中的**文件上傳**。 Spring 包含兩個具體的實現: 1. 用于 Jakarta 常用文件上傳的`CommonsMultipartResolver` 2. 用于 Servlet 3.0 Part API 的`StandardServletMultipartResolver` 要定義實現,請在`DispatcherServlet`的應用程序上下文中創建一個 ID 為`multipartResolver`的 bean。 這樣的解析器將應用于該`DispatcherServlet`處理的所有請求。 如果`DispatcherServlet`檢測到多部分請求,它將通過配置的`MultipartResolver`解析該請求,并傳遞已包裝的`HttpServletRequest`。 然后,控制器可以將給定的請求投射到`MultipartHttpServletRequest`接口,該接口允許訪問任何`MultipartFiles`。 ## 如何在 Spring MVC 應用程序中上傳文件? 假設我們要使用`CommonsMultipartResolver`,它使用 Apache Commons 上傳庫來處理表單中的文件上傳。 因此,您將需要添加`commons-fileupload.jar`和`commons-io.jar`依賴項。 ```java <!-- Apache Commons Upload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency> <!-- Apache Commons Upload --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> ``` 需要在應用程序上下文文件中進行以下聲明以啟用`MultipartResolver`(以及在應用程序中包括必要的 jar 文件): ```java <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- one of the properties available; the maximum file size in bytes --> <property name="maxUploadSize" value="100000"/> </bean> ``` 現在創建模型類`FileUploadForm`,它將保存從 HTML 表單提交的多部分數據。 ```java import org.springframework.web.multipart.MultipartFile; public class FileUploadForm { private MultipartFile file; public MultipartFile getFile() { return file; } public void setFile(MultipartFile file) { this.file = file; } } ``` 現在創建`FileUploadController`類,它將實際處理上傳邏輯。 ```java import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import com.howtodoinjava.form.FileUploadForm; @Controller public class FileUploadController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public String save(@ModelAttribute("uploadForm") FileUploadForm uploadForm, Model map) { MultipartFile multipartFile = uploadForm.getFile(); String fileName = "default.txt"; if (multipartFile != null) { fileName = multipartFile.getOriginalFilename(); } //read and store the file as you like map.addAttribute("files", fileName); return "file_upload_success"; } } ``` 上傳的 JSP 文件如下所示: ```java <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html> <body> <h2>Spring MVC file upload example</h2> <form:form method="post" action="save.html" modelAttribute="uploadForm" enctype="multipart/form-data"> Please select a file to upload : <input type="file" name="file" /> <input type="submit" value="upload" /> <span><form:errors path="file" cssClass="error" /></span> </form:form> </body> </html> ``` ## Spring MVC 如何提供驗證支持? Spring 主要通過兩種方式支持驗證。 1. 使用 **JSR-303 注解**和任何參考實現,例如 **Hibernate 驗證器** 2. 使用`org.springframework.validation.Validator`接口的自定義實現 在下一個問題中,您將看到一個如何在 Spring MVC 應用程序中使用驗證支持的示例。 ## 如何在 Spring Web MVC 框架中驗證表單數據? Spring MVC 通過實現`Validator`接口的驗證器對象來支持驗證。 您需要創建一個類并實現`Validator`接口。 在此定制驗證器類中,您可以使用`ValidationUtils`類中的實用程序方法,例如`rejectIfEmptyOrWhitespace(`和`rejectIfEmpty()`來驗證所需的表單字段。 ```java @Component public class EmployeeValidator implements Validator { public boolean supports(Class clazz) { return EmployeeVO.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "error.firstName", "First name is required."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "error.lastName", "Last name is required."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "error.email", "Email is required."); } } ``` 如果任何表單字段為空,則這些方法將創建一個字段錯誤并將其綁定到該字段。 這些方法的第二個參數是屬性名稱,而第三個和第四個是錯誤代碼和默認錯誤消息。 要將此自定義驗證器激活為 spring 托管 bean,您需要執行以下操作之一: 1. 將`@Component`注解添加到`EmployeeValidator`類,并在包含此類聲明的包上激活注解掃描。 ```java <context:component-scan base-package="com.howtodoinjava.demo" /> ``` 2. 或者,您可以直接在上下文文件中注冊驗證器類 Bean。 ```java <bean id="employeeValidator" class="com.howtodoinjava.demo.validator.EmployeeValidator" /> ``` > **閱讀更多:Spring MVC [自定義驗證器](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-custom-validator-example/)和[ JSR-303 注解](https://howtodoinjava.com/spring/spring-mvc/spring-bean-validation-example-with-jsr-303-annotations/)示例** ## 什么是 Spring MVC 攔截器以及如何使用? 如您所知,Servlet 過濾器可以在它們處理的每個 Web 請求之前和之后對它進行預處理和后處理。 以類似的方式,您可以在 spring mvc 應用程序中使用`HandlerInterceptor`接口對由 Spring MVC 控制器處理的 Web 請求進行預處理和后處理。 這些處理器通常用于操作返回/提交的模型屬性,并將它們傳遞給視圖/控制器。 可以為特定的 URL 映射注冊處理器攔截器,因此它僅攔截映射到某些 URL 的請求。 每個處理器攔截器都必須實現`HandlerInterceptor`接口,該接口包含三種回調方法供您實現:`preHandle()`,`postHandle()`和`afterCompletion()`。 `HandlerInterceptor`接口的問題在于,無論是否需要,新類都必須實現所有三種方法。 為避免覆蓋,可以使用`HandlerInterceptorAdapter`類。 此類實現`HandlerInterceptor`并提供默認的空白實現。 > **閱讀更多: [Spring MVC 攔截器示例](https://howtodoinjava.com/spring/spring-mvc/spring-intercepting-requests-using-handlerinterceptor-with-example/)** ## 如何在 Spring MVC 框架中處理異常? 在 Spring MVC 應用程序中,可以在 Web 應用程序上下文中注冊一個或多個**異常**解析器 bean,以解決未捕獲的異常。 這些 Bean 必須為`DispatcherServlet`實現`HandlerExceptionResolver`接口才能自動檢測它們。 Spring MVC 附帶了一個簡單的異常解析器,您可以將每種類別的異常映射到一個視圖,即`SimpleMappingExceptionResolver`以一種可配置的方式將每種類別的異常映射到一個視圖。 假設我們有一個異常類,即`AuthException`。 而且,我們希望每次將此異常從任何地方拋出到應用程序中時,我們都希望顯示一個預定的視圖頁面`/WEB-INF/views/error/authExceptionView.jsp`。 這樣配置就可以了。 ```java <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="com.howtodoinjava.demo.exception.AuthException"> error/authExceptionView </prop> </props> </property> <property name="defaultErrorView" value="error/genericView"/> </bean> ``` 可以將`defaultErrorView`屬性配置為顯示所有未在`exceptionMappings`列表中配置的其他異常的通用消息 。 > **閱讀更多: [Spring MVC `SimpleMappingExceptionResolver`示例](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-simplemappingexceptionresolver-example/)** ## 如何在 Spring MVC 應用程序中實現本地化? Spring 框架隨`LocaleResolver`一起提供,以支持**國際化**,從而也支持**本地化**。 為了使 Spring MVC 應用程序支持國際化,您將需要注冊兩個 bean。 1. `SessionLocaleResolver`:它通過檢查用戶會話中的預定義屬性來解析語言環境。 如果會話屬性不存在,則此語言環境解析器從接受語言 HTTP 標頭中確定默認語言環境。 ```java <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="en" /> </bean> ``` 2. `LocaleChangeInterceptor`:此攔截器檢測當前 HTTP 請求中是否存在特殊參數。 可以使用此攔截器的`paramName`屬性自定義參數名稱。 如果當前請求中存在此類參數,則此攔截器會根據參數值更改用戶的語言環境。 ```java <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang" /> </bean> <!-- Enable the interceptor --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="localeChangeInterceptor" /> </list> </property> </bean> ``` 下一步是讓每個特定于語言環境的屬性文件都具有該特定于語言環境的語言的文本,例如 `messages.properties`和`messages_zh_CN.properties`等 > **閱讀更多: [Spring MVC 本地化(i10n)示例](https://howtodoinjava.com/spring/spring-mvc/spring-mvc-internationalization-i18n-and-localization-i10n-example/)** ## 如何在 Spring Bean 中獲取`ServletContext`和`ServletConfig`對象? 只需實現`ServletContextAware`和`ServletConfigAware`接口并覆蓋以下方法。 ```java @Controller @RequestMapping(value = "/magic") public class SimpleController implements ServletContextAware, ServletConfigAware { private ServletContext context; private ServletConfig config; @Override public void setServletConfig(final ServletConfig servletConfig) { this.config = servletConfig; } @Override public void setServletContext(final ServletContext servletContext) { this.context = servletContext; } //other code } ``` ## 如何在 Spring Web 應用中使用 Tomcat JNDI 數據源? 對于使用已配置 **JNDI** `DataSource`的 servlet 容器,我們需要在 spring bean 配置文件中對其進行配置,然后將其作為依賴項注入 spring bean。 然后,我們可以將其與`JdbcTemplate`一起使用來執行數據庫操作。 ```java <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/MySQLDB"/> </bean> ``` ## 您如何將 Spring MVC 框架與三層架構聯系起來? > 3 層是體系結構樣式,MVC 是設計模式。 [![3 tier architecture with mvc part of it](https://img.kancloud.cn/59/72/5972d8549b551f9c160ab2b1ae72bfef_465x342.jpg)](https://howtodoinjava.com/wp-content/uploads/2015/02/3-tier-architechture-with-mvc-part-of-it.png) 在較大的應用程序中,MVC 僅是 **3 層體系結構**的**表示層**。 模型,視圖和控制器僅與表示有關,并利用中間層用來自數據層的數據填充模型。 請分享您可能遇到的其他其他 Spring MVC 面試問題。 因此,我可以在本文中包括那些 **Spring MVC 面試問題**,以使其他人受益。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看