servlet(DispatcherServlet,HttpServlet,GenericServlet,Servlet)继承继承实现

本文介绍Servlet的生命周期方法init(), service()和destroy()的作用,并探讨如何通过web.xml配置默认Servlet来处理特定请求,如静态资源访问。同时,文章还讨论了Servlet与Spring MVC框架的集成方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生命周期:init() , service() 和 destroy()

https://zhidao.baidu.com/question/1435947770817463979.html?qbl=relate_question_0&word=%B7%C3%CE%CA%BE%B2%CC%AChtml%D2%B3%C3%E6%D0%E8%D2%AA%C5%E4servlet%C2%F0  

https://blog.youkuaiyun.com/u010900754/article/details/79998379

所以这里一共有四个优先级:

精确》路径》后缀》default。后缀内部又分为两个优先级。其次搞清楚各自的格式。

只要搞清楚了优先级,那么/*和/的区别不是很简单吗。

 

不想走已配置的springMVC的controller时或图片被拦截时可在web.xml中配置:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>
        org.apache.catalina.servlets.DefaultServlet
    </servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/busiLicense.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

 

 

服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口Common Gateway Interface,CGI)应用程序完成的。

在传统的 CGI中,每个请求都要启动一个新的进程,如果 CGI 程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在 Servlet 中,每个请求由一个轻量级的 Java 线程处理(而不是重量级的操作系统进程)。

在传统 CGI 中,如果有 N 个并发的对同一 CGI程序的请求,则该CGI程序的代码在内存中重复装载了 N 次;而对于 Servlet,处理请求的是 N 个线程,只需要一份 Servlet 类代码。在性能优化方面,Servlet 也比 CGI 有着更多的选择。

Tomcat便是为了支持servlet而发展出来的servlet容器

 

HttpServlet和HttpServletRequest的区别联系?

一个是对参数的处理逻辑,一个是参数,其实没有任何逻辑关系。。

HttpServlet(转处理http协议请求的servlet)继承了GenericServlet(通用的无关协议的servlet)(对GenericServlet的service方法重写以调用自己增加的doGet和doPost方法),GenericServlet实现了Servlet接口(但service方法可以不实现?)

DispatcherServlet(springMVC的处理请求映射到控制器及处理控制器返回的数据模型和视图名的servlet)通过继承HttpServlet实现了Servlet的方法doService还有自己的一个方法doDispatch()

 

关于servlet参数:

FacadeRequest是对Request的封装,是对HttpServletRequest接口的实现(为什么要实现及封装?)。

HttpServletRequest接口继承了ServletRequest接口

 

 

https://blog.youkuaiyun.com/aesop_wubo/article/details/7630440#

tomcat入口:org.apache.catalina.startup.Bootstrap的main方法

https://blog.youkuaiyun.com/jiaomingliang/article/details/47401275  tomcat的启动

tomcat-coyote.jar下的JIoEndpoint类:run方法中调用下面方法处理socket

protected boolean processSocket(Socket socket)
  {
    try
    {
      SocketWrapper<Socket> wrapper = new SocketWrapper(socket);
      wrapper.setKeepAliveLeft(getMaxKeepAliveRequests());
      wrapper.setSecure(isSSLEnabled());
      if (!this.running) {
        return false;
      }
      getExecutor().execute(new SocketProcessor(wrapper));
    }
    catch (RejectedExecutionException x)
    {
      log.warn("Socket processing request was rejected for:" + socket, x);
      return false;
    }
    catch (Throwable t)
    {
      ExceptionUtils.handleThrowable(t);

      log.error(sm.getString("endpoint.process.fail"), t);
      return false;
    }
    return true;
  }

SocketWrapper的构造方法:

private volatile E socket;

public SocketWrapper(E socket)
  {
    this.socket = socket;
    ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    this.blockingStatusReadLock = lock.readLock();
    this.blockingStatusWriteLock = lock.writeLock();
  }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

at com.xx.meituanhotel.pc.webapp.controller.MainController.exception(MainController.java:197) ~[classes/:na]
    at sun.reflect.GeneratedMethodAccessor725.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_79]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_79]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) [servlet-api.jar:na]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) ~[spring-webmvc-4.2.7.RELEASE.jar:4.2.7.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [servlet-api.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.70]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.70]
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:747) [catalina.jar:7.0.70]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487) [catalina.jar:7.0.70]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410) [catalina.jar:7.0.70]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337) [catalina.jar:7.0.70]
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:479) [catalina.jar:7.0.70]
    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:341) [catalina.jar:7.0.70]
    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:434) [catalina.jar:7.0.70]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:204) [catalina.jar:7.0.70]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.70]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.70]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) [catalina.jar:7.0.70]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082) [tomcat-coyote.jar:7.0.70]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623) [tomcat-coyote.jar:7.0.70]
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.70]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_79]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.70]
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值