Spring 4.2.4.RELEASE MVC 学习笔记 - 3(咋个办呢 zgbn)

41 篇文章 0 订阅
20 篇文章 0 订阅

Spring 4.2.4.RELEASE MVC 学习笔记


    从这开始,进入Spring4.2.4的学习,由于使用maven构建的项目,所以项目中pom.xml优先介绍一下。
    先看一下framework_spring项目的最初项目目录。

这里写图片描述

    在看看maven的pom.xml文件。

pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <!-- 因为是 _total项目的子项目 -->
        <groupId>cn.vfire.frameword</groupId>
        <artifactId>total</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>framework_spring</artifactId>
    <packaging>war</packaging>
    <name>framework_spring Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>

        <!-- 导入junit jar包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- 导入jsp servlet规范jar包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>

    </dependencies>


    <build>

        <finalName>framework_spring</finalName>

        <!-- 修改maven编译输出目录 -->
        <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
        <testOutputDirectory>src/main/webapp/WEB-INF/classes</testOutputDirectory>


        <plugins>
            <!-- 添加一个mavne的插件,作用是在我通过maven发布的时候,能将依赖的jar复制一份到我指定的目录下。(个人比较懒) -->
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-lib-src-webapps</id>
                        <phase>package</phase>
                        <configuration>
                            <tasks>
                                <delete dir="src/main/webapp/WEB-INF/lib" />
                                <copy todir="src/main/webapp/WEB-INF/lib">
                                    <fileset dir="${project.build.directory}\${project.build.finalName}\WEB-INF\lib">
                                        <include name="*" />
                                    </fileset>
                                </copy>
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

引入Spring jar包

    使用maven构建项目,最方便的还是项目依赖jar的管理。看一下pom.xml文件引入spring jar包。在pom.xml文件中追加如下代码。
        <!-- 导入spring框架依赖jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <!-- 该jar用于spring 支持 junit测试 -->
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <!-- 该jar用于spring对其他的一些工具框架的支持 -->
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
    在pom.xml中追加上面引入jar的代码后,maven会从远程服务器上自动下载所有依赖包,包括依赖包的对应依赖的版本,这点真是太方便了。看一下项目目录结构,重点看maven dependencies下面的依赖包。

这里写图片描述

配置Spring

Spring的依赖jar引入完成后,需要对项目做一些spring配置。

1、修改web.xml配置spring

    首先需要在项目web.xml中追加引入spring、spring mvc的配置代码。

这里写图片描述

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_2_5.xsd"
    id="framework.spring" version="2.5">

    <display-name>framework_spring</display-name>

    <!-- 加载Spring容器配置,设置Spring容器加载配置文件路径 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/spring/applicationContext-spring-*.xml</param-value>
    </context-param>

    <!-- Spirng 全局请求字符集过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 配置spring mvc 支持 -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config/spring/spring-mvc-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2、创建spring自身的配置文件

    在上面web.xml中,已经看到在配置引入spring的时候,有两个地方是指定spring框架自身需要配置文件路径,使用通配符的形式。所以接下来就是创建spring最重要的xml配置。
###classpath:相对路径,意思是从web发布目录的WEB-INFO/class/**下面开始。
###需要对照web.xml中描述的路径去创建对应目录和文件。
   classpath:config/spring/applicationContext-spring-*.xml
   classpath:config/spring/spring-mvc-*.xml

applicationContext-spring-config.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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="   
           http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans-4.2.xsd   
           http://www.springframework.org/schema/context   
           http://www.springframework.org/schema/context/spring-context-4.2.xsd  
           http://www.springframework.org/schema/mvc   
           http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">

</beans>

spring-mvc-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:p="http://www.springframework.org/schema/p" 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-4.2.xsd   
           http://www.springframework.org/schema/context   
           http://www.springframework.org/schema/context/spring-context-4.2.xsd  
           http://www.springframework.org/schema/mvc   
           http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">

    <!-- 开启spring 上下文注解支持 -->
    <context:annotation-config />

    <!-- 把标记了@Controller注解的类转换为bean -->
    <context:component-scan base-package="cn.vfire.framework" />

    <!-- 开启spring mvc注解支持 -->
    <mvc:annotation-driven />

    <!-- 如果当前请求为“/”时,则转发到“/helloworld/index” -->
    <mvc:view-controller path="/" view-name="forward:/index.jsp" /> 

    <!-- 设置默认的Servlet来响应静态文件 -->
    <mvc:resources mapping="/resource" location="/resource" />

    <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
    <mvc:default-servlet-handler />

    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

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

</beans>

3、构造Spring Controller 请求处理器

    根据上面的spring mvc xml配置说明,创建cn.vfire.framework包,请看一下项目目录。

这里写图片描述

HelloWorldController.java

package cn.vfire.framework.spring.mvc.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
public class HelloWorldController {

    @RequestMapping("/index.html")
    public ModelAndView index() {

        ModelAndView modelAndView = new ModelAndView();

        modelAndView.addObject("message", "Hello World!");
        modelAndView.setViewName("index");

        return modelAndView;
    }

}

/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试页面</title>
</head>
<body>
    <div>${message}</div>
</body>
</html>

4、发布项目测试Spring mvc

    到这里,一个最简单的Spirng mvc框架搭建完成,我们可以通过浏览器输入url进行访问。

URL
http://127.0.0.1:8000/index.html 这里URL对应HelloWorldController类中的index()方法上面的@RequestMapping("/index.html")注解描述的URI地址“/index.html”。

HelloWorldController.index()接受到请求后,通过返回ModelAndView类型的对象ViewName属性值找到视图层的返回页面/index.jsp。

之所以Controller知道ModelAndView.ViewName属性指定值“index”(setViewName("index")方法设置),就能返回“/index.jsp”页面的,那是因为在“spring-mvc-servlet.xml”配置文件中,配置了默认的视图解析规则。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

5、测试

    在项目中,我们往往对URL的请求有多样化的需求,那么上面的形式是否满足呢?下面做一些简单测试。

在HelloWorldController追加两个请求处理映射。

package cn.vfire.framework.spring.mvc.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
public class HelloWorldController {

    /**
     * 返回视图对象
     * @return
     */
    @RequestMapping("/a/index.html")
    public ModelAndView index() {

        ModelAndView modelAndView = new ModelAndView();

        modelAndView.addObject("message", "Hello World!");
        modelAndView.setViewName("index");

        return modelAndView;
    }

    /**
     * 返回字符串
     * @return
     */
    @RequestMapping("/a/index.txt")
    public String index_str() {
        return "index";
    }

    /**
     * 返回对象
     * @return
     */
    @RequestMapping("/a/index.json")
    public Map<String, String> index_json() {

        Map<String, String> m = new HashMap<String, String>();

        m.put("name", "小名");
        m.put("age", "13");

        return m;
    }

}

    下面分别对上面请求映射做访问测试,测试结果如下。
URL结果截图
http://127.0.0.1:8000/a/index.html成功返回指定页面这里写图片描述
http://127.0.0.1:8000/a/index.txt成功,但是返回的字符串这里写图片描述
http://127.0.0.1:8000/a/index.json500服务器处理异常这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值