【复盘知识篇】Servlet第一次大总结复习

目录

Tomcat服务器相关知识点

在安装Tomcat服务器之前我们要做的事:

Tomcat下载与安装

如何在idea中关联Tomcat服务器

编写一个自己的servlet

servlet—HTTPservlet是如何过度的

ServletConfig

servletcontext

HttpServlet


在学习servlet之前我们学到了Tomcat服务器,那么首先我们复习一下Tomcat服务器相关知识;

Tomcat服务器相关知识点

  1. Tomcat服务器是一款免费且开源的轻量级web服务器;

在安装Tomcat服务器之前我们要做的事:

在此之前我们需要在电脑上安装Java,因为Tomcat服务器是用纯Java代码完成的,所以要想使用Tomcat服务器就必须有Java环境; 如何查看自己是否安装了JavaJDK呢?

  • 在终端输入Java,看是否能出现Java相关东西。然后还可以输入java version查看Java的版本;

Tomcat下载与安装

  1. 在官网Apache Tomcat® - Welcome!下载并安装,官网下载会比较慢属于正常现象;

  2. 进行环境变量配置,右键此电脑打开属性后打开高级属性在系统变量中新建系统变量,后再path中新建环境变量并保存;

    •  系统变量:
           变量名:CATALINA_HOME
           变量值:解压后的路径
       环境变量:
           %CATALINA_HOME%\bin
  3. 然后在DOS命令窗口检验是否安装成功;

    •  startup.bat 启动Tomcat服务器命令;
       shutdown.bat 关闭Tomcat服务器命令;
    • 这里我们建议将shutdown.bat文件的文件名改为stop.bat;

  4. 这里可能会出现闪退问题,和乱码问题;

    • 问题一解决办法:

      • 造成这个的原因有很多,最常见的是Tomcat服务器的版本和Java版本不匹配;

      • 还有一个就是环境变量配置出错;

    • 问题二解决办法:

      • 设置一下编码格式

如何在idea中关联Tomcat服务器

  • 首先新建一个工程,并创建一个modules;

  • 在工程的窗口右上角有个蓝色锤子,点开之后左上角点击加号添加local,本地的Tomcat包;

  • 然后在配置页面配置相关设置;

  • 之后可以使用debug的方式启动服务器;

编写一个自己的servlet

  • 新建工程(new project),创建模块(modules);

  • 在modules下的src中创建包,然后在包下编写servlettest类并继承HttpServlet类重写方法;

  • 将业务代码写在service方法中;

  • 为模块添加框架支持;

  • 在WEB-INF下创建lib文件夹,并将JDBC驱动jar包导入;

  • 需要用的jar包导入到lib后,此时还未能真正使用jar包相关依赖,

    • 如果是在 IDAE 上,需要在导入的jar包点击鼠标右键在最下方点击 add as library,发现jar包前有个小三角符号后才代表jar包的相关依赖可以在项目中使用。

  • 然后在WEB-INF下的web.xml文件中,注册servlettest类(请求路径和Servlet之间对应起来)示例如下:

     <servlet>
            <servlet-name>ServletTest</servlet-name>
            <servlet-class>com.lypcode.javaweb.servlet.ServeletTest</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletTest</servlet-name>
            <url-pattern>/servlet/student</url-pattern>
        </servlet-mapping>

servlet—HTTPservlet是如何过度的

  • 在刚开始我们编写一个自己的servlettest 需要继承Jakarta包下的Servlet类,然后重写其中的五个方法,但是其中的四个方法我们并不会去修改,意思也就是说五个方法中只有一个方法是我们所需要的,此时我们想到使用适配器设计模式,创建一个GenericServlet抽象类来过渡;

  • 其中我们让GenericServlet抽象类实现Servlet接口,实现init();destory();getServletConfig();getServleInfo();然后将service方法设置成抽象方法;然后添加一个空参构造函数;

    public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

ServletConfig

  • ServletConfig是init()方法中的参数,是servlet对象的配置信息对象;

  • 一个servlet对象对应一个ServletConfig,servletconfig对象是由Tomcat服务器创建并在调用init方法之前传递给init方法;

  • 常用方法:

    public String getInitParameter(String name); // 通过初始化参数的name获取value
     public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
     public ServletContext getServletContext(); // 获取ServletContext对象
     public String getServletName(); // 获取Servlet的name
  • ServletConfig对象中存储<servlet>。。。</servlet>中的配置信息;

     <servlet>
             <servlet-name>ServletTest</servlet-name>
             <servlet-class>com.lypcode.javaweb.servlet.ServeletTest</servlet-class>
         </servlet>

servletcontext

  • ServletContext是ServletConfig对象的方法的参数;

  • ServletContext对象被称为servlet上下文对象(servlet对象的四周环境对象)、一个ServletContext对象通常对应的是一个web.xml文件;

  • ServletContext对象在服务器启动阶段创建,在服务器关闭的时候销毁。这就是ServletContext对象的生命周期。ServletContext对象是应用级对象。

  • ServletContext接口中有哪些常用的方法:

     public String getInitParameter(String name); // 通过初始化参数的name获取value
     public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name

    servletcontext对象中存储<context-param>。。。</context-param>中的信息;

    <!--以上两个方法是ServletContext对象的方法,这个方法获取的是什么信息?是以下的配置信息-->
     <context-param>
         <param-name>pageSize</param-name>
         <param-value>10</param-value>
     </context-param>
     <context-param>
         <param-name>startIndex</param-name>
         <param-value>0</param-value>
     </context-param>
     <!--注意:以上的配置信息属于应用级的配置信息,一般一个项目中共享的配置信息会放到以上的标签当中。-->
     <!--如果你的配置信息只是想给某一个servlet作为参考,那么你配置到servlet标签当中即可,使用ServletConfig对象来获取。-->
    • servletcontext细节;

    // ServletContext对象还有另一个名字:应用域(后面还有其他域,例如:请求域、会话域)
     ​
     // 如果所有的用户共享一份数据,并且这个数据很少的被修改,并且这个数据量很少,可以将这些数据放到ServletContext这个应用域中
     ​
     // 为什么是所有用户共享的数据? 不是共享的没有意义。因为ServletContext这个对象只有一个。只有共享的数据放进去才有意义。
     ​
     // 为什么数据量要小? 因为数据量比较大的话,太占用堆内存,并且这个对象的生命周期比较长,服务器关闭的时候,这个对象才会被销毁。大数据量会影响服务器的性能。占用内存较小的数据量可以考虑放进去。
     ​
     // 为什么这些共享数据很少的修改,或者说几乎不修改?
     // 所有用户共享的数据,如果涉及到修改操作,必然会存在线程并发所带来的安全问题。所以放在ServletContext对象中的数据一般都是只读的。
     ​
     // 数据量小、所有用户共享、又不修改,这样的数据放到ServletContext这个应用域当中,会大大提升效率。因为应用域相当于一个缓存,放到缓存中的数据,下次在用的时候,不需要从数据库中再次获取,大大提升执行效率。
     ​
     // 存(怎么向ServletContext应用域中存数据)
     public void setAttribute(String name, Object value); // map.put(k, v)
     // 取(怎么从ServletContext应用域中取数据)
     public Object getAttribute(String name); // Object v = map.get(k)
     // 删(怎么删除ServletContext应用域中的数据)
     public void removeAttribute(String name); // map.remove(k)
     ​
     ​
  • 注意:以后我们编写Servlet类的时候,实际上是不会去直接继承GenericServlet类的,因为我们是B/S结构的系统,这种系统是基于HTTP超文本传输协议的,在Servlet规范当中,提供了一个类叫做HttpServlet,它是专门为HTTP协议准备的一个Servlet类。我们编写的Servlet类要继承HttpServlet。(HttpServlet是HTTP协议专用的。)使用HttpServlet处理HTTP协议更便捷。

  • 继承结构:

     jakarta.servlet.Servlet(接口)【爷爷】
     jakarta.servlet.GenericServlet implements Servlet(抽象类)【儿子】
     jakarta.servlet.http.HttpServlet extends GenericServlet(抽象类)【孙子】
     ​
     我们以后编写的Servlet要继承HttpServlet类。

HttpServlet

猜你喜欢

转载自blog.csdn.net/m0_64231944/article/details/129152936
今日推荐