文章目录
执行步骤
1:用户想要点击一个页面,点击的时候就进入了DispatcherServlet(分派程序器)
2.DispatcherServlet(分派程序器)
调用BeanNameUrlHandlerMapping(处理程序映射,找对象)去找想要点击的页面的程序类
3.BeanNameUrlHandlerMapping(处理程序映射)找到了你要的那个页面的程序类,
4.然后调用SimpleControllerHandlerAdapter(简单的处理程序)
5.SimpleControllerHandlerAdapter(简单的处理程序)拿程序类
调用Controller(真正的控制器)去数据库交互等操作
6.Controller(真正的控制器)操作完以后
调用InternalResourceViewResolver(资源视图解析程序)去准备视图就是前端页面
7.InternalResourceViewResolver(资源视图解析程序)准备好视图后返回DispatcherServlet分派程序器)
8.DispatcherServlet分派程序器)再提交给用户,用户看到了页面和想要的数据
web.xml:默认都是这个,配置DispatcherServlet
本质是一个servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置dispatcherservlet类-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--绑定spring.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<!--加载优先级-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--绑定dispatcherservlet类,默认返回/路径-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
springmvc-servlet.xml:非注解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置处理映射的类,就是找到你需要调用的页面的对应的类-->
<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">
<!--获取返回的名字,加上前后缀,去找到对应的jsp-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--将自己实现的类加入容器,在BeanNameUrlHandlerMapping的时候会去找这个的bean-->
<bean class="com.rod.HelloController" id="/hello"/>
</beans>
controller实现类(非注解)
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","牛逼");
//这个等会就变成hello.jsp
modelAndView.setViewName("hello");
return modelAndView;
}
}
注解:@Controller的本质可能差不多就是个controller接口,用这个注解就不用实现接口了
@Controller
public class RodController {
//返回一个映射,映射的地址为 /hello ,加入到相应的前端文件中
@RequestMapping("/hello")
public String hello(Model model){
//Model用来映射jsp中的${xx}的数据,传递数据
model.addAttribute("haha","我是你爸爸");
//return:返回的是前端页面的名字,返回的string调用配置文件中的视图解析器
//名字加上前后缀,找到对应名字的前端页面(.jsp .html ...)
return "hello";
}
}
springmvc-servlet.xml:注解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="rod.controller"/>
<!--默认mvc不处理静态的资源 .html .css .MP3 ...-->
<mvc:default-servlet-handler/>
<!--开启注解驱动-->
<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>