各位Web冒险家们,准备好进入Spring MVC的魔法世界了吗?这里没有枯燥的Servlet,只有优雅的注解和智能的控制器!让我们一起来探索这个"请求-响应"的奇幻旅程。

第一章:Web世界的"交通指挥官"

首先登场的是`web.xml`,它就像Web世界的"交通警察":

xml
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

这个DispatcherServlet就是Spring MVC的"大脑",负责指挥所有请求的流向。它像是个忙碌的接待员,对每个HTTP请求说:"别急,我帮你找对应的控制器!"

还有字符编码过滤器,确保中文不会变成"天书":
xml
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

第二章:控制器的"百变星君"

HelloController - 简单的开场白

java
@Controller
public class HelloController {
    @RequestMapping(path = "/hello.do")
    public String sayHello(Model model){
        model.addAttribute("msg","hello,SpringMVC");
        return "suc";
    }
}

这就像个热情的迎宾员:"欢迎光临!这是您的问候消息!"

UserController - 参数接收的"多面手"

这个控制器展示了三种接收参数的"武功秘籍":

java
// 方式1:直接接收参数 - "直来直去型"
@RequestMapping("/save")
public String save(String name, String password){
    System.out.println(name + ":" + password);
    return "suc";
}

// 方式2:对象封装 - "优雅绅士型"  
@RequestMapping("/save2")
public String save2(User user){
    System.out.println(user);
    return "suc";
}

// 方式3:Servlet原生 - "怀旧复古型"
@RequestMapping("/save3")
public String save3(HttpServletRequest request){
    String name = request.getParameter("name");
    return "suc";
}

最精彩的是`index.html`表单中的"嵌套对象"传参:
html
金额:<input type="number" name="account.money"><br>
金额1:<input type="number" name="accounts[0].money"><br>
这就像在说:"我要给用户设置一个账户,还要给用户设置多个账户!"

第三章:DeptController的"魔术表演"

这个控制器简直就是Spring MVC的"魔法秀",展示了各种响应技巧:

魔术1:ModelAndView 魔术
java
@RequestMapping("/save")
public ModelAndView save(){
    ModelAndView mv = new ModelAndView();
    mv.addObject("msg","save success");  // 变出数据
    mv.setViewName("suc");  // 指定视图
    return mv;
}

魔术2:请求转发 vs 重定向
java
// 请求转发 - "内部传送"
@RequestMapping("/test2")
public void test2(HttpServletRequest request) throws Exception {
    request.getRequestDispatcher("/dept/test3").forward(request,response);
}

// 重定向 - "外部跳转"  
@RequestMapping("/test4")
public void test4(HttpServletResponse response) throws Exception {
    response.sendRedirect("/qcby03/dept/test5");
}

请求转发就像部门内部调岗:"小张,这个任务你接着处理!"
重定向就像跳槽到新公司:"抱歉,我已经不在原部门了,请找新部门!"

魔术3:Spring MVC的优雅方式
java
// 请求转发
@RequestMapping("/test7")
public String test7(){
    return "forward:/html/suc.html";
}

// 重定向
@RequestMapping("/test8")  
public String test8(){
    return "redirect:/html/suc.html";
}

这就像从"手动挡"升级到了"自动挡"!

第四章:JSON的"变形金刚"

最酷的功能来了——自动JSON转换:

java
@RequestMapping("/test10")
@ResponseBody
public User test10(){
   User user = new User();
   user.setName("test10");
   user.setPassword("123456");
   return user;
}

加上`@ResponseBody`注解后,Spring MVC会自动把User对象变成:
json
{"name":"test10","password":"123456"}

这就像有个贴心的翻译官,自动把Java对象"翻译"成JSON语言!

第五章:模型类的"俄罗斯套娃"

Account类 - 简单的钱袋子
java
public class Account {
    private Double money;
    // 省略getter/setter
}

User类 - 复杂的套娃结构
java
public class User {
    private String name;
    private String password;
    private Account account;           // 单个账户
    private List<Account> accounts;    // 账户列表
}

这种嵌套结构让表单传参变得很有趣:
- name="account.money"→ 设置单个账户金额
- name="accounts[0].money"→ 设置列表第一个账户金额

这就像在玩"套娃游戏",一层套一层!

第六章:视图解析器的"魔法镜"

springmvc.xml中的Thymeleaf配置就像一面"魔法镜":

xml
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/html/" />    <!-- 前缀:在html文件夹找 -->
    <property name="suffix" value=".html" />     <!-- 后缀:找html文件 -->
</bean>

当控制器返回"suc"时,Thymeleaf会自动找到`/html/suc.html`文件,这就像有个智能导航系统!

Spring MVC的"生存法则"

1. 注解是王道:@Controller、@RequestMapping让代码更简洁
2. 参数接收多样化:直接参数、对象封装、Servlet原生,任君选择
3. 响应方式灵活:转发、重定向、JSON响应,应对各种场景
4. 视图解析智能:Thymeleaf让页面渲染变得轻松愉快

趣闻轶事:控制器的"内心独白"

- HelloController:"我就是个简单的问候器,别对我要求太高!"
- UserController:"我负责用户相关操作,三种传参方式随你选!"  
- DeptController:"我是万能选手,转发、重定向、JSON样样精通!"
- DispatcherServlet:"我才是最累的!所有请求都要经过我调度!"

结语

Spring MVC就像Web开发的"智能管家":
- 从繁琐的Servlet中解放出来
- 用注解代替XML配置
- 自动处理参数绑定和类型转换
- 支持多种视图技术

这次冒险告诉我们:Spring MVC不是框架,而是一种"生活方式"!它让Java Web开发从"苦力活"变成了"艺术活"。

🎭 程序员戏剧:在Spring MVC的世界里,每个控制器都是演员,每个请求都是一场演出,而DispatcherServlet就是那个忙碌的导演!

下次写Web应用时,记得享受Spring MVC带来的"优雅舞蹈",而不是陷入Servlet的"机械劳动"哦!

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务

更多推荐