在web项目中使用SpringMVC
为什么80%的码农都做不了架构师?>>>
什么是springmvc
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整个层进行整合,它是一个基于mvc的web框架。
springmvc与struts2的区别
- springmvc是基于方法开发的,struts2是基于类开发的。springmvc将url和controller方法映射,映射成功后springmvc生成一个Handler对象(也就是controller),对象中只包括了映射的method,方法执行结束后,形参数据销毁。
- springmvc可以进行单例开发,并且建议使用单例开发,struts2只能多例开发(struts2通过类成员变量接收数据,多个线程中的数据可能不一样,所以不能使用单例开发)。
- 经过实际的测试,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相关推荐
- 在java web项目中实现随项目启动的额外操作
前言 在web项目中经常会遇到在项目启动初始,会要求做一些逻辑的实现,比如实现一个消息推送服务,实现不同类型数据同步的回调操作初始化,或则通知其他客户服务器本项目即将启动,等等.对于这种要求,目前个人 ...
- JAVA Web项目中所出现错误及解决方式合集(不断更新中)
JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...
- maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...
标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...
- 在java web项目中编写自己的代码生成器
在java web项目中编写自己的代码生成器 转载于:https://www.cnblogs.com/punisher/p/5909943.html
- 在web项目中发布jaxws
概述 在web项目中发布基于jaxws的webservice. 参考文章:用JAX-WS在Tomcat中发布WebService 参考文章说,如果不是servlet3.0及以上,需要配置servlet ...
- Web项目中引进EasyUI的路径问题
场景 Web项目中引入EasyUI,新建test.html,页面中引入EasyUI相关资源文件. 运行后页面并没有改变,打开检查提示404找不到资源. 实现 项目路径为: 路径引用错误: test.h ...
- 由web项目中上传图片所引出的路径问题
我在做javaweb项目的时候,有个项目中需要进行图片的上传,有次我重新部署项目后,发现之前上传的图片不见了,最后找出原因:图片上传在服务器目录上,而不是绝对路径,所以特别想弄清楚javaweb项目中 ...
- maven web项目中的web.xml的版本如何更改
maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...
- 详解log4j2(下) - Log4j2在WEB项目中配置
官方介绍和学习文档网址为http://logging.apache.org/log4j/2.x/ 首先在WEB项目中引入以下几个jar包: ① log4j-api-2.4.1.jar ② log4j- ...
最新文章
- windows系统无法创建文件共享
- Dockerfile: no such file or directory
- 阿里云服务器tomcat配置https
- 手把手带你领略双十一背后的核心技术Sentinel之热点参数限流
- 拉里.埃里森_耶鲁大学演讲
- 基于框架的应用系统的质量属性
- 常用的loss函数,以及在训练中的使用
- 怎么分辨学校计算机sql版本,怎么筛选出每个年级每个学校有多少个班级
- java 配置文件加载_java加载配置文件信息
- 吴功宜计算机网络教程ppt,计算机网络 吴功宜 编著ppt课件.ppt
- nginx安装http2.0协议
- 计算机基础知识第三章测试,计计算机应用基础第三章测试题
- 拓端tecdat|R语言多项式线性模型:最大似然估计二次曲线
- 标准正交表与混合正交表的使用
- python求曲线拐点_使用Python检测新冠肺炎疫情拐点
- 计算机找不到ac97前面板怎么办,Win7前面板没有声音的解决方法(声卡设置+前面板插线)...
- 如何批量实现通过MP3标题重命名文件名
- Hazel引擎学习(八)
- 谷云科技通过CMMI3认证,研发实力受国际权威认可!
- Ubuntu安装Microsoft office