SpringMVC基础:运⾏原理流程图及实现,controller接⼝实现,注解
实现
前⾔:dispatcherservlet⾥包含handlermapping和handleradapter两个处理器
dispatcherservlet位置在所有请求之前的,也就是说所有请求都要通过dispatcherservlet来处理,这也是springMVC的核⼼
handlerMapping作⽤:根据求情中到相应的handler(controller)
handleradapter作⽤:去适配(到)并执⾏对应handler(controller)的⽅法,如处理⽅法参数、相关注解、数据绑定、消息转换、返回值、调⽤视图解析器等等。
MVC:Model(dao,service) View(jsp) Controller(servlet)
模型 视图 控制器
⼀,web开发的两个发展阶段
⼆,SpringMVC流程图(官⽅中⽂版)
实际上(具体流程)SpringMVC流程图注意:实线部分Spring已经完成的
我们只需要是实现虚线部分
三,SpringMVC的简单搭建(底层实现)
1.导⼊MVC依赖(添加web⽀持)
使⽤Idea做web开发时,注意:别忘了在项⽬结构中的 artifacts/WERB-NF下创建⼀个lib,并将依赖jar包全部导⼊其中
2.配置l,注册DispatcherServlet
DispatcherServlet,是servlet上⼀层,对⽤户和servlet之间进⾏接收或转发(分发的作⽤),是SpringMVC的特有的, 因为有封装了⼀层,是程序更加简易
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联⼀个springmvc的配置⽂件:【servlet-name】-l-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<!--启动级别-1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有请求:(不包括,jsp)-->
<!--/* 匹配所有请求:(包括,jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
注意:/和/*的区别
答:/:只匹配所有请求,不会去匹配jsp页⾯
/*:匹配所有请求,会去匹配jsp页⾯
3,创建控制器(类)
package ller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {流程图转换为ns图
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在ModelAndView
mv.addObject("msg","HelloSpringMVC!");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello");//: /WEB-INF/jsp/hello.jsp
return mv;
}
}
4,创建bean配置⽂件(l)
作⽤:将对应类导⼊springIOC容器中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
xmlns:aop="/schema/aop"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd
/schema/context
/schema/context/spring-context.xsd
/schema/aop
/schema/aop/spring-aop.xsd">
<!--处理映射器(url处理器)-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器适配器(url适配器)-->
<!--视图解析器-->
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--Handler-->
<bean id="/hello" class="ller.HelloController"/>
</beans>
SpringMVC⼯作流程⼩结:1,⽤户操作,⽣成⼀个请求(servlet)
2.这个servlet进⼊到SpringMVC的DispatcherServlet(请求分发器),通过映射处理器(BeanNameUrlHandlerMapping)的execution⽅法解析,获得参数,返回给请求分发器,
3.DispatcherServlet在将信息传给url/映射适配器,通过它去相对应controller,控制层的接⼝实现类,
4.controller将已经封装好的model和view传回给适配器(HandlerAdapter),适配器再传给dispatcherServlet
5.最后跳转页⾯,并将model部署到页⾯中实现后台与⽤户的交互
四,注解实现
web映射
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="/xml/ns/javaee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Spring IOC容器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
xmlns:aop="/schema/aop"
xmlns:mvc="/schema/mvc"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd
/schema/context
/schema/context/spring-context.xsd
/schema/aop
/schema/aop/spring-aop.xsd
/schema/mvc
/schema/mvc/spring-mvc.xsd">
<!--指定要扫描的包,这个包下的注解就会⽣效-->
<context:component-scan base-package="ller"/>
<!--让springmvc不处理静态资源 .css .js .mp3 .mp4-->
<mvc:default-servlet-handler/>
<!--
⽀持mvc注解驱动
在spring中⼀般采⽤@RequestMapping,如果向@RequestMapping⽣效,
必须向上下⽂中注册DefaultAnnotationHandleMapping,映射处理器(url处理)
和以⼀个AnnotationMethodHandleAdapter,
这两个⼀个是作⽤到类上,⼀个作⽤到⽅法上去处理
⽽annotation-driver配置⾃动帮助我们进⾏属性注⼊操作
-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Controller模拟控制器接⼝
package ller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
//请求映射器
@RequestMapping("/h1")
public String hello(Model model){
//封装数据
model.addAttribute("msg","hello,springmvc");
return "hello";//页⾯跳转
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论