zoukankan      html  css  js  c++  java
  • Spring MVC-学习笔记(1)认识spring mvc

    1、基于XML Schema、Controller接口的spring mvc简单例子

      

      1》创建一个动态Web项目,选择同时创建web.xml文件

      2》在WEB-INF/lib中粘贴spring框架jar包,同时粘贴commons-logging-1.2.jar、servlet-api.jar(Tomcat的安装libs中可以找到)

      3》编写核心控制器HelloController.java

    package com.lfy.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    /**
     * HelloController是一个实现Controller接口的控制器
     * 可以处理一个单一的请求动作
     * @author lfy
     * HttpServletRequest、HttpServletResponse的引入需要Tomcat的servlet-api.jar
     * 在构建路径中将其添加为外部jar即可。
     */
    public class HelloController implements Controller {
    
        private static final Log log=LogFactory.getLog(HelloController.class);
        
        /**
         * 该方法的参数对应请求的HttpServletRequest和HttpServletResponse。
         * 该方法必须返回一个包含视图名或模型的ModelAndView对象。
         */
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            log.info("handleRequest()被调用");
            ModelAndView mv=new ModelAndView();
            //添加模型数据,可以是任意的pojo对象
            mv.addObject("message","Hello World!");
            //设置逻辑视图名,视图解析器会根据名字解析到具体的视图页面
            mv.setViewName("/WEB-INF/content/welcome.jsp");
            //返回ModeAndView对象
            return mv;
        }
    }

      4》编写web.xml、springmvc-config.xml

      web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>springMVCTest-1.0.0</display-name>
      <!-- 定义springMVC的前端控制器  -->
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <!-- 让springMVC的前端控制器拦截所有请求  -->
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

        也可以将springmvc-config.xml文件放置在类路径下,此时配置的方式为:

    <param-value>classpath*:config/springMVC/springmvc-config.xml</param-value>

        springmvc-config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
          
          <!-- 配置Handle,映射"/hello"请求 -->
          <bean name="/hello" class="com.lfy.controller.HelloController"/>
          
          <!-- 处理映射器将bean的name作为url进行查找,需要在配置Handler时指定name(即url) -->
          <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 
          
          <!-- SimpleControllerHandlerAdapter是一个处理器适配器,所有处理器适配器都要实现HandlerAdapter接口 -->
          <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
          
          <!-- 视图解析器 -->
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    </beans>

      5》添加welcome.jsp简单返回页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>welcome</title>
    </head>
    <body>
      ${requestScope.message}
    </body>
    </html>

       6》运行

    2、基于注解的的spring mvc简单例子。在上面的例子上,进行修改。

      1》HelloController.java

    package com.lfy.controller;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * 最简单的基于注解的springMVC
     * @author lfy
     *
     */
    @Controller
    public class HelloController {
    
        private static final Log log=LogFactory.getLog(HelloController.class);
        
        @RequestMapping(value="/HelloController/hello")
        public ModelAndView hello() {
            
            log.info("hello()被调用");
            ModelAndView mv=new ModelAndView();
            //添加模型数据,可以是任意的pojo对象
            mv.addObject("message","Hello World!");
            //设置逻辑视图名,视图解析器会根据名字解析到具体的视图页面
            mv.setViewName("/WEB-INF/content/welcome.jsp");
            //返回ModeAndView对象
            return mv;
        }
    }

       2》springmvc-config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
           http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
           http://www.springframework.org/schema/mvc 
           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-4.0.xsd">
          
          <!-- spring可以自动扫描base-package下面的包或者子包下的java文件,如果扫描
                                     到有spring的相关注解的类,则把这些类注册为spring的bean -->
          <context:component-scan base-package="com.lfy.controller"/>
          
          <!-- 配置annotation类型的处理映射器  -->
          <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
          
          <!-- 配置annotation类型的处理器适配器   -->
          <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
          
          <!-- 视图解析器 -->
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    </beans>

       3》运行

     3、springMVC核心4类配置

       配置文件总体上有4类配置:springmvc前端控制器处理器映射器处理器适配器视图解析器

       前端控制器配置:
          第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析

          第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析,如使用<mvc:default-servlet-handler/>。
      使用此种方式可以实现 RESTful风格的url。

       处理器映射器:
         非注解处理器映射器(了解)
         注解的处理器映射器(掌握)
         对标记@Controller类中标识有@RequestMapping的方法进行映射。在@RequestMapping里边定义映射的url。使用注解的映射器不用在xml中配置url和Handler的映射关系。

       处理器适配器:
         非注解处理器适配器(了解)
         注解的处理器适配器(掌握)
         注解的处理器映射器和注解的处理器适配器是配对使用。不能非注解的映射器和注解的适配器使用。

    <!--使用<mvc:annotation-driven>,默认还加载了很多参数绑定的方法-->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--可替代以下的映射器、适配器的注解配置声明-->
    <!-- 配置annotation注解类型的处理映射器  -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <!-- 配置annotation注解类型的处理器适配器   -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

        视图解析器:

          主要是了解前缀、后缀的作用。

    4、springMVC的一般运行步骤

        第一步:发起请求到前端控制器(DispatcherServlet)
        第二步:前端控制器请求处理器映射器HandlerMapping查找Handler
                可以根据xml配置、注解进行查找
        第三步:处理器映射器HandlerMapping向前端控制器返回Handler
        第四步:前端控制器调用处理器适配器去执行Handler
        第五步:处理器适配器去执行Handler
        第六步:Handler执行完成给处理器适配器返回ModelAndView
        第七步:处理器适配器向前端控制器返回ModelAndView
        第八步:前端控制器请求视图解析器去解析视图
               根据逻辑视图名解析成真正的视图(jsp)
        第九步:视图解析器向前端控制器返回view
        第十步:前端控制器进行视图渲染
               数据填充到request域
        第十一步:前端控制器向用户响应结果。

  • 相关阅读:
    小X的密码破译
    小X的加法难题
    足球联赛
    机器分配
    化装晚会
    Soundex编码
    迷之阶梯
    使用JMeter做压力测试
    SCOI 2010 序列操作
    动态求区间K大值(权值线段树)
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11374398.html
Copyright © 2011-2022 走看看