springMVC学习二 原始springMVC环境搭建

第一步:导入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

 

猜你喜欢

转载自www.cnblogs.com/cplinux/p/9783433.html