참고: 기사의 모든 내용은 실습 튜토리얼 [Spring MVC Simple Tutorial]에서 발췌했습니다.
Spring MVC는 SpringFrameWork의 후속 제품으로 Spring Web Flow에 통합되었습니다. 강력하고 유연한 웹 프레임입니다. Spring MVC는 요청을 전달하기 위한 프런트엔드 컨트롤러로 DispatcherServlet을 제공합니다. 전략 인터페이스를 통해 Spring 프레임워크는 고도로 구성 가능합니다. Spring MVC에는 JSP(Java Server Pages), Velocity, Tiles, iText, POI 등과 같은 다양한 뷰 기술도 포함되어 있습니다. Spring MVC는 컨트롤러, 모델 객체, 디스패처 및 핸들러 객체의 역할을 분리하여 사용자 정의를 더 쉽게 만듭니다.
Spring MVC 프레임워크는 크게 DispatcherServlet, 프로세서 매퍼, 프로세서 어댑터, 프로세서(컨트롤러), 뷰 리졸버, 뷰로 구성됩니다.
Spring MVC의 고급 요청 처리 워크플로는 다음과 같습니다(Spring 공식 웹사이트 사진).
분석 후 Spring MVC 실행 프로세스는 다음과 같습니다. 총계:
Spring MVC 관련 인터페이스 설명:
(1) DispatcherServlet
프론트엔드 컨트롤러를 통해 모든 요청이 균일하게 분배되며 해당 핸들러에 요청이 분배됩니다.
(2) HandlerMapping(프로세서 매퍼)
요청 링크를 구문 분석한 후, 요청 링크를 기반으로 요청을 실행하는 클래스(HandlerMapping이라는 핸들러)를 찾습니다.
(3) HandlerAdapter(프로세서 어댑터)
사용자의 요청을 처리하기 위해 특정 메서드를 호출합니다.
(4) Controller
Controller는 사용자 요청을 처리한 후 ModelAndView 개체를 DispatcherServlet 프런트 엔드 컨트롤러에 반환합니다.
거시적 관점에서 DispatcherServlet은 미시적 관점에서 전체 웹 애플리케이션의 컨트롤러이고, Controller는 단일 Http 요청을 처리하는 컨트롤러입니다.
(5) ViewResolver(뷰 리졸버)
Resolve MdoelAndView, MdoelAndView의 논리적 뷰 이름을 실제 View 개체로 변경하고 MdoelAndView의 Model을 꺼냅니다.
앞서 Spring MVC에 대해 간략하게 소개한 적이 있는데, Spring MVC의 기본 원리와 응용을 이해하기 위해 간단한 사용자 등록을 예로 들어보자.
Spring MVC 관련 파일은 실험 환경 데스크톱에서 Xfce를 열고 다음 코드를 입력하여 얻습니다.
wget
다음 명령을 입력하여 .zip 파일의 압축을 풉니다.
unzip Spring-jars.zip
Eclipse에서 새 웹 프로젝트(동적 웹 프로젝트)를 생성하고 이름을 SpringMVCTest 코드>. <code>SpringMVCTest
。
注意勾选 “自动生成 web.xml” 这个选项。
将 /home/shiyanlou/Spring-jars/
路径下的全部 jar 包拷贝到项目的 WebContent/WEB-INF/lib/
目录下。
修改 web.xml 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <display-name>SpringMVCTest</display-name> <!-- 配置 Spring MVC DispatchcerServlet 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- contextConfigLocation 是参数名称,该参数的值包含 Spring MVC 的配置文件路径 --> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <!-- 在 Web 应用启动时立即加载 Servlet --> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet 映射声明 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 监听当前域的所有请求 --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 添加 register.jsp 为首页 --> <welcome-file-list> <welcome-file>register.jsp</welcome-file> </welcome-file-list> </web-app>
在 web.xml 中配置了 DispatchcerServlet
,DispatchcerServlet 加载时需要一个 Spring MVC 的配置文件,默认会去 WEB-INF
下查找对应的 [servlet-name]-servlet.xml
文件,如本例中默认查找的是 springmvc-servlet.xml
。
Spring MVC 的配置文件可以放在任何地方,用 servlet 的子元素 init-param
描述即可,见上述示例代码,这时 DispatchcerServlet 就会去查找 /WEB-INF/springmvc-config.xml
。
在 WebContent/WEB-INF/
目录下新建 Spring MVC 配置文件 springmvc-config.xml
,配置 Spring MVC 的 Controller,添加如下代码:
<?xml version="1.0" encoding="UTF-8"?> <beans> <annotation-config></annotation-config> <!-- 配置自动扫描的包,完成 Bean 的创建和自动依赖注入的功能 --> <component-scan></component-scan> <!-- 这两个类用来配置 annotation 类型的处理器映射器和处理器适配器 --> <bean></bean> <bean></bean> <!-- 配置视图解析器 --> <bean> <property></property> <property></property> </bean> </beans>
上述配置文件中, Spring 使用了扫描机制查找应用程序所有基于注解的控制器类,在本例中,扫描的是 com.shiyanlou.springmvc.controller
"web.xml 자동 생성"
옵션을 확인하세요. 🎜🎜/home/shiyanlou/Spring-jars/
경로에 있는 모든 jar 패키지를 프로젝트의 WebContent/WEB-INF/lib/
디렉터리에 복사하세요. 🎜🎜🎜🎜2 구성 web.xml 파일🎜🎜web.xml 파일의 내용을 다음과 같이 수정하세요.🎜package com.shiyanlou.springmvc.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String username; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }🎜web.xml에서
DispatchcerServlet
을 구성하세요. DispatchcerServlet은 기본적으로 로드 시 Spring MVC 구성 파일이 필요합니다. WEB -INF
로 이동하여 해당 [servlet-name]-servlet.xml
파일을 검색하세요. 이 예에서 기본 검색은 springmvc-servlet입니다. xml
. 🎜🎜Spring MVC 구성 파일은 어디에나 배치할 수 있습니다. 서블릿 하위 요소 init-param
를 사용하여 설명하면 됩니다. 위의 샘플 코드를 참조하면 DispatchcerServlet이 /WEB-INF를 검색합니다. /springmvc-config.xml
. 🎜🎜3 springmvc-config.xml 파일🎜🎜 WebContent/WEB-INF/
디렉토리에 새로운 Spring MVC 구성 파일 springmvc-config.xml
을 생성하여 Spring을 구성합니다. MVC 컨트롤러에 다음 코드를 추가합니다. 🎜package com.shiyanlou.springmvc.controller; 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 com.shiyanlou.springmvc.entity.User; /** * UserController 是一个基于注解的控制器 * 可以同时处理多个请求动作 */ @Controller public class UserController { /** * RequestMapping 用来映射一个请求和请求的方法 * value="/register" 表示请求由 register 方法进行处理 */ @RequestMapping(value="/register") public String Register(@ModelAttribute("form") User user, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象 // 在 model 中添加一个名为 "user" 的 user 对象 model.addAttribute("user", user); // 返回一个字符串 " success" 作为视图名称 return "success"; } }🎜위 구성 파일에서 Spring은 스캔 메커니즘을 사용하여 애플리케이션의 모든 주석 기반 컨트롤러 클래스를 찾습니다. 이 경우 스캔은
com.shiyanlou.springmvc입니다. 컨트롤러
패키지 및 해당 하위 패키지 아래의 모든 Java 파일입니다. 🎜🎜애나테이션 유형 프로세서 매퍼 DefaultAnnotationHandlerMapping과 프로세서 어댑터 AnnotationMethodHandlerAdapter가 동시에 구성됩니다. DefaultAnnotationHandlerMapping은 요청에 따라 매핑을 찾고 AnnotationMethodHandlerAdapter는 컨트롤러 클래스의 @RequestMapping 주석 메서드(아래 설명)에 대한 호출을 완료합니다. 🎜最后配置的视图解析器 InternalResourceViewResolver 用来解析视图,将 View 呈现给用户。视图解析器中配置的 prefix
表示视图的前缀, suffix
表示视图的后缀。
注:在 Spring4.0 之后,如果不配置处理映射器、处理器适配器和视图解析器,会使用默认的。
在项目目录 /Java Resources/src
的包 com.shiyanlou.springmvc.entity
下新建类 User.java
,包含 id、username、password 和 age 属性,代码如下:
package com.shiyanlou.springmvc.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String username; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
在包 com.shiyanlou.springmvc.controller
下新建 Controller 类 UserController.java
,具体解释注释已经给出,代码如下:
package com.shiyanlou.springmvc.controller; 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 com.shiyanlou.springmvc.entity.User; /** * UserController 是一个基于注解的控制器 * 可以同时处理多个请求动作 */ @Controller public class UserController { /** * RequestMapping 用来映射一个请求和请求的方法 * value="/register" 表示请求由 register 方法进行处理 */ @RequestMapping(value="/register") public String Register(@ModelAttribute("form") User user, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象 // 在 model 中添加一个名为 "user" 的 user 对象 model.addAttribute("user", user); // 返回一个字符串 " success" 作为视图名称 return "success"; } }
(1)register.jsp
在 WebContent
目录下新建一个 JSP 页面命名为 register.jsp,代码如下:
nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <meta> <title>register page</title>
(2)success.jsp
在 WebContent/WEB-INF
目录下新建文件夹 views
,并在该路径下新建一个 JSP 页面命名为 success.jsp,代码如下:
nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <meta> <title>success page</title> <h5>login was successful</h5> <p> name:${requestScope.user.username}<br> password:${requestScope.user.password}<br> age:${requestScope.user.age}<br> </p>
注:由于在线环境的资源问题,这里启动 tomcat 比较慢,需要大家耐心等待几分钟。如果遇到 Tomcat 启动超时的问题,请按照下图的方法延长 Tomcat 的启动时间。
右击 SpringMVCTest 工程,Run As->Run on Server,保持默认选项不变,点击 Finish,一会儿即可看到结果:
输入注册信息,点击注册按钮,结果如下:
위 내용은 Spring MVC 소개 및 소개 예제(그림과 텍스트로 자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!