<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Spring MVC Hello World 示例 > 原文: [https://howtodoinjava.com/spring-mvc/spring-mvc-hello-world-example/](https://howtodoinjava.com/spring-mvc/spring-mvc-hello-world-example/) 在此示例中,我們將使用 [**Spring MVC**](https://howtodoinjava.com/category/frameworks/java-spring-tutorials/spring-mvc/) 框架構建一個 Hello World Web 應用程序。 Spring MVC 是 [**Spring**](https://howtodoinjava.com/java-spring-framework-tutorials/) 框架的最重要模塊之一。 它基于功能強大的 Spring [**IoC 容器**](https://howtodoinjava.com/spring/spring-core/different-spring-3-ioc-containers-with-example/) 構建,并廣泛使用了容器功能以簡化其配置。 ```java Table Of Contents What is MVC Framework? Dispatcher Servlet (Spring Controller) Spring MVC Hello World Example Runtime Dependencies Configuration Files web.xml and spring-servlet.xml Request Handler EmployeeController.java View Model EmployeeVO.java Dao Classes Service layer Classes View employeesListDisplay.jsp ``` [下載源碼](https://drive.google.com/file/d/0B7yo2HclmjI4WTk4NzVVenRHS2c/view?usp=sharing) ## 什么是 MVC 框架? [**模型視圖控制器(MVC)**](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) 是眾所周知的 [**設計模式**](https://howtodoinjava.com/category/design-patterns/) ,用于設計基于 UI 的應用程序。 它主要通過在應用程序中分離**模型,視圖和控制器**的角色來將業務邏輯與 UI 分離。 通常,模型負責封裝應用程序數據以呈現視圖。 視圖僅應顯示此數據,而不包括任何業務邏輯。 控制器負責接收來自用戶的請求并調用后端服務(管理器或 dao)進行業務邏輯處理。 處理后,后端服務可能會返回一些數據以供視圖顯示。 控制器收集這些數據并準備模型以供視圖顯示。 MVC 模式的核心思想是將業務邏輯與 UI 分開,以允許它們獨立更改而不會互相影響。 ![mvc-architecture](https://img.kancloud.cn/8d/e0/8de07902dc0ea814b5bc8054279d43a8_440x347.jpg) 在 Spring MVC 應用程序中,模型通常由 POJO 對象組成,這些對象由服務層處理并由持久層持久化。 視圖通常是使用 [Java 標準標記庫(JSTL)](https://jstl.java.net/)編寫的 JSP 模板。 控制器部分由調度程序 servlet 扮演,我們將在本教程中詳細了解。 一些開發人員將服務層和 DAO 層類視為 MVC 中模型組件的一部分。 我對此有不同的看法。 我不認為服務層和 DAO 層類是 MVC 框架的一部分。 通常,Web 應用程序是 3 層體系結構,即數據服務表示。MVC 實際上是表示層的一部分。 ![3 tier architecture with mvc part of it](https://img.kancloud.cn/59/72/5972d8549b551f9c160ab2b1ae72bfef_465x342.jpg) ## 分派器 Servlet(Spring 控制器) 在最簡單的 Spring MVC 應用程序中,控制器是您唯一需要在 Java Web 部署描述符(即`web.xml`文件)中配置的 servlet。 一個 Spring MVC 控制器(通常稱為[分派器 Servlet](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html))實現[前端控制器](https://en.wikipedia.org/wiki/Front_Controller_pattern)設計模式,每個 Web 請求都必須經過它,以便它可以管理整個請求生命周期。 將 Web 請求發送到 Spring MVC 應用程序時,調度程序 Servlet 首先接收該請求。 然后,它會組織在 Spring 的 Web 應用程序上下文中配置的不同組件(例如,實際的請求處理器控制器和視圖解析器)或控制器本身中存在的注解,這些都是處理請求所需的。 ![Spring dispatcher servlet](https://img.kancloud.cn/3c/7b/3c7be82f1229cbd45e01ce5c668eb007_549x386.jpg) Spring 分派器 servlet 要在 Spring 3.0 中定義控制器類,必須使用[`@Controller`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Controller.html)注解標記一個類。 當帶`@Controller`的帶注解的控制器接收到請求時,它將尋找適當的處理器方法來處理該請求。 這要求控制器類通過一個或多個處理器映射將每個請求映射到一個處理器方法。 為此,控制器類的方法用[`@RequestMapping`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html)注解修飾,使其成為處理器方法。 處理器方法處理完請求后,它將控制權委派給一個視圖,該視圖表示為處理器方法的返回值。 為了提供一種靈活的方法,處理器方法的返回值并不代表視圖的實現,而是邏輯視圖,即沒有任何文件擴展名。 您可以將這些邏輯視圖正確地映射到`applicationContext`文件中,這樣就可以輕松更改視圖層代碼,甚至無需觸摸請求處理器類代碼。 [視圖解析器](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/ViewResolver.html)負責為邏輯名稱解析正確的文件。 根據視圖實現的設計,控制器類將視圖名稱解析為視圖實現后,便會呈現對象。 ## Spring MVC Hello World 示例 在此應用程序中,我將創建僅具有一項功能的最簡單的**員工管理應用程序**演示,即列出系統中所有可用的員工。 讓我們記下該應用程序的目錄結構。 ![Spring mvc hello world directory structure](https://img.kancloud.cn/70/8a/708ae8e8538206956490189247275a54_419x566.jpg) Spring mvc hello world 目錄結構 現在,將所有涉及的文件寫入此 hello world 應用程序中。 `pom.xml` 在`pom.xml`下面的文件包含 spring mvc 的依賴項和用于編寫 jsp 文件的 taglibs 支持。 ```java <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.howtodoinjava.demo</groupId> <artifactId>springmvcexample</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>springmvcexample Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 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> </dependencies> <build> <finalName>springmvcexample</finalName> </build> </project> ``` `web.xml` 這個最小的`web.xml`文件聲明了一個 servlet(即調度程序 servlet)來接收所有類型的請求。 調度程序 servlet 在這里充當前端控制器。 ```java <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring Web MVC Hello World 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> ``` **`spring-servlet.xml`(也可以有 `applicationContext.xml`)** 我們在請求處理器,服務和 dao 層上使用帶注解的類,因此我已對基本包“ `com.howtodoinjava.demo`”中的所有類文件啟用了注解處理。 ```java <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" xsi:schemaLocation="http://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"> <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" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` `EmployeeController.java` 類級別和方法級別的注解`@RequestMapping`確定將在其中調用方法的 URL。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.howtodoinjava.demo.service.EmployeeManager; @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"; } } ``` > **閱讀更多:[如何使用`@Component`,`@Repository`,`@Service`和`@Controller`注解?](https://howtodoinjava.com/spring/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/)** `EmployeeVO.java` 此類充當 MVC 模式的模型。 ```java package com.howtodoinjava.demo.model; import java.io.Serializable; public class EmployeeVO implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String firstName; private String lastName; //Setters and Getters @Override public String toString() { return "EmployeeVO [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]"; } } ``` `EmployeeDAO.java` 三層體系結構中第三層的類。 負責與基礎數據庫存儲進行交互。 ```java import java.util.List; import com.howtodoinjava.demo.model.EmployeeVO; public interface EmployeeDAO { public List<EmployeeVO> getAllEmployees(); } ``` `EmployeeDAOImpl.java` ```java import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Repository; import com.howtodoinjava.demo.model.EmployeeVO; @Repository public class EmployeeDAOImpl implements EmployeeDAO { public List<EmployeeVO> getAllEmployees() { List<EmployeeVO> employees = new ArrayList<EmployeeVO>(); EmployeeVO vo1 = new EmployeeVO(); vo1.setId(1); vo1.setFirstName("Lokesh"); vo1.setLastName("Gupta"); employees.add(vo1); EmployeeVO vo2 = new EmployeeVO(); vo2.setId(2); vo2.setFirstName("Raj"); vo2.setLastName("Kishore"); employees.add(vo2); return employees; } } ``` `EmployeeManager.java` 3 層體系結構中第二層的類。 負責與 DAO 層進行交互。 ```java import java.util.List; import com.howtodoinjava.demo.model.EmployeeVO; public interface EmployeeManager { public List<EmployeeVO> getAllEmployees(); } ``` `EmployeeManagerImpl.java` ```java import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.howtodoinjava.demo.dao.EmployeeDAO; import com.howtodoinjava.demo.model.EmployeeVO; @Service public class EmployeeManagerImpl implements EmployeeManager { @Autowired EmployeeDAO dao; public List<EmployeeVO> getAllEmployees() { return dao.getAllEmployees(); } } ``` `employeeListDisplay.jsp` 該 jsp 用于顯示系統中的所有員工。 它循環遍歷員工集合,并將其詳細信息打印在表中。 這適合 MVC 模式的視圖層。 ```java <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>Spring MVC Hello World</title> </head> <body> <h2>All Employees in System</h2> <table border="1"> <tr> <th>Employee Id</th> <th>First Name</th> <th>Last Name</th> </tr> <c:forEach items="${employees}" var="employee"> <tr> <td>${employee.id}</td> <td>${employee.firstName}</td> <td>${employee.lastName}</td> </tr> </c:forEach> </table> </body> </html> ``` 現在將應用程序部署到您的應用程序服務器中(我正在使用 tomcat 7)。 并點擊 URL `http://localhost:8080/springmvcexample/employee-module/getAllEmployees`。 如果正確配置了所有內容,則會在下面的屏幕上看到。 ![Application front UI](https://img.kancloud.cn/76/03/760304d4a070e90cc056df273acb4033_329x201.jpg) 應用前端 UI [下載源碼](https://drive.google.com/file/d/0B7yo2HclmjI4WTk4NzVVenRHS2c/view?usp=sharing) 如果某些內容不適合您或在本教程中不清楚,請給我留言。 **祝您學習愉快!**
                  <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>

                              哎呀哎呀视频在线观看