Spring MVC开发整理

                                           前瞻

1.什么是SpringMVC

Spring web mvc和Struts2属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来

 

2.简要概述SpringMVC

Spring C 层框架的核心是 DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即 使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。 Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。

 

 

3.SpringMVC架构图及流程

 

流程

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  5. 执行处理器(Controller,也叫后端控制器)。
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  9. ViewReslover解析后返回具体View
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet响应用

 

 

4.重要组件说明

以下组件通常使用框架提供实现:

  • DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

  • HandlerMapping:处理器映射器

HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  • Handler:处理器即自己开发的继承Controler

Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

  • HandlAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

  • ViewResolver:视图解析器

ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。

一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

 


                                           正文

 

1.编写HelloWorld实例

步骤1建立名为springMVC_01,并导入上面列出的jar 包。

 

步骤2:编写web.xml 配置文件,代码如下:

<?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>*.do</url-pattern>
    </servlet-mapping>
</web-app>

简要说明 DispatcherServlet 就是一个Servlet ,也是对请求进行转发的核心Servlet 。在这里即所有.do 的请求将首先被DispatcherServlet 处理,而DispatcherServlet 它要作的工作就是对请求进行分发(也即是说把请求转发给具体的Controller )。可以简单地认为,它就是一个总控处理器,但事实上它除了具备总控处理理器对请求进行分发的能力外,还与spring 的IOC 容器完全集成在一起,从而可以更好地使用spring 的其它功能。在这里还需留意 < servlet-name > springmvc</ servlet-name > ,下面步骤三会用到。

 

步骤3:建立 springmvc-servlet.xml 文件

注意:(更改默认加载SpringMVC配置文件的加载路径及名称)

Springmvc默认加载WEB-INF/[前端控制器的名字]-servlet.xml,也可以在web.xml指定加载的配置

在web.xml的<servlet>中,通过contextConfigLocation加载classpath下的springmvc.xml配置文件

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:springmvc.xml</param-value>

</init-param>

在WEB-INF目录下创建 springmvc-servlet.xml,代码如下:

<?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.do">indexController</prop>

            </props>

        </property>

    </bean>

    <bean id="indexController" class="controller.IndexController"></bean>

</beans>

说明: index.do 的请求将给名为 indexController的  bean  进行处理。

所有处理器映射器都实现HandlerMapping接口。

所有的适配器都是实现了HandlerAdapter接口。

 

步骤4:完成 IndexController.java  的编写,代码如下:

package controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

public class IndexController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse 
        response)throws Exception {

        ModelAndView mav = new ModelAndView("index.jsp");

        mav.addObject("message", "Hello Spring MVC");

        return mav;

    }

}

说明 :ModelAndView 对象是包含视图和业务数据的混合对象,即是说通过此对象,我们可以知道所返回的相应页面(比如这里返回index.jsp 页面),也可以在相应的页面中获取此对象所包含的业务数据(比如这里message-Hello Spring MVC )。

 

步骤5:在WebContent目录下创建index.jsp通过EL表达式显示message的内容

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" isELIgnored="false"%>

 <h1>${message}</h1>

 

步骤6:输入 .../index.do  进行测试

 

 

2.改进版-视图定位

如果代码写成这样,就表示跳转到页面 index.jsp 
new ModelAndView("index.jsp"); 

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

 

改1:修改springmvc-servlet.xml,增加

<?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="viewResolver"

       class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/page/" />

        <property name="suffix" value=".jsp" />

    </bean>

    <bean id="simpleUrlHandlerMapping"

        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <property name="mappings">

            <props>

                <prop key="/index.do">indexController</prop>

            </props>

        </property>

    </bean>

    <bean id="indexController" class="controller.IndexController"></bean>

</beans>

 

 

改2:

把IndexController类的这一行代码

ModelAndView mav = new ModelAndView("index.jsp");


修改为

ModelAndView mav = new ModelAndView("index");

改3:

在WEB-INF下新建目录page
把index.jsp移动到 WEB-INF/page 目录下

访问测试即可!

 

 

 

 

3.后端处理器-Controller

为了方便开发人员快捷地建立适合特定应用的后端控制器,springMVC实现Controller接口,自定义了许多特定控制器。这些控制器的层次关系如下:

 

下面重点分析两个特色控制器

1.SimpleFormController控制器

此控制器是用来接收表单传递 对象参数(如:User)时用的,在ModelAndView返回视图和数据时可以拿出。

2.MultiActionController控制器每个方法对应一个请求路径

此控制器来将多个请求处理方法合并在一个控制器里,这样可以把相关功能组合在一起(它和struts1.x中的DispatchAction极为相似)。下面通过实例演示此控制器的使用。

注意:所有控制器都实现Controller接口

          所有处理器映射器都实现HandlerMapping接口。

          所有的适配器都是实现了HandlerAdapter接口。

 

4.映射处理器-HandlerMapping

主要有:BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping

 

在这其中可以编写拦截器,并配置

<bean id="simpleUrlHandlerMapping"

        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<!-- 为映射处理器引入拦截器bean -->

<property name="interceptors">

<list>

<ref bean="workTimeInterceptor" />

</list>

</property>

        <property name="mappings">

            <props>

                <prop key="/index">indexController</prop>

            </props>

        </property>

<!-- 拦截器bean -->

<bean id="workTimeInterceptor" class="com.asm.LoginTimeInterceptor">

<property name="startTime" value="6" />

<property name="endTime" value="18" />

</bean>

 </bean>

 

 

5.视图与视图解析器-View与ViewResovler

功能:用来解析ModelAndView

通常像spring mvc 这样的web框架都会有相应的定位视图技术,spring提供了视图解析器来解析ModelAndView模型数据到特定的视图上,spring提供了ViewResolver和View两个特别重要的接口,ViewResolver提供了从视图名称到实际视图的映射,View处理请求的准备的工作,并将该请求提交给某种具体的视图解析器

 

 

 

6.注解

方法1:

在springmvc.xml中配置RequestMappingHandlerMapping:

方法2:

使用RequestMappingHandlerMapping需要在Handler 中使用@controller标识此类是一个控制器,使用@requestMapping指定Handler方法所对应的url。如下:

此时xml中就没有bean,但要加入注解扫描

修改springmvc-servlet.xml加入注解扫描。

<context:component-scan base-package="cn.itcast.controllers" />

java代码

package controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@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;

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: dispatcherservlet是Spring MVC框架的核心组件之一,负责接收所有的客户端请求,并将其分发给相应的处理器方法进行处理。 首先,dispatcherservlet作为一个前端控制器,接收到所有的请求,并根据请求的URL将其映射到具体的处理器方法上。它通过HandlerMapping来完成URL到方法的映射,可以根据不同的URL配置不同的映射规则。 其次,dispatcherservlet将请求分发给对应的处理器方法进行处理。处理器方法是真正执行业务逻辑的地方,它们是由@Controller注解标记的方法。在处理器方法中,可以获取客户端传递过来的参数,并根据业务需求处理这些参数。处理器方法还可以返回相应的结果,例如将数据模型返回给视图进行渲染。 最后,dispatcherservlet将处理结果返回给客户端。它通过ViewResolver来找到对应的视图,将数据模型传递给视图进行渲染,并将渲染后的内容返回给客户端。视图可以是HTML页面、JSON数据等多种形式,根据业务需求进行配置。 总之,dispatcherservlet在Spring MVC框架中起到了非常重要的作用。它负责接收客户端请求,并将请求分发给对应的处理器方法进行处理。通过配置不同的映射规则和视图解析器,我们可以实现灵活的请求处理和响应结果的渲染。通过学习和理解dispatcherservlet的工作原理,可以更好地使用和理解Spring MVC框架。 ### 回答2: Spring MVC是一个基于Java的Web应用开发框架,其中的DispatchServlet是Spring MVC的核心组件之一。DispatchServlet是一个Servlet类,用于接收HTTP请求并将其分发给不同的Controller进行处理。 在Spring MVC中,DispatchServlet是由Web容器(例如Tomcat)加载并初始化的。当客户端发送HTTP请求时,Web容器将请求发送到DispatchServlet,DispatchServlet通过URL映射来确定将请求分发给哪一个Controller进行处理。URL映射是通过配置文件或注解来实现的,可以根据请求的URL路径、请求参数等来进行匹配。 DispatchServlet将请求分发给Controller后,Controller会根据请求的业务逻辑进行处理,并生成相应的响应。在处理请求的过程中,Controller可以通过注解来获取请求的参数、请求头等信息,并进行相应的处理。处理完成后,Controller会返回一个ModelAndView对象,其中包含了响应的数据和视图名。 DispatchServlet在接收到Controller返回的ModelAndView后,会将数据传递给ViewResolver来解析视图名并找到相应的视图模板。ViewResolver负责将响应的数据以及视图模板进行解析和渲染,最终生成一个HTML响应,并将其返回给客户端。 除了处理请求分发和视图解析外,DispatchServlet还负责处理异常和拦截器等功能。当请求处理过程中发生异常时,DispatchServlet会将异常信息进行捕获并交给异常处理器进行处理。拦截器可以用于在请求到达Controller之前或之后进行一些预处理或后处理操作,例如登录拦截、权限验证等。 总之,DispatchServlet是Spring MVC框架中的核心组件之一,负责接收并分发HTTP请求,处理请求的分发、视图解析、异常处理和拦截等功能,是Spring MVC框架实现Web应用开发的重要部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值