Servlet知识点

Servlet编写步骤:
  A:自定义类继承HttpServlet并根据需要重写相关方法
  B:在web.xml文件中注册Servlet
      <servlet>
      <servlet-name>HelloServletDemo01</servlet-name>
      <servlet-class>com.hsj.servlet.HelloServletDemo01</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>HelloServletDemo01</servlet-name>
      <url-pattern>/helloServletDemo01</url-pattern>
  </servlet-mapping>
  C:访问Servlet
      http://localhost:8080/ServletDemo01/helloServletDemo01

 

自定义Servlet有三种方式:
     A:实现Servlet接口
     B:继承GenericServlet
     C:继承HttpServlet
  
 自定义Servlet的编写步骤:
  A:自定义类实现Servlet接口并实现接口中所有的方法并打印输出日志方便观察效果
  B:在站点部署描述符文件(WEB-INF/web.xml)中注册自定义的Servlet
      <!-- 注册自定义的Servlet -->
      <servlet>
          <!-- servlet-name的值可以任意取,但为了方便使用一般写成自定义Servlet类的简单类名 -->
          <servlet-name>ServletLifeCycler</servlet-name>
          <!-- servlet-class的值为自定义Servlet的完整包名+类名,即完全限定名 -->
          <servlet-class>com.hsj.servlet.ServletLifeCycler</servlet-class>
      </servlet>
      
      <servlet-mapping>
          <servlet-name>ServletLifeCycler</servlet-name>
          <!-- url-pattern的值是我们访问当前Servlet路径的一部分,内容随便写,但为了开发方便,大家都约定:
          当前Servlet的简单类名并且把第一个字母小写 -->
          <url-pattern>/servletLifeCycler</url-pattern>
      </servlet-mapping>
      
     访问Servlet的格式:http://localhost:8080/项目的站点名/url-pattern的值,如:
     http://localhost:8080/ServletDemo01/servletLifeCycler
    
   Servlet的工作原理:
       String url=http://localhost:8080/ServletDemo01/servletLifeCycler
       int startIndex=url.lastIndexOf("/")
       url.substring(startIndex)的执行结果为:/servletLifeCycler
       在站点部署描述符文件中查找所有的servlet-mapping的url-pattern的值,如果和/servletLifeCycler相等,说明
       找到了要访问的Servlet的入口,然后查找和当前servlet-mapping是兄弟关系的servlet-name的值并且存储起来,
       继续查找当前servlet-name的父元素servlet-mapping的兄弟节点servlet的子节点servlet-name的内容ServletLifeCycler
       然后和之前servlet-mapping的子节点servlet-name的值进行比较看是否相等,如果不相等则继续查询其它的节点,如果相等
       则找到了要访问servlet的类的完整包名+类名即servlet的字节点servlet-name的兄弟节点servlet-class的值,然后
       通过反射技术就可以实例化自定义的Servlet类了,
       Class clz=Class.forName("com.hsj.servlet.ServletLifeCycler");
       Object obj=clz.newInstance();  <===> ServletLifeCycler slc=new ServletLifeCycler();  Object obj=slc;
       自动调用构造函数,之后自动调用init(ServletConfig config),然后调用service(req,res)完成客户端的处理请求,
       之后再次访问则只调用service(req,res);
       
   面试题:请简述Servlet生命周期函数及其执行流程?
   init():当用户第一次访问当前Servlet时自动调用,用来完成初始化工作,而且只调用一次。 
   service():用户每次当前当前Servlet都会自动调用当前方法,用来完成客户端发送过来的请求
   destroy():当前Servlet销毁时自动调用的方法,用来做资源释放工作,而且只调用一次。 

 

 Servlet实例化的过程取决于web.xml文件中的<load-on-startup>0</load-on-startup>的值,如果大于等于0,则
 表示tomcat服务器一启动则马上实例化,数字的顺序代表了Servlet实例化的顺序,数字越小越优先实例化
 查看类的继承结构图的快捷键:ctrl+t

 

在Servlet中如何得到JSP的隐式对象?
     方法的形式就是:request,response
     out对象:PrintWriter out=response.getWriter();
     session对象:HttpSession session=request.getSession();
     application对象:ServletContext application=request.getServletContext();
     config对象:config=this.getServletConfig();
 

自定义注册Servlet

 <!-- 注册自定义的Servlet -->
  <servlet>
  	<!-- servlet-name的值可以任意取,但为了方便使用一般写成自定义Servlet类的简单类名 -->
  	<servlet-name>ServletLifeCycler</servlet-name>
  	<!-- servlet-class的值为自定义Servlet的完整包名+类名,即完全限定名 -->
  	<servlet-class>com.hsj.servlet.ServletLifeCycler</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>ServletLifeCycler</servlet-name>
  	<!-- url-pattern的值是我们访问当前Servlet路径的一部分,内容随便写,但为了开发方便,大家都约定:
  	当前Servlet的简单类名并且把第一个字母小写 -->
  	<url-pattern>/servletLifeCycler</url-pattern>
  </servlet-mapping>

面试题:flush()和close()方法的区别:
           相同点:都会刷新缓冲区并马上将数据写出到底层设备中
           不同点:
                         A:flush()方法只能刷新缓冲区  close()方法会首先刷新缓冲区然后在关闭流对象。
                         B:flush()之后可以继续写出内容,close()之后就不能再写出内容了,否则报错

 如果同时编写了init()和init(ServletConfig config)则访问当前Servlet时只会调用init(ServletConfig config)方法,
 如果想同时调用init()方法,则可以在init(ServletConfig config)中加上代码:super.init(config);
 如果没有提供init(ServletConfig config),只提供了init()方法会咋样?会自动调用init()方法

关于Servlet注解

如果在注解中只有一个value属性在使用,此时的value=可以省略

@WebServlet("/qq")//如果没有显示指定Servlet的名字,默认默认情况下当前Servlet的名字为当前Servlet类的完整包名+类名,即完全限定名

@WebServlet(value="/qq")

@WebServlet(name="ServletDemo01",value="/qq")
@WebServlet(name="ServletDemo01",value={"/qq","/feiqiu","/ly"})
@WebServlet(name="ServletDemo01",urlPatterns={"/qq","/feiqiu","/ly"})

注解

 

GenericServlet类中的一些方法

String getInitParameter(String name) :返回具有指定名称的初始化参数。通过调用config. getInitParameter(name)实现

ServletConfig getServletConfig() :返回传递到init()方法的ServletConfig对象

ServletContext getServletContext() : 返回config对象中引用的ServletContext

abstract void service(Request request,Response response) throws ServletException,IOException :由Servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet是Java EE平台的一部分,它是一种服务器端的Java程序,用于处理HTTP请求和响应。Servlet在Web应用程序中扮演着重要的角色,主要用于处理用户的请求、生成动态内容、管理会话状态等。 以下是Servlet的一些重要概念和知识点: 1. 生命周期:Servlet具有生命周期,包括初始化、服务和销毁三个阶段。在初始化阶段,Servlet会执行一些初始化操作;在服务阶段,Servlet会处理客户端的请求;在销毁阶段,Servlet会释放资源。 2. Servlet容器:Servlet容器是Web服务器或应用服务器中负责管理Servlet生命周期的组件。常见的Servlet容器包括Tomcat、Jetty等。 3. Servlet API:Servlet API是Java EE平台中定义Servlet规范的一部分,包括javax.servlet和javax.servlet.http两个包。其中javax.servlet包定义了Servlet的核心接口,javax.servlet.http包则扩展了javax.servlet包,增加了处理HTTP请求和响应的相关类和接口。 4. Servlet配置:Servlet可以通过web.xml文件进行配置,包括Servlet的映射、Servlet初始化参数、Servlet过滤器等。 5. Servlet请求处理:Servlet通过HttpServletRequest对象获取客户端的请求信息,包括请求头、请求参数、请求体等。Servlet通过HttpServletResponse对象生成响应内容,包括响应头、响应体等。 6. Servlet会话管理:Servlet可以通过HttpSession对象管理会话状态,包括会话的创建、销毁、属性的设置和获取等。 7. Servlet过滤器:Servlet过滤器是一种可插拔的组件,用于在Servlet请求和响应之间执行某些操作,例如权限校验、日志记录等。 8. Servlet异步处理:Servlet可以通过异步处理来提高性能,避免阻塞线程。Servlet 3.0规范中引入了异步处理的支持。 9. Servlet注解:Servlet还可以通过注解的方式进行配置,例如@WebServlet、@WebFilter等。 以上是Servlet的一些重要概念和知识点,掌握这些知识可以帮助开发者更好地理解和使用Servlet

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值