手写 SpringMVC
常规的 JavaEE 开发方式,需要对不同请求,都新建一个 Servlet,比如说登录、登出,就需要两个 Servlet ,使得开发十分的繁琐
这里,我们模仿 SpringMVC 的开发模式,去设计实现一个简易的 SpringMVC,一是为了简化我们的开发流程,二是为我们后面学习 SpringMVC 打下基础
框架的大致流程如下:
DispatcherServlet
web.xml:
我们要为这个 DispatcherServlet ,设置路径,不等所有请求都走 DispatcherServlet,web.xml 中设定,只有请求后面跟 .do 的,会走 DispatcherServlet
这里的 <param-value>application.properties</param-value>
,放置的是配置文件的路径,这里,我是将配置文件方式在 resources 下的
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>top.faroz.mvc.DispatcherServlet</servlet-class>
<!--初始化参数,写上配置文件的路径-->
<init-param>
<param-name>ContentConfigLocation</param-name>
<param-value>application.properties</param-value>
</init-param>
<!--项目一启动,就去加载这个servlet-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
DispatcherServlet:
init()
init()
方法中,要读取 web.xml 中,配置文件的路径,然后在我们的映射池中,去加载,为请求和对应的方法做映射
service()
service()
起作用的前提,是映射池 HandlerMapping 中的加载已经完成,我们以用户的请求,作为 key,去映射池中,获取对应的方法
@WebServlet(name = "DispatcherServlet")
public class DispatcherServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
//获取配置文件路径
String path = config.getInitParameter("ContentConfigLocation");
System.out.println("获取的文件路径为:"+path);
InputStream is = this.getClass().getClassLoader().getResourceAsStream(path);
HandlerMapping.load(is);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException