前言
我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作、WEB程序开发,渐渐会接触到JDBC、Servlet/Jsp之类的知识,期间可能会接触一两个关系型数据库,例如MySQL/Oracle等等。像前面的MyBatis部分,主要是针对JDBC的进一步封装,使得更适用于实际项目开发过程,但是JDBC、MyBatis或者Hibernate都是针对持久层数据库操作,例如查询、更新记录等等,我们开发程序最终的展现对象是用户,而用户操作程序往往用的是什么?各种各样的浏览器,而不是通过我们后台的这些测试代码,用户看不懂代码,也不需要懂。用户只需要点击、需要输入,比如点击一个链接,跳转到一个新页面,页面中的部分数据都是从数据库中查询获取的;又或者是输入一段文本,点击提交按钮,更新的是数据库中的记录。我们要理清的是,这些页面的操作指令是怎样传递到后台服务器,然后访问到数据库的;还有数据库的数据是怎么从后台又传回前端,怎样显示到页面上的?
如果有学习过Servlet/Jsp相关内容,应该会对上面的问题多少有些理解。首先回顾下什么是Servlet,Servlet是运行在我们服务器上的Java程序,作用于中间层,即客户端请求和服务器之间,我们发送请求,控制数据库、业务逻辑、做出响应,返回前端页面数据等等都可以通过其实现。Servlet的生命周期:1.初始化调用init()方法,2.处理客户端请求调用service()方法,3.结束程序调用destroy方法,4.最后垃圾回收。JSP本质上也是Servlet,项目启动,Web容器将JSP的代码编译成JVM能够识别的java类即Servlet。Jsp重点偏向于页面的展示,应用html、CSS、JavaScript等前端技术在这里都不成问题,而Servlet更倾向于后台的业务逻辑、控制转发等等。
SpringMVC是在Servlet基础上进一步封装开发的一套WEB层框架,所以如果能深入理清Servlet的相关内容,那么很容易就可以上手SpringMVC,下面我们先简单回顾一下之前Servlet的实现过程。
Servlet篇
新建一个普通web工程或者maven web工程,通过继承HttpServlet,创建我们自定义的Servlet,如下所示
package com.mmm.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyServletA extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求转发,相当于一次请求
req.getRequestDispatcher("/a.jsp").forward(req, resp);
//响应重定向,相当于二次请求,前一次请求设置的属性值在页面中将无法获取到
//resp.sendRedirect("./a.jsp");
//这里往往还要通过持久层对象访问数据库,获取或者更新数据
//获取到的数据通过设置属性,然后在前端Jsp页面可以通过el表达式之类的方法拿到然后渲染样式展示出来
} }
这里的/a.jsp,代表Jsp页面路径,为web文件根目录下例如webapp下,所以我们在webapp下简单创建a.jsp如下
<%@ 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>a.jsp</title>
</head>
<body>
这是a.jsp
</body>
</html>
然后在web文件夹下WEB-INF文件夹下web.xml中<web-app></web-app>节点内添加如下内容
<servlet>
<servlet-name>MyServletA</servlet-name>
<servlet-class>com.mmm.servlet.MyServletA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletA</servlet-name>
<url-pattern>/a.do</url-pattern>
</servlet-mapping>
这里的<servlet-name>的值在<servlet>和<servlet-mapping>中要保持一致,<servlet-class>即为我们前面自定义的Servlet全名(含包名),<url-pattern>用于匹配我们在地址栏输入的url地址。例如这里通过localhost:8080/servlet-web/a.do就可以匹配到该Servlet,从而运行到该Servlet中的相关方法,这里会请求转发到a.jsp,如下图所示。
aaarticlea/png;base64,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" alt="" />
上面为一个最基本的从前端http请求到后台服务器,运行Servlet后,返回前端视图的过程。但是实际情况下,前端的请求不会是这样简单拿回一个静态无数据的页面,也不会只有一个,举个例子,如果上面a.do对应一个增加一条商品数据的操作,即在我们自定义的MyServlet中doPost()方法里执行添加操作,那么如果还有删改查操作,按照这里的路子,我们需要再定义MyServletB、MyServletC、MyServletD,然后web.xml添加3段对应的Servlet节点定义,再继续拓展,我们不止对商品进行增删改查,还有员工、销售记录等等进行操作,这样下去,我们得定义和配置多少个Servlet,有的人想到办法,例如商品的操作路径匹配都是a.do,然后加个参数判断,及路径后加上?action=add或者?action=del等等,这样同一类对象的操作我们将其统一匹配到同一个Servlet,在Servlet的方法内部再去根据具体的action操作类型去判断到底要执行哪种操作(运行哪段业务逻辑)。
SpirngMVC更是将这种思想进化到了极致,我们在web,xml只定义有且只有一个Servlet,这个Servlet能匹配到所有的正常请求,然后可以根据路径精确解析到具体的执行某个类的某个方法,这里的类即控制层Controller,例如一个商品的相关操作,我们定义一个商品Controller类,类中定义各种操作方法,需要访问数据库的话,往往是通过Service层对象去调用持久层的代码实现数据库操作。下面就实例一段单独通过SpringMVC来实现中间控制层效果的小案例。
SpringMVC篇
为了方便管理jar包,这里我们可以新建一个maven web项目,pom依赖可参考前面的环境搭建篇,这里同Servlet对比,我们仅需要一个Java类也就是上面提到的controller,然后是一个指定路径下的jsp文件,最后稍微修改一下web.xml,这三步即可简单过一遍SpringMVC的基本运行过程。下面分别详细写出这三步的内容。
DemoController.java
package com.mmm.web; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("demo")
public class DemoController { @RequestMapping(value="/toPage")
public String toPage() {
return "page";
}
}
从上往下,首先@Controller注解属于Spring系列组件bean注解之一,对应web表现层的组件,类似的还有代表业务逻辑层的@Service,代表数据库访问层的@Repositoty,通用组件@Component等等,实际项目中,层与层之间类对象还会相互调用,基于Spring容器的IOC及依赖注入,我们又还会接触到@Autowired,@Autowired等等注解。在这里我们可以简单理解为通过@Controller注解,Spring会识别并实例化这个bean,这个类对象的创建和管理将交由Spring容器去控制。
然后@RequestMapping("demo"),看英文单词意思应该不难理解,Request请求,Mapping映射,请求映射,通过我们客户端例如浏览器那边过来的http请求,前面我们用过的Servlet会通过配置url匹配到访问路径从而匹配到相应的Servlet中,而在这里类似,SpringMVC会根据我们的访问路径匹配到相应的Contoller中的相应方法,是的,这里还会进一步精确匹配到方法。下面@RequestMapping(value="/toPage")即方法名的映射,例如这里把类和方法的映射名组合起来即为demo/toPage,在本例中,我们通过localhost:8080/spring-mvc/demo/toPage,即可匹配到这个DemoController的toPage方法中执行。
可以看到方法的返回值是String字符串类型,这里可以理解为用于获取视图页面路径。下面结合Spring MVC配置文件讲解。
application-mvc.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-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"> <!-- 自动扫描开启 -->
<context:component-scan base-package="com.mmm.web" />
<mvc:annotation-driven/> <!-- Spring MVC视图解析配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean> </beans>
这里的<context:component-scan base-package="com.mmm.web" />即用于Spring扫描识别bean注解,例如刚刚讲到的@Controller,而<mvc:annotation-driven/>则用于扫描SpringMVC相关特定注解,例如这里@RequestMapping等等。
下面的视图解析配置即结合刚刚上面讲到的视图页面路径,prefix和suffix分别为前缀和后缀的意思,结合前面的controller中方法,即页面请求转发路径的统一前后缀,前面controller中方法的返回值为"page",那么组合前后缀,即为/WEB-INF/views/page.jsp,而这个路径对应哪里,如下图所示。
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVMAAACmCAIAAADoAfs9AAAXLUlEQVR4Ae1df4hcx32flfWHklAs4iaoxFA1vVXD6eIIJ2nMSgEV0oa9S8vFfxwxAamhZRc3qW+xLEzqA2Oqlqaq6Z1DLHb/iKr8YZejSS7Qu7PBFEx9S1zqIIO4WDpRsBInsv9QVo6U7Em3t/3OzHvzZt7v/f32vc/jcfvezHe+M+8z77NvZt7e95Nrt9sMGxAAAqlGYHt7+/z58ydOnCC+t1q7rVZrT6qvFxcHBICAPwJgvj8uSAUC6UYAzE93/+LqgIA/AmC+Py5IBQLpRgDMT3f/4uqAgD8CYL4/LkgFAulGYMTMz+WeyeWY2J9JN9C4OiCQKARGzHzGnqbfE4ifFDydKFzQGCCQbgRGznwLXvyeKN33Ga4uaQjsHU6DXvuXz6mKjj3xujpmjEb78mn/TLuNx74GDA6BwCARGAbzf/C3+Ye/vaWuQj9VbLf5r6xwAASAwAARGPho/7V//NzMwhPb71ZvXl56981vvf3qNw9/4UuUKK+J1vbsLXCF7+rS0Zy9lddt8/UypZXX7cyjS1ftHDtJlHEK2Nn4BAJAgLFemf/yyy9PTU2FILnNdti+I7TvO/DQ/oPHDxyZPXj8K5/9+nN2kWfk2r596v4kgucrbHGL/tGAtq3JFYfhZHrpzMnlOZG3MT/Bi3LWa/bt9uwKuO/GFOdAgLFeR/unTp164IEHwpC8w1jzuo/BvTxNjfZpkd/Hhq2v1BgrLUhaMzYxX53XzepsbsvOo/SrSycrdVZas74GuGWxWtUL4BgIAAGBQPfMp6d9NO2J9VRNs6HQXn3uX+1jH6o//OxFO1f7rK2sV4tFLUEdFuZmxKNeJlxdXa6zwuJpX1NVBgdAAAj08syPQ3tCePvX24r5q7XzM4896gt7o9HY+N6Lnqz8ZIGxem06VyssbmmPcstw6pCb+KykJ3n8IQEIAAGBQDfzfDm3jxjk2/g272yLB3+T0770CP8W8OyS9n4P/In5jbWScFWv5GnJTlvIsyvAJxAAAp0j0A3zL168ePfu3Te0LaRe+cxfrb04c+LLrNn07o0mo6e9H+2l12KVr+0p/p80lvj0iicO8ZXGS1fUIr+eiWMgAAR0BLph/pNPPnnZ3HSPruObv95Z/d76zAmafNOU37032L5Q2itnnP9bi3zov+n8MkDlyoPiLA0P6suroL4LGJwCAQ8C3a/weVz5J1S+/4vz5U+88PwP/bMZ+1r1raAsxtbLZVatWkt2W5t1WuifDV7AK1bXSrXpSv4oU2sChoPgepADBDKGwMCZT3iGcjsc72J1ln6xM20Z0SpfW3uJ51OUDw2oxHQ+V5G5pbU2Xuv5AIWkrCOQozl01jHA9QOBtCOA2Ltp72FcHxCIh0A3K3zxPMMKCACB5CIA5ie3b9AyIDA4BMD8wWELz0AguQiA+cntG7QMCAwOATB/cNjCMxBILgJgfnL7Bi0DAoNDAMwfHLbwDASSiwCYn9y+QcuAwOAQAPMHhy08A4HkIgDmJ7dv0DIgMDgExpX5kOUa3D0Bz1lAYFyZP3xZLhnMG0GBssCKLFzj+DLf6h38q2EWblNcY98RGMb/5/fS6OTIclFIwLYR8ruXy0JZIDBiBBLNfF2Hi3DST1WgfshyjfgOQvXjiUByR/s9ynLJaTkJ7AgZLqG0xdW4eC95U5y+0/NseytXZCnFnhD/jjccAYGkIjAy5g9alksCTpH6V2Z57F4ZvZdOaTszKcW6eETP2rS2Zkdstq1lASPXrws1/x5vfvZIAwIJQWBkzI8W6pCyXKTM5doFcjTap7U9sfto9Tjgltbs+J3F0zx0LyMRngtWLL+J+QuUpAXrpam8bU2GokC9claJeDpenSPHv+Utwt4piSMgMEoERjDPH54slxmpV8Tjr5uCXBx6Ecd7wt0J9PzPk0hfxGZEApYVRJRANhBIBAIjYH70014g05ssVzxw3Vylqfx0LV7RQCsu9VH0fJEEmiMDCIwEgaGO9ocoy9UFmPSUl7Tnwb3FZgn7dOELRYBAwhEY6jNfyXLFAcWS5eL6PEKWy1Mmtj6Pp6RvglDiJQnutjbV9zVEIhBIAQJDZT7JctEWEzVTlstdqMH2x5Plchfs4Hx9pdeRfweVwRQIDBWBoTK/oyvrTZaro6qE8cTMXKFSr62sV4tcv0uN/Tv3hBJAIPkIJJf5hF0PslxdIM8Vuzdz09M5+aSncf/aSu8Lfl00BEWAwOARgLrW4DFGDUBg1AhAXWvUPYD6gUAyEBjqW71kXDJaAQSAAAPzcRMAgSwiAOZnsddxzUAAzMc9AASyiACYn8VexzUDATAf9wAQyCICYH4Wex3XDATAfNwDQCCLCID5Wex1XDMQAPNxDwCBLCIA5mex13HNQADMH9g9IKJ0a5F9B1YRHAOBzhEA8zvHDCWAwPgjkOj/z+8F3mBZrl68oiwQSAkC6WS+rsNFHeU6TUnX4TKAQA8IpHC0HyTLRelqD0LMMzenoFykyqPP1k2RLVOrS7dzqhAlLH0vS+DLyTS0vvz0vLjPEA+qxSE2Wm04BAIWAjK+9Bj9femllw4fPhzS4Ff+4cFm48chOxkEFheBtlXY7TaXzOIbheayNpFiG5jWMki3MlUxu21rqfDFVX6sqN5t7l/ZW9labhwPcWzstuMzswg0m81z587dvn371q1bN2++f+PGr0igasw2ov0jjzwS0uhXnn6weX0lZP/uyYPBxQWTFBv5WaFA7LdTdOKbptylSLGpK050mnML+VVie+Mp+ubKjeMhjo1eBY4ziYCX+eM0z+9Zlssa5tx7370/OHVEnjz87EUr1foozpZYzY7Ay+NuFxYX5th0xYrJu7VZp5SZCbIWQbkNeS2Wn6QvCUOtyy3m5Yrwq9cdoOfl78FU8oljo1eFYyAwTswfjiyXYK+kviT+TPHQJmOSalYKJ/7VK5foL4npylC9AbfS1CFuq20uQS+anUfoefl7qG1uMaZcx7HR2oBDIDAm0biGKcvFn8qS6Jzb4mnKxwFCclew3aCZ37g9VKRHfmHIO0/F9LcnCHK6EHFb6h6CTOPYBJVFeiYQGI+1fSXL9Ya9hXSOJctVe9GS5Wo2mbk3mixMn0dQn4i+vrpsK+9a1OcpzB7fi4e3GAqEtMWbz6cLrDCZp0JKz6u9Yel6+3nigw1j0zzY6XFsbFt8AgGOwHgwnzS5LptbSO+ZslxNxow9hhqfpP7mCnHUfr7zKUBdpNjEZ4x/HcihQEhjxFBByxeLA+5pucoXuepMHsTxEMfG5RanWUcglSud3y39UcgefclywdxZ0bfX5I03cipRG/FTQXVmO3FS5NK9Gtq7FvplLt2PHXiwXxTqpdy1RF8uLFKPgHdtf/ze6g2lkyRrFQWpziA+KX6LR4heQuQQzQ0L3YBfiZ5JeeJU2cTxEMdmKJChkiQj4GU+1LUSPOgTC//03RG2DBDHJsGXiKYNBwGoaw0HZ9QCBJKOwHis8CUdRbQPCIwbAmD+uPUY2gsE+oHAOP2Grx/XO1Y+itV2uxrR4jg2ES6QnUUE8MzPYq/jmoEAmI97AAhkEQEwP4u9jmsGAmA+7gEgkEUEwPws9jquGQiA+bgHgEAWEQDzs9jruGYgAObjHgACWUQAzO9Pr8uY1+V1lzdv0G5hIJOltTy2g3Jbnyp8t/Sr56osV1XaqVHIrMXTQl5M2Gt+w5ukVYTD8UUAzO9P34kwHQEReDzhO6xgPLNFVbfzP/vyXz3N/87TctdK9UreG7RfOYo6qE37ct+nmFapaJPZJJ8CSBorBMB8d3eRLJfa3Xkh574RekTATgraLcLxOoV94mk5meFHxSr/h3wKEBpmxn/Rq/7TX4sKWCiVChQzNC73w6pA3rgjAOYbPUg6XMeeeF3tdGpkh53IiNvLq1rUPEH8ubkpF1XDI3KF1dFr3uTpBf69cYZke7BlHAH8x45zAyhZrmaDQpg0m43G4S98iRIdC8aO/d3r+ql2LCPp68H2rUi987OlSk2Ljy/j4toR/jQPsQ5FaRnBM5a9y4iPGWrTlZNLMxi9u6DJ2GmGnvkydHdI/26zHbbvCO37Djy0/+DxA0dmDx7/yme//pzauUHwJsN1OwNxMZvnATtF+E5nMCDG+k4gz2CHPjnr5XylXli8EBKr16eUkSTmC3XiPp77Bi5ZO8kQ86OFOu5QnN7rIfu1KzfC7g8zDrcgvng4W7F8SRqDb2Ks7yY+X7bTNtdM3MklVY7SWq9Pa4v7Z0PXCphTqWiYtvQvrwN/xxuBTIz2hyLLRfcBX+Wr1ejpPk/PZP5ot3S4xFeCpdjlP1oPD7an5dILN/qO4OF5tZW7jm9BOeafLs+GeNEq7dg/CiQfgUwwP/ppLzpKSnTIPlutnZ957FHf/ms0GiTU4ZslqS+Er+Sj3dLWEuliqs+4WIf1heDrIiJxYn5jbZMEuc4snS7yIT+9ijfUueJ+JRRPLxZqlXDuRzQF2WONQMpH+8OU5eL3gS3KJ1X3nDG9muqLSX63q3vyTpPvD/nXC238BZ6+xR4JTMxfIIVwvOKTmGbwb8qZP1RZLrp95CrfpSuGDpedTko4SyTOq/S5Rny7WdzHK74R98OIqk/5aJ9kuWiLia0py+Uu1GD7w9T4LHPxbq+yfIbRmH5O+zGAnOovL5OZMxJwVxHvXP4cQCjzxSsQaMW5v5yvnFyhH/hgyxgCKWd+R71Z+f4vzpc/8cLzPwwq9bXqW0FZKl1SvO6ZzMslAJ6ufyGoYnEPaIWP5vUR7/XU5J9rfIfO/C3u00CEgfxx+yAddmC+0Y9xuG0U8J5IijMlxmlbyN/4SVluO0198ldoFXVGBwZfjVz+e/oeXufrlfDjifmFUsVYJHRb4DyVCEBdK5XdiosCAgYCUNcy4MAJEMgsAilf289sv+LCgUA4AmB+OD7IBQLpRADMT2e/4qqAQDgCYH44PsgFAulEAMxPZ7/iqoBAOAJgfjg+yAUC6UQAzE9nv+KqgEA4AmB+OD7IBQLpRADMT2e/4qqAQDgCYH44PsgFAulEAMxPZ7/iqoBAOAJgfjg+I86VOleIfjnibkhj9WB+GnsV1wQEohDA/+dHIRQ7nzS5lC2p9KjjXg4o4GZ7vhcHKAsE/BEA8/1x6TSVdLge/rYVUZ/Kuk479QZ7IDBoBDDa7wPCSpbr5uWld9/81tuvflPKclG62oOqcStYczstTRy6hDdEmqXLoZYAtDKyKu8SgeFLZksvLv9BTUV6mhAA86N7c6CyXDKGtqO9Rc2RofoXfENucfZOX6KAXGLTNLXdfqRSt67iq2l8kJd8hdletiZXILUVfRukzALMj+7QaKGOOz3IcknKWuHzeWN85bdkK9fLpryW0MmytHFdfoTEDwl4K50/qfY1NzNh16C+Wibmq77fMtHIwGJ8EcA8P6zvhiLLxSlbs7S3qDFhxPdG65dxPYWqj+GHeyksLsyx6crKerVYZLral7hkp8YwBJCXVgTA/LCejX7ai9I9ynIZlBVjcv+Q/CKLZHFyPEi2z2YL/BDRJfFnioc2GZMC3lYKPfEtJaA6dwTxPB8cs5GE0b5/Pw9VlksM1OWwXElv+zeLUiket2eTmlq2wM9Voe1V4AN77pmkfWSKCgTOxflKogIpmKuWCQMrRUbqEADz/bt0uLJcivqhxDdVun3aLeW6l1e5tpcgvpT3Jeq71b4sPT7F/5NY4vPBM9VJYL5/95Im12Vz87cTqaYsV5OW+/S9wfZFynIJ6ks5vsLiaZqV+27CSjzCfbMtWb/65goJeNuqnULLU6T4TCG4HucWCWvqrwACXCM5ZQhgnt+HDu2DLBcndY3L8RXmLoi5uG+zpPZ1JV8+pITv6QXdyqw6k9petRrNCayvDyn0RymFRSXzt14us6qtuivUfX2+FXwbgMT0IOCZMyJhNAiIZy/x03pVbzVCjMfNqb01RLduQTOv3Za5eqqfY92Hu8rRXD5qHSgCzWbz3Llzt2/fvnXr1s2b79+48Suoa6XnSxxXAgSCEIC6VhAySAcC2UIAK3zZ6m9cLRCQCID5uBOAQBYRAPOz2Ou4ZiAA5uMeAAJZRADMz2Kv45qBAJiPewAIZBEBMD+LvY5rBgJgPu4BIJBFBMD8LPY6rhkIgPm4B4BAFhEA87PY67hmIID/0k3iPXDxzdc2fv4/W+1D+dyVo/f/8ZFPHUtiK71ton8ZnkaELy8uSUwB80fZKz9ee9xV/Uc/Xnx/+wP/9rPGN37vvr/+2Eee/F/2wjv7v8NeGxvyu64Hp0lFAMwfcc88+KdnVQtI94KOX9y8tPgn97/1f2tv/Oa//uwPfve9V3/7T/+9+++fUlYJPuAxfqoJbh+a5iAA5jtYDP+otbtnt91W9e7dw5n/k2vXPrTvD397Y1/u5/9555d3P3z9qzd+8wFlgwMg0BcEsMLXFxi7dNLa3bvbZmqnLwH5PfD89Q+tvXPg8o/u/PTNqV/e3H/gd97xr4Ar7uR45FxxYAlu5TxiWUauN9ssTe6EvcuL7iMwVq+noL+GlzCLbrb/NSO1PwiA+f3BsTsvO609rRZTe/POLu1//sHdj1z72Xvv/f47H3z07Vuf3nvr0uT9OyH+eeTsM5N2EC+Ks0WB9DVuEvkoUJ+9iWwtl3FuilU5y2JtqpInIR9j40z1lfQyrDwnVCxEwyui2R5vSOgzAvYtgc8RIPDyfzzVuH1X3+/7+HHat376k8fP1r76jef+5vHF6vN/H9gyGU7PFUhPxt3TI/Hp5c1c88yyk16VA3GqzriNSHHVKsoapsaJ5Vp+iBx3yEHfphjFcNI9At44fHjm9/mbtCN3O7v3tFptfZfFP/yxqafKf3nqrz79nWfnS48uhPu0IusrI0dwQyXZB/SAz1fq9hljUmvPHeZbaPUoIx+1L0fSS1kFHShZP49BB832lEVC7wiA+b1j2L2Hu617WrttfZe+ZMq1t16J49qOrK9sRejtutLoFLNquQZg0J7sRcRt//K2NyXpZa8i0KfbjW1rfsovEJp66HMPx8S/WqfZjiWOBoEAmD8IVOP6vNvau7PL9F2WlCmUG9eRYSfJKpPoKS9n7WpwLofaRoHoE2Owb4057YD9QaU71fDSmx3kE+l9QwDM7xuUXTi629qzu8to/+RnvqiKf/kvvigTKVclhhxwxUxjE0/ywiQX1hDDeSHFtxEolO0pb1AwUtLLqNp1wt/v2xIArF4xNLw81WrNdrnB6QAQiHVvDaBeuOQItGieL0b7dEzkl/w/fuwz9vj/njgwueW2xMTcPYtWjkSufeYr1yW/LWwTIcopVTlVUocH/hpenTW7wyphHokAmB8J0QANdlr3yJf5S//8lKyGDo5+/vOU2KJZQCsW8+lhmlcv3+XovrB4QT7i5WqfWmZTY3/7mopVGvy7yrtn8VzSy7Bh/AcAVo3kkSb++mtC2zUZqVZZKwqmhperWpqUqGYrHzgYGALdzSQH1pyMOd7Z3UOPd7roh44ee31jXV69TKFjyo2DB83gFzbz4oe/wpzm5M4UnE+2N3PT0zn5ip7y1lbo/b3jlx7Ia8wxEO/aFs4aJuSjfYj+F8d2IpS8nSocX+ZRsTrLfwdgJfJ1BmPCEdps0xPOBoAAmD8AUGO7pF/vvvIjjYbugrGYT4VCfy/vziy6f1vvNri6dIkxuU6gGuS2sTP4t8K8feL+DCpk20Xl23b4HAACYP4AQI3tslx+LLbt0Aytl/wzEx3XKJYGzSF9xz5QYEgIxH2qDKk5qGbICNCM3Zik07yd5vldTbivLp3kJU9b8t1DvhBU1yECeOZ3CFjKzGnAzfi//TiXRUsBG52Rl7491G8Ggl8eOjXgKAkIQEU7Cb2ANgCBwSIAFe3B4gvvQGBcEMA8f1x6Cu0EAv1EAMzvJ5rwBQTGBQEwf1x6Cu0EAv1E4P8Bo8c45mhP/HoAAAAASUVORK5CYIIA" alt="" />
所以我们要在这里创建一个jsp文件,views文件夹也是。
最后在web.xml中加入如下内容
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/application-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我们会发现这里也是配置的Servlet,即org.springframework.web.servlet.DispatcherServlet,只不过只配置了这单独一个,映射路径匹配通用请求,同时init-param设置初始参数即我们SpringMVC配置文件路径。这样一来,我们请求都会被SpringMVC系列组件接受、解析路径、分配到相应的Controller的相应方法。
上面步骤结束后,我们发布项目并启动Tomcat服务器,在浏览器地址栏输入http://localhost/spring-mvc/demo/toPage,看到如下页面,即为成功aaarticlea/png;base64,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AAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUs8P8Bc1b6YAAAAARJREFUMuxWUw56BHUAAAAASUVORK5CYIIA" alt="" width="916" height="142" />
小结
通过上面基础的实例,我们能一步步理解从Servlet到web框架SpringMVC的使用,实际开发中同样遵循这些基本规则,只不过事更多的业务逻辑、视图文件等等,比如这里讲到页面跳转中的请求转发,那么是否类似Servlet还有响应重定向,还有,Controller中方法我们不一定是跳转到页面,也可以直接传递JSON数据返回前端,以及我们前面学习到的MyBatis封装持久层,那么我们在这里怎么与持久层连接起来去访问数据库查询或者更新数据,还有到底什么是业务逻辑,等等这些都是我们需要考虑的问题,后面准备分别以具体实例展开说明,欢迎一起探讨。