为什么80%的码农都做不了架构师?>>>   

什么是springmvc

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整个层进行整合,它是一个基于mvc的web框架。

springmvc与struts2的区别

  1. springmvc是基于方法开发的,struts2是基于类开发的。springmvc将url和controller方法映射,映射成功后springmvc生成一个Handler对象(也就是controller),对象中只包括了映射的method,方法执行结束后,形参数据销毁。
  2. springmvc可以进行单例开发,并且建议使用单例开发,struts2只能多例开发(struts2通过类成员变量接收数据,多个线程中的数据可能不一样,所以不能使用单例开发)。
  3. 经过实际的测试,struts2速度慢,是因为使用了struts标签,所以在使用struts2进行开发的时候,建议使用jstl。

springmvc框架执行流程

用入门程序来学习springmvc

springmvc运行环境

jar包下载地址(mybatis+spring(包括springmvc)所有jar包): http://download.csdn.net/detail/jinzili777/9480604

配置前端控制器

在web.xml文件中,

<!-- springmvc前端控制器 -->
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- contextConfigLocation配置springmvc加载的配置文件路径(配置映射器,适配器等)如果不配置此属性,默认加载的是/WEB-INF/servlet名称-servlet.xml(在这里就是上面<servlet-name>的值:springmvc-servlet.xml)--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 第一种:*.action,访问以*.action结尾的由DispatcherServlet解析第二种:/,所有的访问都由DispatcherServlet解析,如要访问静态资源(js,css...)需要配置不让DispatcherServlet解析,此方法可以实现RESTurl风格的url第三种:/*,这种配置是不正确的,使用此方法,当我们要转发到一个jsp页面时也会由DispatcherServlet解析,会报错--><url-pattern>*.action</url-pattern></servlet-mapping>

非注解的处理器映射器和适配器

在classpath下的springmvc.xml中

不使用注解的处理器适配器

此方法只能执行实现了Controller接口的Handler,下面是一个小demo

开发Handler

public class ItemsController1 implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {//调用service查找 数据库,查询商品列表,这里使用静态数据模拟List<Items> itemsList = new ArrayList<Items>();//向list中填充静态数据Items items_1 = new Items();items_1.setName("联想笔记本");items_1.setPrice(6000f);items_1.setDetail("ThinkPad T430 联想笔记本电脑!");Items items_2 = new Items();items_2.setName("苹果手机");items_2.setPrice(5000f);items_2.setDetail("iphone6苹果手机!");itemsList.add(items_1);itemsList.add(items_2);//返回ModelAndViewModelAndView modelAndView =  new ModelAndView();//相当 于request的setAttribut,在jsp页面中通过itemsList取数据modelAndView.addObject("itemsList", itemsList);//指定视图modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");return modelAndView;
}

setViewName()方法中是转发到的jsp页面,页面这里不再赘述,在这个jsp页面可以取到request域中的itemsList。 在spring容器加载Handler

<bean name="/queryItems.action" class="cn.jzl.ssm.controller.ItemsController1"></bean>

配置不使用注解的处理器映射器

<!-- 将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url)-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

配置视图解析器

<!-- 视图解析器 解析jsp,默认使用jstl,classpath下得有jstl的包jsp路径的前缀和jsp路径的后缀--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>

注解的处理器映射器和适配器

在spring3.1之前使用 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。

在spring3.1之后使用 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

在spring3.1之前使用 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。

在spring3.1之后使用 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

配置注解映射器和适配器

<!-- 注解映射器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /><!-- 注解适配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

开发注解Handler

//使用Controller标识 它是一个控制器
@Controller
public class ItemsController {@Resourceprivate ItemsService itemsService;//@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url//一般建议将url和方法写成一样@RequestMapping("/queryItems")public ModelAndView queryItems(ItemsQueryVo itemsQueryVo) throws Exception{/*业务逻辑*/List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("itemsList", itemsList);modelAndView.setViewName("items/itemsList");return modelAndView;}
}

@controller注解必须要加,作用标识类是一个Handler处理器。 @requestMapping注解必须要加,作用: 1、对url和Handler的方法进行映射。 2、可以窄化请求映射,设置Handler的根路径,url就是根路径+子路径请求方式 3、可以限制http请求的方法 映射成功后,springmvc框架生成一个Handler对象,对象中只包括 一个映射成功的method。

在spring容器中加载Handler

<!-- 对于注解的Handler可以单个配置 -->
<!-- <bean class="cn.jzl.ssm.controller.ItemsController"/> -->
<!-- 但是在开发中,建议使用扫描 -->
<context:component-scan base-package="cn.jzl.ssm.controller" />

配置视图解析器方法不变

使用mvc:annotation-driven

配置映射器和适配器 使用如下配置,可以代替第二种方法中注解的适配器和映射器

<mvc:annotation-driven></mvc:annotation-driven>

开发注解Handler

与第二种方法开发方法一致

配置视图解析器方法不变

小结

在学习并使用springmvc的过程中,了解其执行流程是非常重要的。在实际使用过程中会碰到各式各样的问题,也不是一篇博客或一部视频能够介绍完全的,所以学习没有捷径,只有通过一行行的代码累加、沉淀,多敲几行代码,理解就会加深几分。共勉。

转载于:https://my.oschina.net/zili/blog/1031438

在web项目中使用SpringMVC相关推荐

  1. 在java web项目中实现随项目启动的额外操作

    前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...

  2. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  3. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  4. 在java web项目中编写自己的代码生成器

    在java web项目中编写自己的代码生成器 转载于:https://www.cnblogs.com/punisher/p/5909943.html

  5. 在web项目中发布jaxws

    概述 在web项目中发布基于jaxws的webservice. 参考文章:用JAX-WS在Tomcat中发布WebService 参考文章说,如果不是servlet3.0及以上,需要配置servlet ...

  6. Web项目中引进EasyUI的路径问题

    场景 Web项目中引入EasyUI,新建test.html,页面中引入EasyUI相关资源文件. 运行后页面并没有改变,打开检查提示404找不到资源. 实现 项目路径为: 路径引用错误: test.h ...

  7. 由web项目中上传图片所引出的路径问题

    我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中 ...

  8. maven web项目中的web.xml的版本如何更改

    maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...

  9. 详解log4j2(下) - Log4j2在WEB项目中配置

    官方介绍和学习文档网址为http://logging.apache.org/log4j/2.x/ 首先在WEB项目中引入以下几个jar包: ① log4j-api-2.4.1.jar ② log4j- ...

最新文章

  1. windows系统无法创建文件共享
  2. Dockerfile: no such file or directory
  3. 阿里云服务器tomcat配置https
  4. 手把手带你领略双十一背后的核心技术Sentinel之热点参数限流
  5. 拉里.埃里森_耶鲁大学演讲
  6. 基于框架的应用系统的质量属性
  7. 常用的loss函数,以及在训练中的使用
  8. 怎么分辨学校计算机sql版本,怎么筛选出每个年级每个学校有多少个班级
  9. java 配置文件加载_java加载配置文件信息
  10. 吴功宜计算机网络教程ppt,计算机网络 吴功宜 编著ppt课件.ppt
  11. nginx安装http2.0协议
  12. 计算机基础知识第三章测试,计计算机应用基础第三章测试题
  13. 拓端tecdat|R语言多项式线性模型:最大似然估计二次曲线
  14. 标准正交表与混合正交表的使用
  15. python求曲线拐点_使用Python检测新冠肺炎疫情拐点
  16. 计算机找不到ac97前面板怎么办,Win7前面板没有声音的解决方法(声卡设置+前面板插线)...
  17. 如何批量实现通过MP3标题重命名文件名
  18. Hazel引擎学习(八)
  19. 谷云科技通过CMMI3认证,研发实力受国际权威认可!
  20. Ubuntu安装Microsoft office

热门文章

  1. java使用HttpClient传输json格式的参数
  2. 优秀开发者和差的开发者之间区别
  3. OCA读书笔记(6) - 配置Oracle网络环境
  4. 陶哲轩实分析 习题 7.5.2
  5. php的基本语法和数据类型
  6. 关于AxWebBrowser关闭网页时的关闭提示
  7. 馅饼还是陷阱,TMG2010升级经验谈
  8. CString的用法
  9. mysql100个优化技巧_MySQL 调优/优化的 100 个建议
  10. 票房破五十亿!用Python分析李焕英为啥能逆袭《唐探3》