在说Spring MVC之前,我们先说说没有Spring MVC的时候。
1)最早的Java Web程序,我们使用Servlet来处理请求,一般来说,一个请求对应一个Servlet,比如/user/add.do,就对应某个useradd的Servlet来处理。在Servlet中,我们可以获取到HttpServletRequest(req)和HttpServletResponse(resp)两个参数。其中req可以取得请求相关的信息,然后我们处理好请求之后,将要返回的东西写进resp里面,比如要输出一个html页面,就一行行的println,非常的麻烦,像这样:

PrintWriter out = resp.getWriter();
out.println("<h1>" + message + "</h1>");

2)后来有了jsp文件,我们就把代码从Servlet搬到了jsp里面。这个时候,就不用一行行的println了,直接在普通的html页面里面加上需要动态化的代码就可以了。
同时,也出现了一种做法,也就是把业务逻辑写到Servlet,而数据展现放在jsp页面,再独立出领域模型,就成了mvc的模式,也就是模型(model)-视图(view)-控制器(controller)的缩写,这样做使得项目结构开始清晰起来。
3)每个请求都写个Servlet是很麻烦的,所以就有了只写一个Servlet,映射”/*”的做法,也就是把所有请求都映射到一个Servlet上面,这个Servlet再根据传递的参数做转发。再后来,把这个转发的配置写到一个独立的配置文件里面,也就是类似Struts这样的框架。Struts把处理请求的方法和返回的页面地址配置到一个xml里面,像这样:

<action name="Login" class="steven.actions.LoginAction">
<result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>
</action>

好处显而易见,不用写一堆的Servlet了,也不用自己写转发的方法了,只要按格式配置个xml就搞定。
4)后来就有了Spring MVC,除了类似Struts这样的用法外,还可以支持annotation的方式(Spring2.5后),就可以这样:

@Controller
@RequestMapping("blog")
public class BlogController {  @RequestMapping("index")  public String index(Map<String, Object> map) {  return "blog/index";  }
}  

annotation的方式,只要写那几个@的内容,比原先写到配置文件里,省事了不少呀。

也谈Spring MVC相关推荐

  1. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:"MVC框架是什么?你说一说."其实我们都知道这个问题还需要问的, ...

  2. 扯谈spring mvc之WebApplicationContext的继承关系

    spring mvc里的root/child WebApplicationContext的继承关系 在传统的spring mvc程序里会有两个WebApplicationContext,一个是pare ...

  3. 请谈一下Spring MVC的工作原理是怎样的?

    请谈一下Spring MVC的工作原理是怎样的? ①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求. ②DispatcherS ...

  4. spring mvc mysql配置_spring mvc配置数据库连接

    ACM 配置中心实战:Spring + MyBatis + Druid + ACM 很多基于 Spring MVC 框架的 Web 开发中,Spring + MyBatis + Druid 是一个黄金 ...

  5. Spring MVC和Struts2

    Web层面的框架学习了三个Struts1和2,SpringMVC,那他们之间肯定存在一个优劣和适用的环境,Struts1和2的异同点我已经做过对比<Struts1和Struts2>,这篇将 ...

  6. requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式...

    1.关于三种 Content-Type multipart/form-data 请求中既可以携带文件,又可以携带参数.其中参数以键值对的方式传递,参数之间.参数与文件之间以 content-dispo ...

  7. Spring MVC:测试简介

    测试是软件开发中最重要的部分之一. 井井有条的测试有助于使应用程序代码保持良好状态,并且处于工作状态. 有很多不同类型的测试和方法. 在本文中,我想对基于Spring MVC的应用程序进行单元测试进行 ...

  8. 解读Spring MVC项目技术架构

    在Java EE开发中,Spring和Spring MVC已经是标配的基础系统架构.前面已经介绍了Spring框架,在这里主要说说Spring MVC. 实际上Spring MVC是Spring框架的 ...

  9. jQuery中Ajax+Spring MVC实现跨域请求

    项目开发中,某个可独立.也可集成的子业务模块须要向外开放相关API接口,先说下项目本身使用了jersery来实现RESTful webservice以名词形式公布API.有意思的是在实际的操作中同事却 ...

最新文章

  1. 如何实现搜索列表_图解:如何理解与实现散列表
  2. linux命令 -- su
  3. 拥抱开放式网络 通往下一代数据中心
  4. POP3口令扫描案例
  5. opencv findContours 报错_acrt_first_block == header
  6. 清空文件下的SVN控制文件
  7. C#LeetCode刷题之#232-用栈实现队列​​​​​​​​​​​​​​(Implement Queue using Stacks)
  8. 工控项目开发框架介绍
  9. 丹麦为NSA开绿灯 通过通信中心监控欧洲政客
  10. 市场的争夺-联通丢了校园投资、当当网主动发掘客户
  11. Python容器专题 - deque(队列)--双向队列对象
  12. java实现自动定位,java swing 如何自动定位尾部
  13. SQL2008安装教程
  14. hdu2122 Ice_cream’s world III(MST)
  15. 计算机专业轻薄本还是游戏本,十大精品笔记本电脑(高端轻薄本和高端游戏本)...
  16. 2016 杭州云栖大会随笔
  17. vue的:href和href
  18. FCC ID认证简介
  19. 机械臂规划----三次样条曲线
  20. 解决 git 将文本文件视为二进制文件 导致无法查看diff

热门文章

  1. 容器中构建镜像慢,在dockerfile中换源加速
  2. 如何打造不怕被嗅探的3389登陆
  3. 字符串匹配算法(三):KMP(KnuthMorrisPratt)算法
  4. Docker常用操作命令(一)
  5. 搞懂这些SQL优化技巧,面试横着走
  6. 微服务架构之「 下一代微服务 Service Mesh 」
  7. 真实世界的 TCP HOL blocking
  8. Java代码简化之lombok
  9. Atlas元数据存储模型分析
  10. 教育机构如何提升在线教育技术能力? | 云+社区技术沙龙