1、上篇博文讲了SpringMVC的开发环境搭建以及基本开发步骤,总体来说
①、导入相关jar包。实际上不论运用什么框架技术,都需要导入相关jar包的
②、在项目的web.xml中配置SpringMVC的前端控制器org.springframework.web.servlet.DispatcherServlet,并指定SpringMVC的配置文件
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <!-- 配置所有请求的处理类DispathcerServlet(前端控制器) 这个Servlet可以对所有请求进行处理,比如当前请求传递给哪个控制器呢等 ServetlConfig--> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 向DispatcherServlet配置SpringMVC的配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <!-- 定义SpringMVC的配置文件 --> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 设置前端控制器(DispatcherServlet)的启动时机,即web服务器启动时即启动前端控制器 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!-- /当我项目的所有请求都会先经过这个url》DisapatcherServlet --> <servlet-name>springDispatcherServlet</servlet-name> <!-- 注意这里暂时写/ 代表了映射所有请求 --> <url-pattern>/</url-pattern> </servlet-mapping>
③、在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:aop="http://www.springframework.org/schema/aop" 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/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 因为项目中很有可能除了SpringMVC注解外,还有可能有其他注解,所以SpringMVC框架不会自动扫描注解,而需要手工通知SpringMVC框架扫描哪些包下注解。这样这个包下的注解才能被正确执行 --> <context:component-scan base-package="com.rock.springmvc.handlers"></context:component-scan> <!-- 配置视图解析器 :SpringMVC在产生响应时,通过对象(InternalResourceViewResolver)映射更加简单,售后看案例便知--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> </beans>
④、编写SpringMVC的控制器,注意通过注解定义控制器以及请求的URL映射
2、本章内容,本章主要介绍SpringMVC的视图映射器,上章博文介绍了在SpringMVC中怎样映射一个请求,本章内容将介绍响应的过程
①、请求周期:
在介绍SpringMVC的视图映射器之前,先向大家介绍一个基本概念,即请求周期,下面先来看一个请求周期的图例
从图例中可以看出一个B/S请求周期是从客户端浏览器开始发起请求,直到服务器端处理完毕当前请求后产生了具体响应的过程即为一个请求周期,从用户的角度讲,一个请求周期就是单击页面上的某个按钮或链接后,看到目标页面的过程即为一个请求周期。
②、SpringMVC的视图映射器(org.springframework.web.servlet.view.InternalResourceViewResolver),视图映射器的作用是服务器端处理完请求后,应该返回哪个web组件(页面(jsp文件)),即使用视图映射器将结果页面返回给请求者。专业一点讲就是使用视图映射器产生具体响应。
我们知道视图映射器是在SpringMVC的配置文件配置的,如上节课中的配置代码如下
本代码片段中(org.springframework.web.servlet.view.InternalResourceViewResolver)即是视图映射器。
我们知道在JavaEE中,Servlet产生响应的过程可以是转发方式也可以是重定向方式,但不管是哪种方式都需要指定结果画面的路径及文件名
比如:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/result.jsp").forward(request, response); }
request.getRequestDispatcher(“/result.jsp”).forward(request, response);
request.getRequestDispatcher(“/user/result.jsp”).forward(request, response);
等,其中/result.jsp或者/user/result.jsp都指定了响应的web组件的路径+文件名。那么在SpringMVC中通过视图解析器响应的话,将更为便捷。
下面通过案例代码介绍视图解析器的功能
1)、客户端页面:
<%@ 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> <a href="hello.do">Hello World</a> </body> </html>
2)、控制器代码
package com.rock.springmvc.handlers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * * FileName: com.rock.springmvc.handlers HelloWorldHandler.java * TODO: * Copyright: Copyright (c) 2015-2016 All Rights Reserved. Company: 01skill-soft.com Inc. * @author: Rock * @Date: 2017年8月7日:下午1:24:45 * @version: 1.0 * * Modification History: Date Author Version Description * ---------------------------------------------------------------------- * 2017年8月7日 Rock 1.0 1.0 Version * */ @Controller public class HelloWorldHandler { @RequestMapping(value="/hello.do") public String hello(){ System.out.println("HelloWorldHandler.hello() is running...."); return "success"; } }
其中hello方法可以接收页面的请求,同时在控制台输出了一句话,然后返回了String类型的success字符串。下面看案例执行效果截图
单击连接后:
通过以上案例可以看到一个请求的周期正常完毕,下面再来看下项目的目录结构
结合视图解析器的配置代码
<?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" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 因为项目中很有可能除了SpringMVC注解外,还有可能有其他注解,所以SpringMVC框架不会自动扫描注解,而需要手工通知SpringMVC框架扫描哪些包下注解。这样这个包下的注解才能被正确执行 --> <context:component-scan base-package="com.rock.springmvc.handlers"></context:component-scan> <!-- 配置视图解析器 :SpringMVC在产生响应时,通过对象(InternalResourceViewResolver)映射更加简单,售后看案例便知 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 定义视图前缀 --> <property name="prefix" value="/WEB-INF/jsp/"></property> <!-- 定义视图后缀 --> <property name="suffix" value=".jsp"></property> </bean> </beans>
结论:在SpringMVC中响应的结果是: 视图前缀+控制器方法的返回值+视图后缀
3、总结:至此两篇博文已经将SpringMVC的开发环境以及一个请求周期的处理过程都介绍完毕了,除了基本的操作语法步骤外,请大家切记一个请求的周期是怎么回事,这一概念及其重要,很多知识的理解都需要这个理论知识。下章博文将详细接收一个请求周期的请求过程(即从客户端浏览器到服务器的过程),以及对请求中参数的处理过程,敬请期待!