Servlet到春天的请求分发机制是什么

  介绍

这篇文章主要介绍”Servlet到春天的请求分发机制是什么”,在日常操作中,相信很多人在Servlet到春天的请求分发机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Servlet到春的请求分发机制是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<节>

在讲请求分发之前先梳理一下一个Web请求的交互逻辑:

<李>

首先用户在客户端发送一个请求到服务器。

<李>

这个请求首先会经过操作系统的TCP/IP协议栈解析后发送至某一个端口

<李>

在该端口运行着一个网络应用服务器(假设是Tomcat)

<李>

接着Tomcat会把请求根据请求路径传送给对应的Servlet处理
(要注意的是,Web服务器本身是不处理请求的,比如说Tomcat,它只负责分发请求)

1。Servlet时期的请求分发

在还没有春天框架的时候,只能单纯用Servlet处理请求。

具体做法是:把Servlet及其映射路径配置在一个叫网络。xml的配置文件中,当服务器启动时,Tomcat会自动读取这个文件,然后根据文件中的配置,把请求分配到对应的Servlet。

这个时候请求分发的工作是在Tomcat中完成的,通常一个业务对应一个Servlet,比如说关于用户的增删改查,对应的Servlet很有可能是这样子的:

<李>

AddUserServlet

<李>

DeleteUserServlet

<李>

UpdateUserServlet

对应的结构图如下:

<人物>  Servlet到春天的请求分发机制是什么”>
  图>,</<p>这和我们如今开发中的架构很不一样,因为现在通常是一个类里面包含了对同个业务所有处理逻辑。比如说对用户的增删改查都放在同一个类里,用不同的方法区分。</p> <p>但在以前,一个Servlet里面通常只有一个服务是有用的,其他和生命周期相关的方法基本只是给一个空壳的重写,所以一个服务方法就对应一个业务处理逻辑。这种分类方法不仅给web服务器带来很大负担的,而且会导致网络。xml文件十分庞大。(用户的增删改查逻辑对应4个Servlet,要是能把和用户相关的处理逻辑分发给一个大的UserServlet就好了)</p> <p>后来有人找到了把和用户相关的处理逻辑分发给一个大的UserServlet的方法。具体方法就是使用Java中的反射。详细代码如下:</p> <pre> <代码>/* * <br/> *该Servlet不需要进行配置,因为该Servlet从来不需要被直接访问,使用来被继承的<br/> *可以定义为抽象类<br/> */<br/>公共抽象类BaseServlet扩展HttpServlet {<br/> <br/> @Override <br/>保护无效服务(HttpServletRequest请求,HttpServletResponse响应)<br/>抛出ServletException, IOException {<br/>//解决职位表单中文乱码问题<br/> request.setcharacterencoding (“utf-8"); <br/> <br/>//获取方法属性的值(方法名)<br/>字符串methodName=request.getParameter (“method"); <br/>如果(methodName==null | | methodName.trim () .isEmpty ()) {<br/>把新RuntimeException(“您没有传递方法参数!无法确定您想要调用的方法!“);<br/>} <br/> <br/>//使用反射调用方法<br/>尝试{<br/>//获取当前Servlet的类信息<br/>类clazz=this.getClass();//实际访问的Servlet,不是BaseServlet,是BaseServlet的子类比如UserServlet <br/>//使用反射创建对象<br/>//对象obj=clazz.newInstance (); <br/>//获取方法<br/>=clazz方法方法。getMethod (methodName HttpServletRequest.class HttpServletResponse.class); <br/>//使用反射执行方法<br/>的方法。调用(请求,响应);<br/>}捕捉(异常e) {<br/> e.printstacktrace (); <br/>} <br/>} <br/>} <br/> </代码> </pre>
  ,<p>这样一来,分发请求的结构就变成了这样:</p> <人物> <img src=Servlet到春天的请求分发机制是什么