第一步:导入jar包
第二步:配置DispatcherServlet
DispatcherServlet本质是一个Servlet,在spring-webmvc包中,在servlet2.5之前 springMVC配置文件的默认命名规则为xxx-serlvet.xml,xxx是为DispatcherServlet起的servlet的名称,也就是<servlet-name>标签中的值,并且默认情况下,xxx-servlet.xml文件的位置是WEB-INF目录下,不过从servlet2.5之后可以通过servlet的初始化参数进行配置,也就是通过<init-param>标签来配置,
【注意:在spring与dynamic web project工程进行整合事,有一个spring的配置文件加载位置的配置,是通过web应用工程的配置信息,也就是<context-param>标签来配置】
org.springframework.web.servlet.DispatcherServlet的继承关系图
配置文件信息
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <servlet> <!-- DispatcherServlet本质是一个Servlet,在spring-webmvc包下,在servlet2.5之前 springMVC配置文件的默认命名规则为xxx-serlvet.xml,xxx是为DispatcherServlet起的servlet的名称, 也就是<servlet-name>标签中的值,并且默认情况下,xxx-servlet.xml文件的位置是WEB-INF目录下 不过从servlet2.5之后可以通过servlet的初始化参数进行配置,也就是通过<init-param>标签来配置, 【注意:在spring与dynamic web project工程进行整合事,有一个spring的配置文件加载位置的配置, 是通过web应用工程的配置信息,也就是<context-param>标签来配置】 org.springframework.web.servlet.DispatcherServlet --> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 修改springMVC配置文件的路径和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 自启动配置,表示在tomcat一启动,就加载该Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
第三步;配置SpringMVC配置文件
springMVC配置文件中要配置,
(1)处理器handler,也就是controller,处理器部门是需要程序员自己编写代码,继承一个Controller接口,或者采用Controller与RequestMapping注解,处理器是处理器适配器(HandlerAdapter)调用的,
(2)处理器映射器HanderMapping,本质是一个对一个Map容器进行封装,把key是请求路径,value是处理器,就是把请求路径和处理器做了一个对应,处理器映射器是DispatcherServlet调用的,调用完之后会返回一个HanderExecutionChain,另外一种说法是HandlerMapping 将会把请求映射为HandlerExecutionChain 对象,HanderExecutionChain会封装一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器
(3)处理器适配器HanderAdapter,也是由DispaterServlet进行调用,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器; 【如果不配置处理器映射器,会采用默认的,可以不用配置】
(4)视图解析器:也是又DsipatcherServlet进行调用,把ModelAndView进行解析,返回Veiw给DispaterServlet。【如果不配置,采用默认的】
<?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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 注册 处理器,也就是controller --> <bean id="handler" class="com.xxxx.controller.DemoController"></bean> <!-- 注册HandlerMapping 处理器映射器 会根据url请求解析出应该调用哪一个 处理器,但是调用并不是处理器映射器调用 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <!-- key解析出来的请求的逻辑名 value-ref代表要调用的控制器 --> <entry key="demo" value-ref="handler" ></entry> </map> </property> </bean> <!-- 注册 处理器适配器,处理器适配器会调用 处理器 处理器适配器可以不用配置,会走默认值 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 在spring容器中 ,注册视图解析器 同样视图解析器也可以不用配置,也会走默认值 InternalResourceViewResolver的父类中有两个属性:prefix,suffix 代表前缀和后缀 ModelAndView modelAndView =new ModelAndView("main"); 前缀和后缀会对ModelAndView中的参数进行拼接,拼接成"/main.jsp", 一般请情况下,我们会使用默认的视图解析器,但是有时候我们会在WebContent下建立一个page目录用来存放 jsp文件,此时在写ModelAndView modelAndView =new ModelAndView("main.jsp");是,需要前面加上 page/main.jsp,为了省略page/一般会把prefix配置成page/ 在返回ModelAndView时,默认会走请求转发,在InternalResourceViewResolver父类UrlBasedViewResolver 中有 public static final String REDIRECT_URL_PREFIX = "redirect:"; public static final String FORWARD_URL_PREFIX = "forward:"; 可以通过配置让其走重定向 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
第四步:编写处理器,也就是controller
public class DemoController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("执行了springmvc的控制器"); //具备视图和传值的功能 ModelAndView modelAndView =new ModelAndView("main"); return modelAndView; } }
第五步:运行
让项目跑在tomcat中,然后通过:http://localhost:8080/springmvc01/demo进行访问,会执行DemoController中的handleRequest()这个方法。
注意访问路径中的demo,这个值就是在springmvc配置文件中,处理器映射器的中urlMap中的一个key
原文地址:https://www.cnblogs.com/cplinux/p/9783433.html