Spring MVC 是一种基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,它为开发 Web 应用提供了强大而灵活的解决方案。本文将通过一个简单的 Spring MVC 入门案例,详细介绍其工作流程,帮助读者深入理解 Spring MVC 的运行机制。
在开始编写代码之前,我们需要准备好开发环境。本案例使用 Maven 进行项目管理,因此需要在 pom.xml 中添加必要的依赖。以下是 pom.xml 的代码:
4.0.0
com.qcby
01
war
1.0-SNAPSHOT
01 Maven Webapp
http://maven.apache.org
5.3.23
4.0.1
2.3.3
4.13.2
org.springframework
spring-context
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
javax.servlet
javax.servlet-api
${servlet.api.version}
provided
javax.servlet.jsp
javax.servlet.jsp-api
${jsp.api.version}
provided
junit
junit
${junit.version}
test
01
这些依赖包含了 Spring 框架、Servlet API、JSP API 以及测试所需的 JUnit 库。
web.xml
配置web.xml 是 Web 应用的核心配置文件,主要用于配置 Servlet、过滤器等。以下是 web.xml 的代码:
Spring MVC Application
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
*.do
contextConfigLocation
指定其配置文件为 springmvc.xml
。.do
结尾的请求映射到 DispatcherServlet
。springmvc.xml
配置springmvc.xml 是 Spring MVC 的配置文件,主要用于启用注解驱动、配置组件扫描和视图解析器。以下是 springmvc.xml 的代码:
@Controller
、@RequestMapping
等。@Controller
等注解的组件。控制器是 Spring MVC 中处理请求的核心组件,负责接收请求、处理业务逻辑并返回视图。以下是 HelloController.java 的代码:
package cn.tx.demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
@Controller
@RequestMapping("say")
public class HelloController {
@RequestMapping(path = "hello.do", method = RequestMethod.GET, params = "username")
public String sayHello(String username) {
try {
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println("入门方法执行了2...");
out.println(username);
} catch (UnsupportedEncodingException e) {
System.out.println("入门方法执行了2...");
}
return "suc";
}
}
@Controller
注解:将该类标记为控制器,Spring 容器会自动扫描并注册该类。@RequestMapping
注解:用于映射请求路径和请求方法。这里将 /say/hello.do
的 GET 请求映射到 sayHello
方法,并且要求请求参数中包含 username
。sayHello
方法:接收 username
参数,打印相关信息,并返回逻辑视图名 suc
。index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
入门程序
<%--超链接--%>
入门
入门程序
该页面提供了一个表单和一个超链接,用于向 HelloController
发送请求。
5.2 成功页面 suc.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
成功
入门成功了2...
当请求处理成功后,会跳转到该页面。
如下:
用户在浏览器中访问 index.jsp
页面,通过表单或超链接发送请求到 /say/hello.do
。
请求到达 DispatcherServlet
,DispatcherServlet
根据 web.xml 中的配置,将请求转发给 Spring MVC 框架处理
DispatcherServlet
根据 @RequestMapping
注解的配置,找到对应的控制器方法 HelloController.sayHello
。
调用 sayHello
方法,处理业务逻辑,接收并打印 username
参数。
sayHello
方法返回逻辑视图名 suc
,DispatcherServlet
根据 springmvc.xml 中配置的视图解析器,将逻辑视图名解析为实际的 JSP 页面路径 /WEB-INF/pages/suc.jsp
。
DispatcherServlet
将请求转发到 suc.jsp
页面,渲染并返回给用户。