• SpringMVC_1


    MVC:

    next:SpringMVC_2_实操Controller

    ---1-2前端控制器---------------------------------------------------------

    Front controller:分发调度

    ---1-3 MVC概念---------------------------------------------------------

    Model-View-Controller

    View:视图层

    Model:业务数据的信息表示,关注支撑业务的信息构成,通常是多了业务实体的组合。

    Controller:调用业务逻辑产生合适的数据(Model)传递数据给视图层用于呈现。

    MVC是一种架构模式

      程序分层,分工各做,既相互独立,又协同工作。

    MVC是一种思考方式

      需要将什么信息展示给用户,如何布局,调用那些业务逻辑

    ===Spring MVC的基本概念=================================

    2-1 Spring MVC的静态概念---------------------------------------------------------

    render [ˈrɛndɚ]  v.    给予;使成为;递交;表达

    HandlerAdapter(适配器模式) 

    1.DispatcherServlet:Front controller

    2.Controller

    3.HandlerAdapter: DispatcherServlet内部使用的一个类,在DispatcherServlet中调用的controller就是以HandlerAdapter形式出现的。 

      DispatcherServlet--use--> HandlerAdapter(适配器模式)

    4.HandlerInterceptor(拦截器) :在要拦截的对象前后加料 

      HandlerInterceptor<interface>:

        void afterCompletion();

        void postHandle();

        booleanpreHandle(); 

    5.HandlerMapping: 

      5.1 Help DispatcherServlet to get the right controller.

      5.2 Wrap controller with HandlerInterceptor.

    6.HandlerExecutionChain:  Excution Chain(using reflaction)

    HandlerInterceptor 包裹Controller

      Excution Chain:preHandler-> Controller method ->postHandle->afterCompletion    

    7.ModelAndView:

      ModelAndView(modle的具体表现,map可以实现model的功能,Model 和map都会转成ModelAndView)

    8.ViewResolver:视图解析器

      Help DispatcherServlet to Resolve the right View to render page

    9.View:V in MVC Responsible for page rendering.

    ---2-2 Spring MVC的动态概念---------------------------------------------------------

    1.粗体必须写的部分,斜体配置

     

    2.

     

     ===3 Maven==================================================

    3-1 Maven介绍

    [Maven]Maven入门教程 http://www.cnblogs.com/jingmoxukong/p/5591368.html

    maven核心,pom.xml详解(转) http://www.cnblogs.com/qq78292959/p/3711501.html

    转-我的Maven POM配置 http://www.cnblogs.com/GarfieldTom/p/3707160.html

    POM(Project Object Model):

      An xml file(pom.xml)主要配置文件

        Contains information:dependencies,developers,organization,licenses...

     例子: 

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.garfield.gserver</groupId>
        <artifactId>GServer</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <dependencies>
    
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.0-beta9</version>
            </dependency>
         </dependencies>
    </project>

    Dependency Management:

      Dependency,transtive Dependency(传递依赖)

      如·/WEB-INF/lib中引入的各种包

    Coordinates(坐标):通过以下四个项标识groupId,artifactId,version,packaging

        <groupId></groupId>
                <artifactId></artifactId>
                <version></version>

        <packaging></packaging>(缺省时,表示JAR包)

    如:

         <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>

        <scope>test</scope>(非坐标项)
            </dependency>

    ---3-2 Maven的安装---------------------------------------------------------------------------------------------------

    1. 下载并解压Maven:

      Maven.apache.org/download.cgi

    2. 配置环境变量(M2_HOME,Path):

      新建环境变量M2_HOME变量名M2_HOME,变量值(路径)

      Path编辑添加"%M2_HOMEin;"(由于Path内容太长,把Path的内容粘贴到记事本里添加,再copy回去更方便)

      检查是否配置好:1)cmd.exe

              2)mun -version

              3) 检查版本号是不是配置的

    3. 配置Maven配置文件(本地仓库路径,镜像)见3-3

    ---3-3 Maven的配置---------------------------------------------------------------------------------------------------

    Maven配置文件

      路径 安装路径/conf/setting.xml文件拷贝到%HOME%.m2目录

      (没创建过maven项目时,该目录不存在,手动创建,或者执行过Maven命令,系统自动创建之后再操作)

      每次Maven升级之后,就不需要更改设置了,因为设置文件保存到了%HOME%.m2目录。

    配置项:

      1) <localRepository>,可选项,不配置时,默认为${user.home}/.m2/repository

        <localRepository>C:xxxxxxxxxrepository</localRepository>

      2) <mirrors>核心仓库的副本,按照官方推荐使用了英国的镜像。以后下载软件包就会从此下载,减低中心仓库负载,防止无法下载的情况发生

      <mirror>

        <id>UK</id>

        <name>UK Central</name>

        <url>http://uk.maven.org/maven2</url>

        <mirrorOf>central</mirrorOf>

      </mirror>

    </mirrors>

    ---3-4 用Maven创建项目---------------------------------------------------------------------------------------------------

    Eclipse继承Maven

    1. 下载Eclipse(4.3 kepler,自带m2e),其他版本,搜索如何继承m2e插件

    2. 配置Eclipse

     Windows/Preference/Maven展开

      -Installations Add安装的版本(点击Add,指向安装路径),勾选

      -User Settings

        确保“User Settings”里是%HOME%.m2目录的配置文件(配置过3-3的内容)

     apply-ok

    在cmd.exe执行下面的命令 创建Maven项目

    -DartifactId=spring-mvc-study (根目录名称)

    DarchetypeArtifactId:目录的类型

    mvn archetype:generate -DgropId=imooc-arthur -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp

    命令必须在workspace 下imooc目录之下执行

    如 PS C :Usersqxworkspaceimooc> mvn archetype:generate -DgropId=imooc-arthur -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp

    执行,有没有设的coordinate会提示使用默认,继续点击回车,知道提示创建完成

    CMD迁移目录类似linux:

    1.如果我们想访问c盘,那么我们需要在命令行中输入c:

    2.从C:Documents and SettingsAdministrator>中返回到C盘根目录:如下图所示:我们只需要在命令行中输入cd..就可以返回上层目录

    3.进入mm文件夹和mm文件夹下的nn文件夹和oo文件夹。 在命令行中输入cd mm即可访问mm文件夹。

    总结

    总结下:输入盘符 如C: 然后回车,相当于进了C盘(c盘一般进的是桌面目录)

    输入 cd 目录名 然后回车(目录名是c盘中的一级目录名,也可为c盘中的目录路径)。如cd mm即是进入了mm文件夹。

    3. Hello Spring MVC

    ---3-5 Hello Spring MVC---------------------------------------------------------------------------------------------------

     Eclipse -工程向导栏(Navigator)-right click-Import-

      Maven-Existing Maven Project-next- Root directory(Browse选择 创建的路径C :Usersqxworkspaceimoocspring-mvc-study pom.xml勾选)-Finish导入工程。

    工程结构:src-main-webapp-WEB-INF-web.xml

     工程-properties-Java build Path中 Java目录发生缺失-手动添加

    手动做成java folder,与此类似,做测试时,可以添加test和test下的java和resources

    2.pom.xml配置

    2.1Packging默认为war 改为jar或其他喜欢的选项。

    2.2 dependencies和dependencyManagement,plugins和pluginManagement有什么区别?

    dependencyManagement是表示依赖jar包的声明,即你在项目中的dependencyManagement下声明了依赖,maven不会加载该依赖,dependencyManagement声明可以被继承。

    dependencyManagement的一个使用案例是当有父子项目的时候,父项目中可以利用dependencyManagement声明子项目中需要用到的依赖jar包,之后,当某个或者某几个子项目需要加载该插件的时候,就可以在子项目中dependencies节点只配置 groupId 和 artifactId就可以完成插件的引用。

    dependencyManagement主要是为了统一管理插件,确保所有子项目使用的插件版本保持一致,类似的还是plugins和pluginManagement。

    2.3 pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>imooc-arthur</groupId>
     <artifactId>spring-mvc-study</artifactId>
     <version>1.0.0-SNAPSHOT</version>

    //1.添加变量,在工程量较大时,可以清晰的看到使用的软件包版本

    <properties> 
      <commons-lang.version>2.6</commons-lang.version>
      <slf4j.version>1.7.6</slf4j.version>
      <spring.version>4.1.3.RELEASE</spring.version>
      <jackson.version>2.5.4</jackson.version>
     </properties>

    //2.依赖管理,当依赖的包(如果SpringMVC依赖了Spring包,Hibernate也依赖了Spring包,当两个依赖的版本不一致时,使用依赖管理指定的版本)详见2.2
     <dependencyManagement>
      <dependencies>
       <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>${spring.version}</version>
        <type>pom</type>
        <scope>import</scope>
       </dependency>
      </dependencies>
     </dependencyManagement>

    /* 3.依赖管理:<dependencies>内 构建任意多个依赖的软件包 由于在<dependencyManagement>中指明了spring包的版本,在  <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
      </dependency>中就不需要指定版本了*/

     <dependencies>
      <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
      </dependency>

      <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
       <version>${commons-lang.version}</version>
      </dependency>


      <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>${slf4j.version}</version>
       <exclusions>
        <exclusion>
         <artifactId>slf4j-api</artifactId>
         <groupId>org.slf4j</groupId>
        </exclusion>
       </exclusions>
      </dependency>

      <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>${slf4j.version}</version>
      </dependency>

      <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
       <version>2.5</version>
      </dependency>

      <dependency>
       <groupId>commons-fileupload</groupId>
       <artifactId>commons-fileupload</artifactId>
       <version>1.3.1</version>
      </dependency>

      <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>${jackson.version}</version>
      </dependency>

     </dependencies>

    //插件 

    <build>
      <plugins>
       <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.2.2.v20140723</version>
       </plugin>
      </plugins>
     </build>

    </project>

    EL表达式取值:

    <spring.version>4.1.3.RELEASE</spring.version>

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-framework-bom</artifactId>
                    <version>${spring.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>

    3. 配置完成后,创建web应用

    3.1 web.xml

    由于使用SpringMVC,配置DispatcherServlet

    Spring MVC静态资源处理

    采用<mvc:default-servlet-handler />

    在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

    一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

    <mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <display-name>Spring MVC Study</display-name>
      <!-- Spring应用上下文, 理解层次化的ApplicationContext -->
      <context-param>
             <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
      </context-param>
      
      <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
      </listener>
      
      <!-- DispatcherServlet, Spring MVC的核心 -->
      <servlet>
            <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- DispatcherServlet对应的上下文配置, 默认为/WEB-INF/$servlet-name$-servlet.xml
             -->
            <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>mvc-dispatcher</servlet-name>
            <!-- mvc-dispatcher拦截所有的请求-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    mvc-dispatcher-servlet.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:context="http://www.springframework.org/schema/context"
        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/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-dispatcher的DispatcherServlet使用, 提供其相关的Spring MVC配置 -->
    
        <!-- 启用Spring基于annotation的DI, 使用户可以在Spring MVC中使用Spring的强大功能。 
         激活 @Required @Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等标注
    --> <context:annotation-config /> <!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 --> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsps/" /> <property name="suffix" value=".jsp" /> </bean>
    </beans>

     controller:

    package com.imooc.mvcdemo.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    //告诉DispatcherServlet相关的容器, 这是一个Controller, 管理好这个bean哦
    @Controller
    //类级别的RequestMapping,告诉DispatcherServlet由这个类负责处理以跟URL。
    //HandlerMapping依靠这个标签来工作
    @RequestMapping("/hello")
    public class HelloMvcController {
        
        //方法级别的RequestMapping, 限制并缩小了URL路径匹配,同类级别的标签协同工作,最终确定拦截到的URL由那个方法处理
      //note: 拦截host:8080/hello/mvc
    @RequestMapping("/mvc") public String helloMvc() { //视图渲染,/WEB-INF/jsps/home.jsp return "home"; } }

    C:UserszhangxyDownloadsjavaspring-mvc-studysrcmainwebappWEB-INFjsps home.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>Insert title here</title>
    </head>
    <body>
    Hello Spring MVC!
    Here is iMooc!
    </body>
    </html>

    启动:

    1 cmd.exe

    2 spring-mvc-study根目录下 执行 mvn jetty:run (jetty:pom.xml中plugin的插件 提供一个运行的容器环境)

    启动容器:

    启动成功:

     

     

    通过浏览器访问:

    http://localhost:8080/hello/mvc页面访问成功

  • 相关阅读:
    停滞的代码
    民兵葛二蛋大结局
    该开始BS了
    今天写出了第一个.NetBS应用
    读源码,仿照
    MVN,老天怎么回事?
    从哪里入手
    学习Java了
    工厂方法模式与简单工厂
    转:悟透JavaScript
  • 原文地址:https://www.cnblogs.com/charles999/p/6705173.html
Copyright © 2020-2023  润新知