一、SpringMVC

2018-01-08  本文已影响0人  cqzhangjian

1.SpringMVC概述

1.1 SpringMVC的历史

1.2. Springmvc是什么?

Springmvc 也是一个类似于struts2框架的基于MVC 设计模式的表现层框架

1.2.1JAVAEE 开发应用采用经典的三层架构

1.2.2 MVC 设计模式 没在Java 23种设计模式中

2. SpringMVC 第一个程序

2.1 pom 文件配置 (导包)

<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.xingxue.springmvc</groupId>
    <artifactId>springmvc-demo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <!-- 导入 springmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>


        <!-- 导入 servlet 相关依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.2.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <!-- 最小支持的 编译版本 -->
                    <target>1.7</target>
                    <!-- 1.7 编译源码 -->
                    <source>1.7</source>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.2 配置 web.xml (应用的描述文件),服务器启动的时候,要去读

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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
                               http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    
    <!-- 
        mvc 框架 都有两种控制器:
            1.前端控制器 (框架提供) StrutsPrepareAndExectuteFilter (Filter ) 、 DispatcherServlet (Servlet)
            2.页面控制器(程序员自己定义) UserAction、RoleAction...... 、 UserController、RoleController
                (Action Contoller  Handler)
                
        Filter  vs  Servlet 区别:
            相同点:都可以处理http 请求:
            Filter : public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            Servlet:public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
            
            不同点:Filter 功能要比 Servlet 强大。  FilterChain chain 实现请求预处理
     -->
     
     
    <servlet>
        <!-- DispatcherServlet 组件在init 初始化的时候,会去读取 mvc 配置文件 -->
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc.xml</param-value>
        </init-param>
        <!-- Servlet 组件创建的时候是在第一次请求来的时候才会创建,配上下面可以使 Servlet 组件在应用启动的时候就被创建 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!-- Tomcat 有一个  rg.apache.catalina.servlets.DefaultServlet 默认拦截  / ,可以处理静态数据(html css js...)
             DispatcherServlet 前端控制器 配置上  / 也就覆盖了DefaultServlet
             
             如果不配,就使用不了Spring mvc 提供的 restFul 风格的网络资源架构
                restFul :不是一种技术实现,它是一种网络资源架构规则
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2.3 开发 Controller 控制器

//页面控制器
@Controller
public class UserController {
    
    @RequestMapping(value="/hello")
    public String hello() {
        System.out.println("请求来了...");
        return "ok";
    }

}

2.4 mvc.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        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-4.0.xsd">

<!-- 静态资源处理 -->
<mvc:default-servlet-handler/>
<context:component-scan base-package="com.xingxue"></context:component-scan>
<mvc:annotation-driven/>

<!-- 内部资源视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
</beans>

3. @RequestMapping 请求映射注解

总结 : RequestMapping 注解中的 value 属性用来映射 url,method属性用于映射请求方式,params 属性用于 映射 请求携带的参数

4.Springmvc 处理请求流程

图片.png

1.页面发出请求到 dispatcherServlet中央控制器进行处理
2.中央控制器调用 处理器映射器 HandelMapping 查询 Handel
3.处理器映射处理完毕后,返回Handel 以及 HandelExcutionChain(拦截器链)
4.中央控制器调用 处理器适配器 执行Handle
5.处理适配器调用真正的Handel执行
6.Handle执行完毕后,返回ModelAndView
7.处理器适配器ModelAndView返回给中央控制器
8.中央控制器调用视图解析器查询具体的View
9.视图解析器返回真正的View 地址
10.中央控制器调用View 执行 数据模型的 渲染
11.响应请求

总结:

5.@RequestParam映射请求参数

    <!-- 引入spring 提供的 POST 提交方式的中文乱码过滤器 :注意一点 提供的 中文乱码过滤器只能处理 POST -->
    <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>
@RequestMapping(value="m4/{id}",method=RequestMethod.GET)
public String m4 (@PathVariable(value="id") String id) {
    System.out.println(id);
    return "ok";
}

forward指令:可以实现视图的转发以及动作的转发
redirect 指令:可以实现视图的重定向以及动作的重定向

指令的格式:
forward:/xxx.jsp
redirect :/xxx.jsp
如果Handler 方法执行完毕后返回的字符串带有forward 或者redirect ,视图解析器就会另外处理,不会在返回的字符串前后加前缀和后缀

6.Springmvc 提供的隐式对象

上一篇 下一篇

猜你喜欢

热点阅读