SpringMVC-轻量级Web框架

SpringMVC

SpringMVC框架是一个基于请求驱动的Web框架,并且使用了前段控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理

SpringMVC处理请求的流程


具体执行步骤如下
  1. 首先用户发送请求——>前端控制器,前端控制器根据请求信息(URL)来决定选择哪一个页面控制器进行处理并把请求委托给它
  2. 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在SpringMVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理,处理完毕后返回一个ModelAndView(模型数据和逻辑视图名)
  3. 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
  4. 前端控制器再次收回控制权,将相应返回给用户,至此结束

SpringMVC核心架构


核心架构的处理流程如下
  1. 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制
  2. DisptcherServlet——>HandlerMapping,HanderMapping将会请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器)对象,通过这种策略,很容易添加新的映射策略
  3. DisptcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用
  4. HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象(包含模型数据,逻辑视图名)
  5. ModelAndView的逻辑视图名——>ViewResolver,ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术
  6. View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术
  7. 返回控制权给DisptcherServlet,由DisptcherServlet返回响应给用户,到此一个流程结束

SpringMVC核心开发步骤

  1. DisptcherServlet在web.xml中的部署描述,从而拦截请求到SpringMVC
  2. HandlerMapping的配置,从而将请求映射到处理器
  3. HandlerAdapter的配置,从而支持多种类型的处理器
  4. ViewResolver的配置,从而将逻辑视图名解析为具体视图技术
  5. 处理器(页面控制器)的配置,从而进行功能处理

SpringMVC开发实例(Hello World)

开发环境,运行环境,工程:eclipse Jee  Neon + tomcat8.0.36 + Dynamic Web Project


导入jar包到WebContent/WEB-INF/lib目录


JSP视图

在WebContent目录下新建一个index.jsp文件
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>Spring 3.0 MVC demo</title>
</head>
<body>
 <a href="hello.html">Say Hello</a>
</body>
</html>
再在WebContent/jsp目录下新建一个hello.jsp文件
<pre name="code" class="java"><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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=ISO-8859-1">
<title>Spring mvc demo</title>
</head>
<body>
<p> This is my message: ${message} </p>
</body>
</html>

前端控制器的配置

在WEB-INF目录下配置web.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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
    <display-name>Spring3MVC</display-name>
    <servlet>
    	
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- load-on-startup:表示启动容器时初始化该Servlet; -->
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <!-- url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。 -->
		<!-- 也可以如“*.html”表示拦截所有以html为扩展名的请求。 -->
        <url-pattern>/</url-pattern>
     </servlet-mapping>
 
     <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
 
 	<!-- 自此请求已交给Spring Web MVC框架处理,因此我们需要配置Spring的配置文件, -->
 	<!-- 默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字,也就是上面的spring]-servlet.xml配置文件。 -->
 	<!-- 即spring-servlet.xml -->
 
</web-app>

配置Spring配置文件

在WEB-INF目录下配置spring-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"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   
 <context:component-scan base-package="net.spring.controller" />
 
<!-- 在Spring配置文件中配置ViewResolver -->
<!-- InternalResourceViewResolver:用于支持Servlet、JSP视图解析;
     viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;
	 prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),
	 比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;    -->
	<bean id="viewResolver"
  		class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  		<property name="viewClass"
   		value="org.springframework.web.servlet.view.JstlView" />
  		<property name="prefix" value="/WEB-INF/jsp/" />
  		<property name="suffix" value=".jsp" />
	</bean>
</beans>

编写Controller和Mapping(开发处理器/页面控制器)

在Java Resources/src目录下新建一个包:com.springmvc.controller,在包下新建一个HelloWorldController.java文件
package net.spring.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class HelloWorldController {
 
 @RequestMapping("/hello")
 public ModelAndView helloWorld() {
 
  String me = "Hello World, Spring 3.0!";
  //ModelAndView: 包含了试图要实现的模型数据和逻辑视图名
  //message 为数据的名称,在视图中用来引用的名字
  //me 是对应的值
  //hello 是对应视图的名字。
  ModelAndView modelAndView = new ModelAndView();
  modelAndView.addObject("message", me);
  modelAndView.setViewName("hello");
  return modelAndView;
  
  //以上4个语句相当于一下一句:
  //return new ModelAndView("hello","message",me);
 }
}

工程目录



发布了10 篇原创文章 · 获赞 3 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章