在学习过servlet后我们知道servlet用于响应浏览器的请求,当客户端发送请求到服务器的时候,服务器启动并且调用Servlet,而Servlet会根据客户端的请求生成响应的内容并传给服务器,服务器再将响应的结果返回给客户端。而在项目的开发过程中,处理很多的请求是必不可免的,如果使用servlet开发,写起来非常的繁琐,例如:我们现在有这样一个案例,一个demo中包含了用户的登陆,用户的注册,获取用户信息的功能,这些功能分别对应一个servlet来处理请求并且响应处理的结果,每一块都需要单独的写一个servlet去实现每一个流程,这样就使得程序的可阅读性,程序的维护非常的差,还会使得程序很复杂。
如上图所示,每写一个功能就需要一个servlet,这使得我们的程序会变得非常的繁琐,也不利于阅读,为了来发的便捷,我们就需要写一个mvc框架实现简单的流程控制。就如上面所描述的功能,我们可以写一个类,注册和登录的请求都去找这一个类,让这个类中所对应的方法去处理请求的逻辑,也就是说这个类中可能包含了这样三个方法,一个方法是登陆,一个方法是注册,一个方法是获取用户的信息,这三个方法就相应的服务客户端传来的不同的请求,通过这个方式编写项目会非常的简单,因为类比较少,还会把代码优化的比较好,这就是手写mvc框架的好处,还会对框架建立一些认知。这样一个类的主要作用就是描述处理请求的方法。
接下来我们主要来学习SpringMVC框架中的Controller层用于逻辑控制即对请求的处理和View层面视图的展现。具体的实现过程是:我们写一个servlet(给它一个映射请求*.do),即所有的以 *.do的请求都来找这个servlet(所有请求的入口,由这个入口找具体处理这个请求的类),由这个servlet进行相应的代码编写,也就是加载配置文件获取配置文件中每一个用于处理请求的类,找到其中处理相应请求的方法处理来自客户端的请求;在servlet中有初始化的方法进行加载配置文件,配置文件的作用就是让客户端的请求找到处理这个请求的方法具体在哪个类中,然后通过配置文件已经建立好的映射地址的池找到具体的请求方法进行相应的逻辑处理。大致的流程是:用户请求找到servlet,由servlet去映射的池中去寻找是哪一个类下的哪个方法来处理此次的请求,然后调用这个方法,最后将结果返回给用户。
大体的思想就是一个servlet接收了所有的请求,servlet接收的所有请求都会根据映射器所指向的某个类的方法去调用这个方法去处理每个请求,最后将结果返回。
接下来我们先编写一个servlet来接收用户所有的请求。
/**
* @author HSD
* @create 2020-11-07 14:21
*/
public class DispatcherServlet extends HttpServlet {
@Override
public void init(ServletConfig config) {
//通过config获取配置文件的参数(通过键获取值即配置文件)
//通过这个路径我们就把配置文件以输入流的方式加载进来 , 获取配置文件中每一所存储的键值对
//配置文件就是配置每一个用于处理请求的类,每一个类中可能包含0-n个用于请求的方法
String path = config.getInitParameter("contentConfigLocation");
//以流的方式获取到了配置文件
InputStream is = DispatcherServlet.class.getClassLoader().getResourceAsStream(path);
//映射器加载配置信息的流,即得到流信息
try {
HandlerMapping.load(is);
} catch (Exception e) {
e.printStackTrace();
}
}
对这个servlet进行相应的配置
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>com.huang.mvc.DispatcherServlet</servlet-class>
<!--加载这个servlet以后,我们配置一些用于描述配置文件参数(因为我们通过这个servlet接收请求的地址
再由servlet根据配置文件找到具体处理这个请求的类和方法)
DispatcherServlet在启动的时候就会加载配置文件-->
<!--contentConfigLocation是application.properties配置文件的名称-->
<init-param>
<param-name>contentConfigLocation</param-name>
<param-value>application.properties</param-value>
&