• Spring MVC基础知识整理➣环境搭建和Hello World


    概述

      Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 mvc架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

    环境搭建

      所需软件

      Eclipse:下载

      Tomcat: 8.0.36 下载 

      JDK:1.8.0_60 下载

      Spring-framework: 4.3.7.RELEASE 下载

      commons-logging-1.1.1.jar 下载

      环境搭建

      Eclipse新建web项目,将Spring-framework Jar文件放到WEB-INFo下的Lib文件夹下,配置web.xml

    HelloWorld-Demo搭建演示

       配置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>MDBIMVC</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
    <!--设置mvc-spring配置,映射到springservletconfig.xml--> <servlet> <servlet-name>SpringMVCService</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springservletconfig.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
    <!--设置mvc文件,指向所有网站目录/--> <servlet-mapping> <servlet-name>SpringMVCService</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

      <!--设置.css、.jpg、.js、.htm文件处理使用默认服务处理-->
      <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
      <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping>
      <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>
      <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.txt</url-pattern> </servlet-mapping>
      <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
    </web-app>

      在项目的src目录下新建springservletconfig.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:p="http://www.springframework.org/schema/p" 
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:util="http://www.springframework.org/schema/util"
      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/util
      http://www.springframework.org/schema/util/spring-util.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
    
    <!-- 开启注解映射支持 --> <mvc:annotation-driven/> <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 --> <mvc:default-servlet-handler/> <!-- 开启controller注解支持 --> <!-- use-default-filters="false" 只扫描指定的注解 --> <context:component-scan base-package="justin.com.controllers" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

    <mvc:annotation-driven/> 开启注解映射支持,它是为了简化配置的缩写形式,它相当于以下2个配置:

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

    扫描指定Controllers

    <context:component-scan base-package="justin.com.controllers" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    component-scan的几个属性:

      1、base-Packages:Spring将扫描的基础package名,Spring会扫描该包以及其子孙包下的所有类;

      2、use-Default-Filters:默认为true,此时Spring扫描类时发现如果其被标注为 @Component、@Repository、@Service、@Controller则自动实例化为bean并将其添加到上下文中,如果设置为false,即使将其标注为@Component或者其他,Spring都会忽略;

      3、include-Filters 指定扫描时需要实例化的类型,我们可以从名字看到这是一个Filter,你可以自己定义该Filter,Spring为我们提供了一套方便的实现,我们可以根据标注、类、包等相关信息决定当扫描到该类时是否需要实例化该类,需要注意的是如果你仅仅想扫描如@Controller不仅要加includeFilters,还需要将useDefaultFilters设置为false;

      4、exclude-Filter 指定扫描到某个类时需要忽略它,实现和上一个Filter一样,区别只是如果Filter匹配,Spring会忽略该类

    转换到指定的视图格式:prefix+XXX+.jsp

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>   
       <property name="contentType" value="text/html"/>         
       <property name="prefix" value="/WEB-INF/views/"/>
       <property name="suffix" value=".jsp"/>
    </bean>

    新建HelloWorldController:在Src目录下,新建类HelloWorldController,代码如下

    package justin.com.controllers;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.catalina.connector.Request;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    
    @Controller
    @RequestMapping("/helloworld")
    public class HelloWorldController  {
    
        @AuthPassport
        @RequestMapping(value={"/*","/say"},method=RequestMethod.GET)
        public ModelAndView China() 
        {        
            ModelAndView modelAndView = new ModelAndView();  
            modelAndView.addObject("message", "Hello World!");  
            modelAndView.setViewName("HelloWorld/CIndex");          
            return modelAndView;
        }
    }

    代码解析如下:

    @Controller是mvc spring的注解,理解成控制器Controller;

    @RequestMapping也是mvc注解,可理解成路由的映射,其中RequestMapping的方法参数还可以这么使用:

    --第一种使用方式:指定默认值,匹配URL中地址(/helloworld)请求
    @RequestMapping("/helloworld")
    --第二种使用方式:指定特定值,可以是单个值也可以是多个值,匹配RUL地址,还指定请求的方式; @RequestMapping(value
    ={"/*","/say"},method=RequestMethod.GET)

    --第三种使用方式:匹配正则,即参数cname是字符,id为数字
    @RequestMapping(value="/City/{cname:\w+}-{id:\d+}",method=RequestMethod.GET)

    --第四种使用方式:匹配请求headers头,header中必须包含cookie值
    @RequestMapping(value="CHome",method=RequestMethod.GET,headers="Cookie")
    --第五中使用方式:url必须包含参数example或者不包含exacmle(params="!example")
    @RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET})
    --第六使用方式:url必须参数example必须等于(params="example=abc")或者不等于某个值(params="example!=abc")
    @RequestMapping(value="/paramstest", params="example", method = {RequestMethod.GET})

    ModelAndView 是mvc spring中,用于传递视图的中间类,ModelAndView 中包含设置view名称setViewName("视图名称")和传递视图实体数据addObject("key","value");

    在WEB-INF下新建文件夹views/HelloWorld/CIndex.jsp,前台通过${message}获取后台传入的值

    <%@ 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">
    </head>
    <body>
        <p>Hi,I'm China Index Page </p>
        <p>${message}</p>
    </body>
  • 相关阅读:
    [NOI2009]管道取珠 DP + 递推
    poj3207 Ikki's Story IV
    NOIP2016Day1T2天天爱跑步(LCA+桶)
    NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
    NOIP2016Day1T3换教室(floyd+期望dp)
    bzoj1854: [Scoi2010]游戏(匈牙利) / GDKOI Day2 T2(最大流)
    [CodeVs4927]线段树练习5
    基数排序的奇技淫巧
    bzoj2724: [Violet 6]蒲公英(离散化+分块)
    bzoj1483: [HNOI2009]梦幻布丁(链表+启发式合并)
  • 原文地址:https://www.cnblogs.com/xibei666/p/6609470.html
Copyright © 2020-2023  润新知