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_HOME\bin;"(由于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:\xxx\xxx\xxxrepository</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 :\Users\qx\workspace\imooc> mvn archetype:generate -DgropId=imooc-arthur -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp

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

 

CMD迁移目录类似linux:

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

2.从C:\Documents and Settings\Administrator>中返回到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 :\Users\qx\workspace\imooc\spring-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:\Users\zhangxy\Downloads\java\spring-mvc-study\src\main\webapp\WEB-INF\jsps 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页面访问成功

posted @ 2017-04-17 10:36  charles999  阅读(226)  评论(0编辑  收藏  举报