《Spring MVC奇幻漂流记:当Java遇上Web的奇妙冒险》
下次写Web应用时,记得享受Spring MVC带来的"优雅舞蹈",而不是陷入Servlet的"机械劳动"哦!金额1:<input type="number" name="accounts[0].money"><br>金额:<input type="number" name="account.money"><br>
各位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的"机械劳动"哦!
更多推荐
所有评论(0)