一、解决 Maven构建环境慢的问题

解决 maven 构建项目慢的问题

  1. name: archetypeCatalog
  2. value: internal

name:archetypeCatalog value:: internal

二、运行第一个 SpringMVC 程序

2.0 项目基本结构

创建一个基于 Maven 的 web 项目

image.png

2.1 Maven 配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>cn.gorit</groupId>
  6. <artifactId>day1</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>day1 Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.8</maven.compiler.source>
  15. <maven.compiler.target>1.8</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework</groupId>
  20. <artifactId>spring-webmvc</artifactId>
  21. <version>5.2.5.RELEASE</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>junit</groupId>
  25. <artifactId>junit</artifactId>
  26. <version>4.11</version>
  27. <scope>test</scope>
  28. </dependency>
  29. </dependencies>
  30. <build>
  31. <finalName>day1</finalName>
  32. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  33. <plugins>
  34. <plugin>
  35. <artifactId>maven-clean-plugin</artifactId>
  36. <version>3.1.0</version>
  37. </plugin>
  38. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  39. <plugin>
  40. <artifactId>maven-resources-plugin</artifactId>
  41. <version>3.0.2</version>
  42. </plugin>
  43. <plugin>
  44. <artifactId>maven-compiler-plugin</artifactId>
  45. <version>3.8.0</version>
  46. </plugin>
  47. <plugin>
  48. <artifactId>maven-surefire-plugin</artifactId>
  49. <version>2.22.1</version>
  50. </plugin>
  51. <plugin>
  52. <artifactId>maven-war-plugin</artifactId>
  53. <version>3.2.2</version>
  54. </plugin>
  55. <plugin>
  56. <artifactId>maven-install-plugin</artifactId>
  57. <version>2.5.2</version>
  58. </plugin>
  59. <plugin>
  60. <artifactId>maven-deploy-plugin</artifactId>
  61. <version>2.8.2</version>
  62. </plugin>
  63. </plugins>
  64. </pluginManagement>
  65. </build>
  66. </project>

2.2 配置文件

使用 springmvc 之后,我们需要区别开 spring 的配置文件和 springMVC 的配置文件

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

    <!--        开启注解扫描, 希望处理 service 和 dao,controller 不需要 spring 去处理-->
    <context:component-scan base-package="cn.gorit">
        <!-- 配置哪些注解不扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
</beans>

2.2.2 springMVC 配置文件

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

    <!--    视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
        <!-- 扫描 controller -->
    <context:component-scan base-package="cn.gorit.controller"/>
    <!--    开启SpringMvc 的注解支持-->
    <mvc:annotation-driven/>
      <!-- 使用默认的处理器处理请求 -->
    <mvc:default-servlet-handler/>

    <!-- 加载 views 下的所有静态资源 (localtion 和 mapping 千万不要写错了!!!)-->
    <mvc:resources location="/WEB-INF/views/" mapping="/views/**"/>

</beans>
  1. 启动服务器,加载一些配置文件
    • DispatcherServlet对象创建
    • springmvc.xml 被加载了
    • HelloController 创建成对象
      一、第一个 SpringMVC 程序 - 图2

      2.3 web.xml 配置

      因为 SpringMVC 的核心控制器在于 DispatcherServlet, 为了使用 SpringMVC 的功能,我们需要在 web.xml 中分别配置 applicationContext.xml 和 springmvc.xml 配置文件,并设置他们的读取顺序

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>Archetype Created Web Application</display-name>

  <!--  配置Spring 监听器, 默认只加载 WEB-INF 目录下的 applicationContext.xml 配置文件,记载 IOC 容器管理对象-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

<!--  配置 spring mvc-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--    加载 springmvc.xml 配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 默认拦截所有静态资源   -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

    <!--  配置解决中文乱码的过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</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>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

2.4 编写一个 controller 类

目前只写这一个 Java 类,即可使用到 SpringMVC 的功能

package cn.gorit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class FirstController {

    @RequestMapping(value = "/",method = RequestMethod.GET)
    public String index() {
        return "index.jsp";
    }

    @GetMapping("/red")
    public String second() {
        System.out.println("我重定向了!!!");
        return "redirect:index.jsp";
    }

    @GetMapping("/hello")
    public String test() {
        System.out.println("我是第一个 springmvc 方法执行了");
        return "index";
    }

    @GetMapping("/test")
    public String aa() {
        System.out.println("test");
        return "success";
    }
}

2.5 视图页面编写

在 webapp 目录下,创建一个 index.jsp 页面,这个页面我放一张图片,和打几个字

因为我们使用了 springmvc 中的 DispatcherServlet 拦截了所有请求,所以静态资源是无法直接加载的,因此我在上面 springmvc.xml 中 mvc : resources 设置了加载 META-INF 目录下的静态资源,以及配置了对应的路由映射关系

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<style type="text/css">
    .container {
        width: 100px;
        height: 100px;
        margin: 0 auto;
        margin-top: 30px;
    }
</style>
<body>
    <div class="container">
        <h3>1231</h3>
    </div>

     <img src="views/images/tuzi.jpg" alt="123">

</body>
</html>

我还配置了一个视图解析器,在 WEB-INF目录下的 pages 页面,我们返回视图的时候就可以直接写对应点呃视图名字 —— success 即可

2.6 运行结果

  • 对应 controller 中的第一个,根路径,返回 index.jsp 页面

image.png

  • 页面重定向至 index.jsp, 在路径中输入 /red 就会跳转到 index.jsp 页面

image.png

  • 使用视图解析器返回 视图,我们在 WEB-INF/pages 下写两个jsp 页面,分别是 index.jsp 和 success.jsp

分别访问如下 /hello、/test 就可以看到 index.jsp 、success.jsp 页面了

image.png
image.pngimage.png

三、请求参数的绑定

3.1 绑定的机制

  1. 请求参数绑定说明
    1. 绑定机制
      1. 表单提交的数据都是 k=v 形式 user=hehe&pwd=123
      2. SpringMVC 的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
      3. 要求:提交表单的 name 和 参数名称是相同的
    2. 支持的数据类型
      1. 基本数据类型和字符串类型
      2. 实体类型(JavaBean)
      3. 集合数据类型(List,map集合等)
  2. 基本数据类型和字符串类型
    1. 提交表单的 name 和参数的名称是相同的
    2. 区分大小写
  3. 实体类型(JavaBean)
    1. 提交表单的 name 和 javaBean 中的属性名称要一致
    2. 如果一个 JavaBean类中包含其他的引用类型,那么表单的 name 属性需要编写成:对象 属性:
      eg:address name
  4. 给集合属性数据封装
    1. JSP 页面编写方式:list[0] 属性, 封装对象表达式,对 前端的表单页面进行设置
  5. 请求参数中乱码解决(解决 post 请求乱码)
    1. web.xml 中配置 Spring提供的过滤器类 (上面的 web.xml 已经修改)

3.2 获得原生 Servlet API

    // 获取原生的 Servlet API
    @RequestMapping("/testServlet")
    public String testServlet(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("执行了");
        System.out.println(request.getRemoteUser());
        return "success";
    }