SpringMVC配置教程

本文详细介绍了Spring Web MVC的核心架构及实现方式,包括DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver等组件的作用与流程,同时提供了HelloWorld示例,演示如何配置前端控制器、开发页面处理器和视图页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring Web MVC核心架构图


1.DispatcherServlet - 前端控制器
2.HandlerMapping - 处理器映射
3.HandlerAdapter - 页面适配器
4.ViewResolver - 视图解释器
5.Handler - 页面控制器
6 HandlerIntercepter - 拦截器

具体流程:

  • 用户(客户端)发送请求,DispatcherServerlet前端控制器收到请求后委托给其它的解释器进行处理,自己作为统一访问点,控制全局流程。
  • DispatcherServlet --> HandlerMapping。HandlerMapping(处理器映射)接收到DispatcherServlet的请求后,将请求映射成为HandlerExecutionChain对象,这其中包含Handler和多个HandlerIntercepter对象。(这里对HandlerIntercepter的处理还不是很明确)
  • DispatcherServlet --> HandlerAdapter。DispatcherServlet把Handler发给HandlerAdapter,并把Handler包装成为一个HandlerAdapter,并根据适配的结果调用其功能方法。返回一个ModelAndView对象(包含模型类型,逻辑视图名)
  • ModelAndView中的逻辑视图名 --> ViewResolver。ViewResolver通过逻辑视图名解释为相应的View。

二、HelloWorld入门

Spring框架: spring-framework-4.0.0.M1-dist.zip

下载地址:https://github.com/spring-projects/spring-framework

所需jar包,

你不需要带有javadoc和sources的jar包都放进去项目中。spring-webmvc-4.0.0.M1.jar就是springMVC的核心包,所需的类都在此jar包中。

Spring框架依赖jar包commons-logging-1.2.jar

注意:springMVC和spring是两个不同的框架体系,springMVC相当于SSH中的Struts2的概念。

2.1 前端控制器配置

我们需要在web.xml中加入以下代码

<!-- Spring MVC Begin -->
  <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--  <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring-servlet.xml</param-value>  默认位置
      </init-param>
      -->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <!-- 不能写成/* 不能匹配,只能为/,默认servlet映射 -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>
 <!-- Spring MVC End -->

1)、配置核心类DispatcherServlet,并拦截所有的请求,"/"表示所有请求都要通过这个类分发。你也可以用".html"或者"/do"拦截扩展名为html或者为do的请求。

<load-on-startup>1</load-on-startup>表示设置启动顺序优先级,1为最先启动的Servlet(listener比所有的Servlet都要先启动)。

2)、DispatcherServlet会有读取一个配置文件*-servlet.xml(*是你的起的Servlet的名字,这里是spring,所以配置文件叫spring-servlet.xml),默认是放在/WEB-INF/spring-servlet.xml中,你也可以通过上面的设置对配置文件名字进行修改


当然如果你需要直接使用Spring作为你的Ioc容器的话,请在web.xml配置以下的代码:

<!-- Spring IOC -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

2.2在默认配置文件中加入HandlerMapping和HandlerAdapter
具体配置在/WEB-INF/spring-servlet.xml中
<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  
<!-- HandlerAdapter -->  
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

2.3在Spring配置文件中加入ViewResolver
具体配置在/WEB-INF/spring-servlet.xml中
<bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />
1) prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”


2.4开发页面处理器(核心)

package com.rich.personalpage.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 HelloWorldController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest req,
            HttpServletResponse resp) throws Exception {

            //1、收集参数、验证参数  
           //2、绑定参数到命令对象  
           //3、将命令对象传入业务对象进行业务处理  
           //4、选择下一个页面  
           ModelAndView mv = new ModelAndView();  
           //添加模型数据 可以是任意的POJO对象  
           mv.addObject("message", "Hello World!");  
           mv.addObject("chinese","我是中文");
           
           //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面  
           mv.setViewName("hello");  
           return mv; 
    }
}

要实现页面处理器需要实现Controller接口,并实现其方法handleRequest,最后返回一个modelAndView对象。
并在spring-servlet.xml中加入以下代码:

<!-- Controller -->
    <bean name="/hello" class="com.rich.personalpage.controller.HelloWorldController">
 </bean>

2.5开发视图页面

路径为/WEB-INF/jsp/hello.jsp

代码是:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Hello World!</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    ${message}<br>
    ${chinese}
  </body>
</html>

${message}和${chinese}为HelloWorldController处理器传过来的数据模型

运行如果看到Hello World!和"我是中文"即为成功。


补充知识:

①、POST解决中文乱码的问题
可以在web.xml中加入以下代码,
 <!-- Encoding UTF-8 Spring MVC自带-->
  <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>


Spring中已含有解决编码错误的filter。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值