注解式开发
springmvc:是基于spring的一个框架,实际上就是spring的一个模块。专门
做web开发的。
理解:是servlet的一个升级
web开发底层是servlet,框架是在servlet基础上加入了一些功能。让你做web
开发方便一些。
springmvc实际上就是一个spring。spring是容器,ioc能够管理对象,使用
springmvc能够创建对线,放入到容器中(springmvc容器),springmvc容器
中放的是控制器对象。
我们要做的是使用@controller创建控制器对象,把对象放入到springmvc容器中,
把创建的对象作为控制器使用,这个控制器对象能接受用户的请求,显示处理结果,
就当做是一个servlet使用
使用@controller注解创建的是一个普通类的对象,不是servlet。springmvc赋予了
对象一些额外的功能
web访问大致流程
web开发底层是servlet,springmvc中有一个对象是servlet:DispatherServlet
DispatherServlet(中央调度器):负责接受用户的所有请求,用户把请求给了
DispatherServlet。DispatherServlet再把请求转发给我们的Controller对象,最
后是Controller对象处理请求
index.jsp----DispatherServlet(中央调度器)--转发, 分配给--Controller对象(@Controller创建)
***************************************************************
servlet的处理流程
1.发起some.do--tomcat(web。xml--url--pattern知道 *.do的请求给中央调度器)
2.根据springmvc.xml知道some.do对应的方法了some.do--dosome(),
3.中央调度器把some.do转发给控制类的dosome方法了
4.中央调度器把some.do转发给控制类的dosome()方法了
5.框架执行dosome()把得到的modelandview进行处理,转发到show.jsp
上面的过程简化的方式
some.do--中央调度器--控制类对象
中央调度器
1.负责创建springmvc容器对象,读取xml配置文件,创建文件中的控制类对象。
2.负责接受用户的请求,分配给自定义的控制类对象
springmvc执行过程源代码分析
1.tomcat启动,创建容器的过程。
通过load-on-start标签指定的1,创建中央控制器对象,中央调度器它的父类是继承
httpservlet的,它是一个servlet,在被创建时,会执行init()方法。
在init()方法中
创建容器,读取配置文件,把容器对象放入到servletcontext中。
上面创建容器作用:创建@controller注解所在的类的对象,创建控制类对象。
这个对象放入到springmvc的容器中,容器是map,类似map.put("mycontrller",控制类对象)
2.请求的处理过程
执行servlet的service(),doservice
doDispatch会调用控制类的dosome()方法。
使用modelview接受参数有两种方便的形式
1.对应请求的方法(参数)
1)如果前端参数和后端参数不一样,使用requestParam注解
2.多个参数使用vo对象接受参数更方便一点.
******************************************************
modelviw返回值:
1.modelview
2.String :返回的是一个逻辑路径或绝对路径,是一个重定向.底层是forwrod,如果想添加
参数,自己再添加一个HttpServletRequest参数.
处理器方法返回String,String表示数据的,不是视图.
* 区分返回值String是数据,还是视图,看有没有@Responsebody注解
* .如果有responsebody注解,返回String就是数据,反之就是视图.
*/
/**
* 默认使用8859-1作为字符集,导致中文乱码
* 解决方案:给requestmapping增加一个属性 produces,使用这个属性指定新的 contenxttype
*/
3.void:响应ajax请求
1)获取参数
2)利用jackson转换为json格式
3)返回前端.
4.object:响应json对象
**********************
springmvc访问静态文件
一条语句访问多个静态文件
都放在static文件夹下边,resource声明static文件夹
***********************************************************'
SSM整合例子
************************************************************
创建dao和mapper.
1.service接口中声明和dao相同用处的方法.
2.service实现类中.有Studentdao的引用.
3.重写方法
4.Controller中直接使用service实现类的方法.从而访问数据库
forword实现转发操作:forword:完整路径.
mv.setview("forword:c.jsp")
mv.setview("")
http://localhost:8080/myweb/student/doForward.do
mv.setViewName("forward:/success.jsp");
redirect重定向跳转:redirect:完整路径.
redirect不能访问web-inf受保护的资源
redirect中的jsp的el表达式取不到值原因:
el表达式只会在四大作用域中找值,重定向是两个.request.
取参数的值:EL表达式param.myname.