Spring-MVC入门
MVC架构M:model,数据模型(JavaBean,业务等)V:View,展示给用户的试图,也就是页面,视图中会对Model层的数据进行对应的处理C:Controller,控制器,用于处理请求,打包数据模型,转发、跳转视图,也就是ServletSpring-MVC,基于Java实现的Web框架,本质上为Servlet特点轻量级,部署快基于请求与响应实现(Servlet的核心内容)约定优于配置,也
MVC架构
M:model,数据模型(JavaBean,业务等)
V:View,展示给用户的试图,也就是页面,视图中会对Model层的数据进行对应的处理
C:Controller,控制器,用于处理请求,打包数据模型,转发、跳转视图,也就是Servlet
Spring-MVC,基于Java实现的Web框架,本质上为Servlet
特点
- 轻量级,部署快
- 基于请求与响应实现(Servlet的核心内容)
- 约定优于配置,也就是说按照官方提供的格式进行编码即可,否则容易出错
DispatcherServlet
Spring-MVC的核心处理器,中心控制器,此控制器接管所有请求与响应的处理
配置
web.xml中配置DispatcherServlet,接管所有的请求
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--添加spring的配置文件-->
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 表示容器在启动时立即加载servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 所有URL都经过此Servlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
请求映射配置中/ 与 /* 的区别
/ :会匹配所有的请求,但是不会解析jsp页面,也就是说xxx.jsp不会被解析
/* :会匹配所有请求与页面,当xxx.jsp被解析时,最后视图返回效果就变为了x/x/xxx.jsp.jsp
Springmvc-Servlet.xml
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--请求Url的前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--请求Url的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
BeanNameUrlHandlerMapping:映射处理器,将请求映射到对应的处理器中
SimpleControllerHandlerAdapter:处理器适配器,将请求适配到对应的处理器,并执行service()
InternalResourceViewResolver:视图解析器,解析所有请求中的视图名称,并查找对应的资源,将数据模型打包分发
编写Controller层
所有的公共配置完成后,接着来处理对应的控制器
public class DemoController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg", "A B C D");
mv.setViewName("hello");
return mv;
}
}
Controller接口:Spring提供的控制层接口,用于处理请求,核心对象ModelAndView
配置映射:<bean id="/hello" class="xx/xx/DemoController"/>
接着在对应的页面中获取由后台返回的数据即可
常见问题
404:可能是由于IDEA的项目部署中,没用引入tomcat对应的jar文件所导致
页面正常调整,但无法获取到msg的变量信息:原因是JSP和Servlet的版本导致EL表达式功能关闭,在JSP页面上添加<%@page isELIgnored="false"%>即可;
Spring-MVC执行原理
1,客户端发送请求到服务器(url)
2,请求通过web.xml中的配置,转接到DispatcherServlet
3,DispatcherServlet会将此请求交由映射器HandlerMapping,映射器会根据请求返回此请求映射的对象
4,映射器将返回到DispatcherServlet,返回的映射器会交由适配器HandlerAdapter
5,适配器HandlerAdapter会映射适配到对应的Controller进行请求处理
6,Controller连接、执行业务,封装数据模型,Controller最后返回一个ModelAndView对象
7,在ModelAndView封装了处理请求后的资源,Model和View,最终转接到DispatcherServlet
8,DispatcherServlet拿到返回的ModelAndView对象之后,通过视图解析器VIewResolver,解析ModelAndView中对应的资源路径名称,返回DispatcherServlet
——注:在Spring MVC允许多个ViewResolve存在,但InternalResourceViewResolver永远在最后一个
9、最终DispatcherServlet会根据解析的视图结果,返回对应的资源页面给客户端
注解开发
1、配置DispatcherServlet,作为MVC的核心,中心控制器必不可少,所有的请求都会经过此控制器
2、Spring配置文件中配置
<context:component-scan base-package="com.zou.controller"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
2.1开启注解扫描配置
2.2开始静态资源过滤,.css .html等
2.3开启自动映射器配置,为所有的请求处理装配映射器(HandlerMapping、HandlerAdapter)
2.4默认视图解析器配置,通过视图解析器解析Controller中返回的视图资源结果
3、基本的配置完成后,进行Controller的编写
@Controller:标注在作为控制器的类上,注册此类为控制器
——控制器中的定义请求的处理方法,返回值为string,返回资源名称
@RequestMapping:可以标注在类中和方法中
标注在方法时,代表直系请求,/method
标注在类上时,为此类中所有的方法级别请求加上请求路径前缀/class/method
@Controller
//@RequestMapping("/t")
public class TestController {
@RequestMapping("/today")
public String today(Model model) {
model.addAttribute("msg", "Hello 2022");
return "today";
}
}
更多推荐
所有评论(0)