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>
原文地址:https://www.cnblogs.com/xibei666/p/6609470.html