Web开发底层就是Servlet.
SpringMVC是基于Spring的一个框架,专门用来做web开发。Spring是容器,IOC能管理对象。使用@Component,@Repository,@Service,@Controller能够创建对象,放到容器中。使用@Cotroller注解创建的是一个普通类的对象,不是Servlet。
执行流程分析
解释:
DispatcherServlet(中央调度器) 是SpringMVC框架的核心。它是一个Servlet,父类是HttpServlet。用于接收用户提交的请求,并把处理结果显示给用户。
接收到用户请求之后,创建SpringMVC容器对象,并且会读取springmvc.xml。这个xml中有组件扫描器<context:cpmponent-san com.mobiletrain...>然后创建controller对象,知道有某些方法,并负责转发给对应的 @Controller。
编写控制器
1@Controller
创建控制器类的对象,接收,处理请求。
1@RequestMapping:
请求映射,把请求绑定到一个方法上,让这个方法去处理请求。
1.2.1属性:value。是一个String,唯一,不能重复。但是可以将多个不同的Value交给同一个方法处理。参考右边的额图
位置:在类或方法上面
像下图这样,@RequestMapping括号后边也可以写值(叫做模块名称),那么访问的时候,地址就应该是 test/some.do 或 test/first.do
1.2.2 属性 Method: 请求方式,RequestMethod.GET、RequestMethod.POST... 不指定时即没有限制。
如果index.jsp里面的请求方式和下面图里写的请求方式不一致,会出现405错误。
1.2.3 接收参数: SpringMVC框架通过DisPatcherServlet调用MyController的方法,框架会提供类型的转换功能。可直接使用 HttpServletRequest,HttoServletResponse,HttpSession
逐个接收参数:
3 @RequestParam
这个注解是用于处理参数名和处理器方法中形参名不一致的问题。下边举例中,粉色的@RequestParam(“rname”)说明的就是把rname赋给name
位置:形参的前面
用对象接收参数:
当参数比较多时,可采用此方法。下图中的Student类,定义了name,age,无参构造getsetter方法,框架会创建形参的对象。
处理器方法的返回值
1 返回ModelAndView:
处理器方法在处理完后,需要跳转到其他资源,且需要在跳转的资源之间传递数据,此时处理器方法返回ModelAndView比较好。当然需提前定义ModelAndView对象。
如果跳转和传递数据任何一个缺失,再用ModelAndView就多余了
2返回String
注意:如果项目中配置了视图解析器,则 return后面不能写全路径。
视图解析器:
3返回void:
不能表示数据和视图。在处理Ajax时,可以使用void返回值。通过HttpServletResponse输出数据。ajax请求服务器端返回的就是数据,和视图无关。
静态资源问题:
什么是静态资源问题?像HTML,js包,图片,css等都属于静态资源。
项目中用了/ 即
<url-pattern>/</url-pattern>
它会替代tomcat中的default,tomcat本身是可以处理静态资源的。被替代之后,所有静态资源都给DispatcherServlet处理,默认情况下它是没有能力处理静态资源的没有控制器对象能处理静态资源的访问。所以静态资源都是404错误。
如何解决静态资源问题
1.xml配置方式
1.1在springmvc中使用如下标签。
原理:声明了一个额外的handler,但是优先级最低,会将请求转发到tomact中名为default的servlet,这个servlet会处理静态资源
<mvc:default-servlet-handler/>
但是还需要加另一一个驱动。因为default-servlet-handler和@RequestMapping是有冲突的,值加了上面这一个标签是不行的。
<mvc:annotation-driven/>
总结起来就是上面这两个标签同时写在springmvc里面。
1.2 加另一种resources标签
加入后框架会创建ResourceHttpRequestHandler这个处理器对象,让这个对象处理静态资源的访问,而不是像第一种方法那样依赖tomcat。
mapping:访问静态资源的地址,使用通配符** location:静态资源在你项目中的位置。
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/html/**" location="/html/" />
<mvc:resources mapping="/js/**" location="/js/" />
1.3 使用一个标签:
实际上是对上一个方法的简化。把一些静态资源放在web.app夹下面的额static夹下面,相当于统一管理了,然后只需要写一句配置就可以
<mvc:resources mapping="/static/**" location="/static/" />
2.注解方式
@Configuration
@EnableWebMvc
public class ResourceConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
整合开发
SpringMVC:视图层,界面层,负责接受请求,显示处理结果。
Spring:业务层,管理service,dao,工具类对象。
Mybatis:持久层,访问数据库。
SpringMVC容器是spring容器的子容器,可以访问父容器。子容器中的controller可以访问父容器中的service对象
开发步骤:
0. 确定数据库,表。
1.新建maven,web项目
2.加入依赖:Springmvc,spring,mybatis 3个框架的依赖,jackson依赖,mysql驱动,druid连接池。jsp,servlet依赖。
3.写web.xml
1)注册DispatcherServlet,目的:a:创建springmvc容器对象,才能创建controller类对象。b:创建servlet,才能接收用户请求。
2)zhucespring监听器:ContextLoaderListener。目的:创建spring容器对象,才能创建servlet,dao对象。
3)注册字符集过滤器,解决post乱码问题。
4.创建包,Controller包,service,dao等
5.写springmvc,spring,mybatis配置文件
6.写代码,dao接口mapper,service实现类,controller实体类等
7.jsp界面