Java Spring MVC

前言

  • Spring MVC 是基于 Spring 的一个 MVC 框架。主要用于开发 WEB 应用和网络接口,它是 Spring 的一个模块,通过 Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易。

  • Spring 官网

  • Spring MVC 教程

  • Spring MVC 快速入门

1、Spring MVC

  • Spring MVC 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?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">
    <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    </web-app>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <bean id="simpleUrlHandlerMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    <props>
    <prop key="/index">indexController</prop>
    </props>
    </property>
    </bean>
    <bean id="indexController" class="controller.IndexController"></bean>
    </beans>
  • 基本原理:

    • 用户访问 /index。
    • 根据 web.xml 中的配置所有的访问都会经过 DispatcherServlet。
    • 根据配置文件 springmvc-servlet.xml,访问路径 /index,会进入 IndexController 类。
    • 在 IndexController 中指定跳转到页面 index.jsp,并传递 message 数据。
    • 在 index.jsp 中显示 message 信息。

2、视图定位

  • Spring MVC 通过 ModelAndView 对象把模型和视图结合在一起。

    1
    2
    ModelAndView mav = new ModelAndView("index.jsp");
    mav.addObject("message", "Hello Spring MVC");
  • 解析

    • 表示视图是 index.jsp。
    • 模型数据是 message,内容是 “Hello Spring MVC”。
  • 如果代码写成这样,就表示跳转到页面 index.jsp。

    1
    new ModelAndView("index.jsp");
  • 所谓的视图定位,指的是代码还是写成这样,但是会跳转到 /WEB-INF/page/index.jsp

    1
    new ModelAndView("index");
  • 把视图约定在 /WEB-INF/page/*.jsp 这个位置配置。

    1
    2
    3
    4
    5
    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
    </bean>

3、注解方式

  • 注解方式

    1
    <context:component-scan base-package="controller" />
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Controller
    public class IndexController {
    @RequestMapping("/index")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    ModelAndView mav = new ModelAndView("index");
    mav.addObject("message", "Hello Spring MVC");
    return mav;
    }
    }

4、接受表单数据

5、客户端跳转

6、Session

  • Session 在用户登录,一些特殊场合在页面间传递数据的时候会经常用到。

7、中文问题

  • 在 Spring MVC 中处理中文问题Filter 处理中文问题是一样的手段。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <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>

8、上传文件

  • 上传文件

    1
    2
    3
    4
    5
    <!-- 允许访问 *.jpg -->
    <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    1
    2
    <!-- 开放对上传功能的支持 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

9、拦截器

  • 拦截器

    1
    2
    3
    4
    5
    6
    7
    8
    <mvc:interceptors>   
    <mvc:interceptor>
    <mvc:mapping path="/index"/>
    <!-- 定义在 mvc:interceptor 下面的表示是对特定的请求才进行拦截的 -->
    <bean class="interceptor.IndexInterceptor"/>
    </mvc:interceptor>
    <!-- 当设置多个拦截器时,先按顺序调用 preHandle 方法,然后逆序调用每个拦截器的 postHandle 和 afterCompletion 方法 -->
    </mvc:interceptors>
文章目录
  1. 1. 前言
  2. 2. 1、Spring MVC
  3. 3. 2、视图定位
  4. 4. 3、注解方式
  5. 5. 4、接受表单数据
  6. 6. 5、客户端跳转
  7. 7. 6、Session
  8. 8. 7、中文问题
  9. 9. 8、上传文件
  10. 10. 9、拦截器
隐藏目录