SpringMVC笔记1Word下载.docx
《SpringMVC笔记1Word下载.docx》由会员分享,可在线阅读,更多相关《SpringMVC笔记1Word下载.docx(38页珍藏版)》请在冰豆网上搜索。
第四步:
前端控制器调用处理器适配器去执行Handler
第五步:
处理器适配器去执行Handler
第六步:
Handler执行完给适配器返回ModelAndView
第七步:
处理器适配器向前端控制器返回ModelAndView
ModelAndView是SpringMVC框架的一个底层对象,包括Model和View
第八步:
前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
第九步:
视图解析器向前端控制器返回View
第十步:
前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域。
第十一步:
前端控制器向用户响应结果。
组件:
1、前端控制器DispatcherServlet(不需要程序员开发)作用:
接受请求,响应结果,相当于转发器,中央处理器。
有了DispatherServlet减少了其他组件之间的耦合度。
2、处理器映射器(HandlerMapping)(不需要程序员开发),
作用:
根据请求的url查找Handler。
3、处理器适配器(HandlerMapping)
按照特定规则(HandlerMapping要求的规则)去执行Handler。
4、处理器Handler(需要程序员开发)
注意:
编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
5、视图解析器Viewresolver(不需要程序员开发)
进行视图解析,根据逻辑视图名解析成真正的而视图(view)
6、视图view(需要程序员开发jsp)
View是一个接口,实现类支持不同的view类型(jsp,freemaker,pdf……….)
2.入门程序
2.1需求
以案例作为驱动
Springmvc和mybatis使用同一个案例(商品订单案例)。
功能需求:
商品列表查询
2.2环境准备
数据库环境:
mysql5.1
Java环境:
Jdk1.7.0_72
Eclipseindigo
Springmvc版本:
spring3.2
需要spring3.2所有jar(一定包括spring-webmvc-3.2.0.RELEASE.jar)
为了让建立的工程也能顺利导入到MyEclipse中,需要如下建立工程。
即如下所示:
2.3配置前端控制器
在web.xml中配置前端控制器。
2.4配置处理器适配器
在classpath下的springmvc.xml中配置处理器适配器。
通过查看源代码
此适配器能执行实现Controller接口的Handler
2.5开发Handler
需要实现controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
2.6视图编写
2.7配置Handler
将编写Handler在spring容器中加载。
2.8配置处理器映射器
在classpath下的springmvc.xml中配置处理器映射器。
2.9配置视图解析器
需要配置解析jsp的视图解析器。
2.10部署调试
访问地址:
http:
//localhost:
8080/SpringMVCFirst/query.action
处理器映射器根据url找不到Handler,报下边的错误。
说明url错误。
处理器映射器根据url找到了Handler,转发的jsp页面找到,报下边的错误,说明jsp页面地址错误了。
3.非注解的处理器映射器和适配器
3.1非注解的处理器映射器
处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
另一个处理器映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。
3.2非注解的处理器适配器
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现Controller接口
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的Handler实现HttpRequestHandler接口
//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
/*
response.setCharacterEncoding("
utf-8"
);
response.setContentType("
application/json;
charset=utf-8"
response.getWriter().write("
json串"
*/
4.DispatcherServlet.properties
前端控制器从上边的文件中加载处理器映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,就会使用默认加载的。
5.注解的处理器映射器和处理器适配器
在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注解适配器。
5.1配置注解映射器和适配器
5.2开发注解Handler
使用注解的映射器和注解的适配器(注解的映射器和注解的适配器必须配对使用。
)
//使用Controller标识它是一个控制器
@Controller
publicclassItemsController3{
//商品查询列表
//@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
//一般建议将url和方法写成一样
@RequestMapping("
/queryItems"
publicModelAndViewqueryItems()throwsException{
//调用service查找数据库,查询商品列表,这里使用静态数据模拟
List<
Items>
itemsList=newArrayList<
();
//向list中填充静态数据
Itemsitems_1=newItems();
items_1.setName("
联想笔记本"
items_1.setPrice(6000f);
items_1.setDetail("
ThinkPadT430联想笔记本电脑!
"
Itemsitems_2=newItems();
items_2.setName("
苹果手机"
items_2.setPrice(5000f);
items_2.setDetail("
iphone6苹果手机!
itemsList.add(items_1);
itemsList.add(items_2);
//返回ModelAndView
ModelAndViewmodelAndView=newModelAndView();
//相当于request的setAttribut,在jsp页面中通过itemsList取数据
modelAndView.addObject("
itemsList"
itemsList);
//指定视图
modelAndView.setViewName("
/WEB-INF/jsp/items/itemsList.jsp"
returnmodelAndView;
}
5.3在spring容器中加载Handler
<
!
--对于注解的Handler可以单个配置
实际开发中建议使用组件扫描
-->
<
--<
beanclass="
cn.itcast.ssm.controller.ItemsController3"
/>
--可以扫描controller、service、...
这里让扫描controller,指定controller的包
context:
component-scanbase-package="
cn.itcast.ssm.controller"
>
/context:
component-scan>
5.4部署调试
访问:
8080/springmvcfirst1208/queryItems.action
6.源码分析(了解)
通过前端控制器源码分析springmvc的执行过程。
前端控制器接受请求。
调用doDiapatch()
前端控制器调用处理器映射器查找Handler
调用处理器适配器执行Handler,得到执行结果ModelAndView
视图渲染,将model数据填充到request域中。
视图渲染,得到view
调用view的渲染方法,将model数据填充到request域。
渲染方法:
7.入门程序小结
通过入门程序理解springmvc前端控制器、处理器映射器、处理器适配器、视图解析器用法。
前端控制器配置:
第一种:
*.action,访问以.action结尾由DispatcherServlet进行解析
第二种:
/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用此种方式可以实现RESTful风格的url
非注解处理器映射器(了解)
注解的处理器映射器(掌握)
对标记@Controller类中标识有@RequestMapping的方法进行映射,在@RequestMapping里边定义映射的url。
先用注解的映射器不用在xml中配置url和Handler的映射关系。
非注解处理器适配器(了解)
注解的处理器适配器(掌握)
注解的处理器适配器和注解的处理器映射器是配对使用。
理解为不能使用非注解映射器进行映射。
mvc:
annotation-driven>
/mvc:
可以代替下边的配置:
--注解映射器-->
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"
/>
--注解适配器-->
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
实际开发中使用:
mvc:
annotation-driven
视图解析器配置前缀和后缀。
程序中不用制定前缀和后缀。
8.springmvc和mybatis整合
8.1需求
使用springmvc和mybatis完成商品列表查询
8.2整合思路
Springmvc+mybatis的系统架构:
mysql
整合dao层
Mybatis和spring整合,通过spring管理mapper接口
使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
整合service层
通过spring管理service接口。
使用配置方式将service接口配置在spring配置文件中。
实现事务控制。
整合springmvc
由于springmvc是spring的模块,不需要整合。
8.3准备环境
jdk1.7.0_72(很重要,一定要记住,jdk1.8运行不了)
eclipseindigo
springmvc版本:
所需要的jar包:
数据库驱动包:
Mybatis和spring整合包
Mybatis的jar包
Log4j包
dbcp数据库连接池包
spring3.2所有jar包
jstl包
参考:
工程结构:
8.4整合dao
Mybatis和spring进行整合
8.4.1.sqlMapConfig.xml
Mybatis自己的配置文件
8.4.2.applicationContext-dao.xml
配置:
数据源
SqlSessionFactory
Mapper扫描器
8.4.3逆向工程生成的po类及mapper(单表增删改查)
将生成的文件拷贝到工程中。
8.4.4手动定义商品查询mapper
针对综合查询mapper,一般情况会有关联查询,建议自定义mapper
8.4.4.1.ItemsMapperCustom.xml
sql语句:
SELECT*FROMitemsWHEREitems.nameLIKE'
%笔记本%'
8.4.4.2.ItemsMapperCustom.java
8.5整合service
让spring来管理service接口。
8.5.1定义service接口
8.5.2在spring容器中配置service
创建applicationContext-service.xml,文件中配置service。
8.5.3事务控制
在applicationContext-transaction.xml中使用spring声明式事务控制方法。
8.6整合springmvc
8.6.1.springmvc.xml
创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器。
--使用mvc:
annotation-driven代替上边注解映射器和注解适配器配置
mvc:
annotation-driven默认加载很多的参数绑定方法,
比如json转换解析器就默认加载了,如果使用mvc:
annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
实际开发时使用mvc:
--视图解析器
解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包
bean
class="
org.springframework.web.servlet.view.InternalResourceViewResolver"
<
--配置jsp路径的前缀-->
propertyname="
prefix"
value="
/WEB-INF/jsp/"
--配置jsp路径的后缀-->
suffix"
.jsp"
/bean>
8.6.2配置前端控制器
8.6.3编写Controller(Handler)
8.6.4编写jsp
8.7加载spring容器
将mapper、service、controller加载到spring容器中。
建议使用通配符加载上边的配置文件。
在web.xml中,添加spring容器监听器、加载spring容器。
9.商品修改功能开发
9.1需求
操作流程:
1、进入商品查询列表页面
2、点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询)
要修改的商品从数据库查询,根据商品id(主键)查询商品信息。
3、在商品修改页面,修改商品信息,修改后,点击提交。
9.2开发mapper
Mapper:
根据id查询商品信息
根据id更新Items表的数据
不用开发了,使用逆向工程生成的代码。
9.3开发service
接口功能:
修改商品信息
9.4开发controller
方法:
商品信息修改页面显示
商品信息修改提交
10.@RequestMapping
1、url映射
定义controller方法对应的url,进行处理器映射使用。
2、窄化请求映射
3、限制http请求方法
处于安全性考虑,对http的链接进行方法限制。
如果限制请求为post方法,进行get请求,报错:
11.controller方法的返回值
1、返回ModelAndView
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
2、返回string
如果controller方法返回string,
1)、表示返回逻辑视图名
真正视图(jsp路径)=前缀+逻辑视图名+后缀
2)、redirect重定向
商品修改提交后,重定向到商品查询列表。
Redirect重定向特定:
浏览器地址栏中的url会变化。
修改提交的requet数据无法传到重定向的地址。
因为重定向后重新进行request(request无法共享)
3)、forward页面转发
通过forward进行页面转发,浏览器地址栏url不变,request可以共享。
4、返回void
在controller方法形参上可以定义request和response,使用request或者response指定响应结果:
1、使用request转向页面,如下:
request.getRequestDispatcher("
页面路径"
).forward(request,response);
2、也可以通过response页面重定向:
response.sendRedirect("
url"
3、也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("
response.setContentType("
response.getWriter().write("
12参数绑定
12.1spring参数绑定过程
从客户端请求key/value数据,进过参数绑定,将key/value数据绑定到controller方法的形参上。
Springmvc中,接受页面提交的数据是通过方法形参来接受,而不是在controller类定义成员变量接收!
12.2默认支持的类型
直接在controller方法形参上定义下边类型的对象,就可以使用这些对象,在参数绑定过程中,如果遇到下边类型直接进行绑定。
1.2.1.1HttpServletRequest
通过request对象获取请求信息
1.2.1.2HttpServletResponse
通过response处理响应信息
1.2.1.3HttpSession
通过session对象得到session中存放的对象
1.2.1.4Model/ModelMap
model是一个接口,modelMap是一个接口实现。
将model数据填充到request域。
12.3简单类型
通过@requestParam对简