一、SpringMVC介绍及环境搭建

一、本课目标

  • 掌握springMVC开发环境搭建
  • 理解SpringMVC的架构以及请求处理流程

二、SpringMVC

  • 结构最清晰的MVCModel2实现
  • Controller
  • ModelAndView

SpringMVC框架是Spring中用于web开发的一个模块,是Spring提供的一个基于MVC设计模式的优秀的web开发框架。


image.png

在SpringMVC框架中,Controller代替了原来的servlet来座位控制器,Controller接受用户发出的请求,然后调用相应的model来进行业务处理,处理器处理完成之后会返回相应的处理结果,然后Controller会调用相应的视图,并对处理结果进行相应的视图渲染,最终客户端得到一个响应的消息。

三、SpringMVC框架搭建步骤

image.png

配置完成的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></display-name> 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 核心控制器的配置DispatcherServlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 加载springMVC的配置文件 -->
    <init-param>
        <!-- 通过下面的参数指定配置文件的位置 -->
        <param-name>contextConfigLocation</param-name>
        <!-- 使用spring资源路径的形式来加载文件,配置文件的命名暂且为下面这个 -->
        <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <!-- 标记我们的容器在启动的时候就要去加载这个DispatchServlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 下面的配置的意思是一个名字叫springmvc的servlet会拦截和处理这个项目中的所有的url请求 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>



在配置文件中完成配置之后,可以知道改项目中所有的请求都要经过名字为springmvc的servlet的处理,但是这个servlet是如何将相应的请求交给相应的控制器进行处理呢?此时需要一个处理器映射这样一个关系描述的文件,这个文件就是我们的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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!-- 配置处理器映射 HandlerMapping:将一个url请求指定给相应的controller去处理 -->
        <bean name="/index.html" class="cn.smbms.controller.IndexController"></bean>
        <!-- 配置视图解析器     /WEB-INF/jsp/index.jsp-->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
         </bean>
</beans>

处理请求的控制器:

package cn.smbms.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class IndexController extends AbstractController{

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        System.out.println("hello, SpringMVC!");
        //下面返回的是一个逻辑视图名,这个名字的完整路径的前缀和后缀是在xml文件中配置的,就是视图解析器那部分
        return new ModelAndView("index");
    }
    
}

jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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>My JSP 'index.jsp' starting page</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>
    welcome.spring MVC!
  </body>
</html>

最终的请求结果:


image.png

image.png

综上,springmvc的流程应该是这样的:页面发送请求到服务器,然后被拦截,处理器将这个请求交给相应的controller去处理,处理完了之后返回的字符串加上前后缀即返回的结果,然后再把这个结果返回给前天页面。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 4,235评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,429评论 11 349
  • IOC 控制反转容器控制程序对象之间的关系,而不是传统实现中,有程序代码之间控制,又名依赖注入。All 类的创建,...
    irckwk1阅读 4,585评论 0 0
  • 大刚哥哥阅读 3,328评论 0 0
  • 此心已光明如日月,惜乎天下知我者希,若有二三知我者,我必兴仁义于天下,定人心于当今矣 。
    圣贤历艰险豪杰出风尘阅读 3,821评论 3 33