首页 > 其他分享 >Servlet 上

Servlet 上

时间:2023-09-08 18:34:20浏览次数:35  
标签:String 对象 Servlet void init ServletConfig

Servlet

1.什么是Servlet

Servlet即Server Applet是运行在Web服务器端的小程序

2.创建Servlet的三种方式

注意:从Tomcat10.0以后,我们统一用 jakarta.servlet包

  • 实现Servlet接口
public class Test implements Servlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
  • 继承GenericServlet类
public class Test extends GenericServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        
    }
}
  • 继承HttpServlet类
public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

这里只简单的介绍创建Servlet的三种方式,接下来会详细介绍

3.注册Servlet

在注册Servlet后,我们需要将Servlet与web.xml配置

以下为web.xml中的配置信息,我们将请求路径与每个Servlet类关联起来

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <!--Servlet名字-->
    <servlet-name>Demo</servlet-name>
    <!--servlet的文件路径,有包名必须带包名-->
    <servlet-class>com.Red.servlet.Demo</servlet-class>
  </servlet>

  <!--servlet镜像-->
  <servlet-mapping>
    <!--Servlet名字-->
    <servlet-name>Demo</servlet-name>
    <!--url访问地址,这个Servlet在浏览器中地址应为 http://localhost:8080/Servlet_war/Demo -->
    <url-pattern>/Demo</url-pattern>
  </servlet-mapping>

</web-app>

4.Servlet的接口方法与生命周期

1.接口方法

(1)init()方法可以进行一些前置加载

void init(ServletConfig var1)

(2)service()方法可以在Web服务器发送请求时执行,可以添加请求和回复

void service(ServletRequest var1, ServletResponse var2)

(3)dstroy()方法会在Web服务器关闭时执行,并在随后销毁Servlet对象

void destroy()

(4)getServletConfig()方法会获取一个ServletConfig对象,此对象是由init方法执行而自动被new出来的

ServletConfig getServletConfig()

(5)getServletInfo()方法会返回Servlet信息,如版本号,作者,版本信息等等……

String getServletInfo()

2.Servlet在WebServer中的储存

首先以Tomcat为例,我们通常叫Tomcat为Web容器,更是一个运行Servlet的平台。Servlet对象被容器管理。

我们自己new的Servlet是不受容器管理的,且此对象与容器的Servlet对象是不同的,前者仅仅是一个普通对象。Web容器会将ta创建的Servlet对象放进一个集合(HashMap)之中,只有在集合里的对象才能被Web容器管理(自己new的不在容器内)。

  • Web容器底层应有一个HashMap这样的集合,ta会储存Servlet对象和请求路径之间的关系

3.Servlet的生命周期

  • 在WebServer启动时,容器为了节省资源并不会实例化Servlet对象。当我们要使用某个Servlet对象时并且向服务器发送请求,容器会根据请求的路径Key去容器底层的集合中按照Key来获取Value(Servlet对象),此时Servlet对象被创建。
  • 同时Servlet对象会自动调用init方法完成一些前置
  • 随后Service()方法会调用,处理请求与响应
  • 最后服务器关闭时,Servlet对象会调用Destroy()方法,然后Servlet对象会自动销毁

综上所述:我们也可以看到Servlet是一个单例。


4.提前让Servlet对象被创建出来

我们可以让Servlet对象在服务器启动时就被创建出来

  <servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>com.Red.servlet.Demo</servlet-class>
      
    <!--在Servlet标签中使用<load-on-startup>让Servlet对象提前创建出来-->
    <load-on-startup>1</load-on-startup>
      
  </servlet>

5.Generic用适配器改造Servlet(adapter)

避免重复的实现方法,我们只需要重要的方法。

如我们只需要重写Service方法:

public class Demo extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello World!!");
    }
}

关于Servlet中关于init()方法在适配器中的重写。

    //成员变量
    private ServletConfig servletConfig;

    //实例方法

    /**
     * Servlet初始化操作,我们将此方法设为final,不允许任何人重写。
     * @param servletConfig Tomcat自动传入一个ServletConfig对象,我们将传入的ServletConfig对象赋值给成员变量
     * @throws ServletException Servlet异常
     */
    @Override
    public final void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig = servletConfig;
        this.init();
    }

    /**
     * 如果我们的确有重写init()方法的需求,我们可以重写无参的init().我们将无参的init()方法加入有参的init(ServletConfig servletConfig)中
     * 无需担心,我们不会在init()方法中使用ServletConfig,ServletConfig在此无使用场景
     */
    public void init(){
        
    }

    /**
     * 通过此方法我们将拿到私有成员变量
     * @return 将私有的成员变量当作返回值返回
     */
    @Override
    public ServletConfig getServletConfig() {
        return this.servletConfig;
    }

6.ServletConfig对象

ServletConfig对象为Servlet对象的配置信息对象,在WebServer启动之初,服务器会将web.xml文件中Servlet标签的配置信息封装进ServerConfig对象中。

因此每个Servlet对象都有各自的ServletConfig对象,每个ServletConfig对象会把ta的Servlet标签包装

1.<init-param>标签

我们可以在web.xml中使用标签配置一些初始化信息如:我们可以配置一些JDBC信息

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
    
<!--Servlet标签-->
  <servlet>
    <servlet-name>Demo</servlet-name>
    <servlet-class>com.Servlet.Demo</servlet-class>
      
<!--Servlet初始化信息 <init-param>来连接数据库 -->
    <init-param>
      <param-name>Driver</param-name>
      <param-value>com.mysql.cj.jdbc.Driver</param-value>
    </init-param>

    <init-param>
      <param-name>Url</param-name>
      <param-value>jdbc:mysql://127.0.0.1:3306/wex</param-value>
    </init-param>

    <init-param>
      <param-name>User</param-name>
      <param-value>Root</param-value>
    </init-param>

    <init-param>
      <param-name>Password</param-name>
      <param-value>123456</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Demo</servlet-name>
    <url-pattern>/Demo</url-pattern>
  </servlet-mapping>
</web-app>

2.ServletConfig接口方法

获取Servlet配置信息的Name

String getServletName();

获得一个ServletContext对象

ServletContext getServletContext()

获取Servlet配置信息 ,通过name获取value

String getInitParameter(String var1)

获取Servlet配置信息 中的所有name,并返回一个Enumeration集合

Enumeration<String> getInitParameterNames()

7.ServletContext对象

ServletContext对象对应着整个Web.xml配置信息,对于一个Webapps来说ServletContext对象只有一个,ta是Servet对象上下文/环境对象

所以放在ServletContext对象中的数据,所有Servlet对象是共享的。ta在服务器启动时产生,关闭时销毁。

上下文的ServletContext的配置

<!--配置ServletContext-->
  <context-param>
    <param-name>page-size</param-name>
    <param-value>20</param-value>
  </context-param>

1.ServletContext接口方法

获取Web.xml里的value

String   getInitParameter(String var1)

获取Web.xml里的所有name集合

Enumeration<String>   getInitParameterNames()

获取应用的根路径

String	getContextPath()

获取我们传入文件在系统的绝对路径

String	getRealPath(String  path)

记录日志,同时日志也会越来越大,服务器调优很重要

void log(String message, Throwable t)
    
void log(String msg)

ServletContext应用域:在其中存入所有用户共享的少量数据,基本不可修改。(当作缓存)

往ServletContext应用域存数据

void	setAttribute(String  name,Object  obj)

获取ServletContext应用域数据

Object	getAttribute(String  name)

删除ServletContext应用域中的数据

void	removeAttribute(String  name)

标签:String,对象,Servlet,void,init,ServletConfig
From: https://www.cnblogs.com/wery999/p/17688300.html

相关文章

  • springmvc中的json数据转为字符串使用到的jar包,将servlet设置为bean对象
    2023-09-08<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version></dependency>ServletConfigp......
  • 致远OA wpsAssistServlet 任意文件上传漏洞
    漏洞描述致远OAwpsAssistServlet接口存在任意文件上传漏洞,攻击者通过漏洞可以发送特定的请求包上传恶意文件,获取服务器权限影响版本致远OAA6、A8、A8N(V8.0SP2,V8.1,V8.1SP1)致远OAG6、G6N(V8.1、V8.1SP1)漏洞复现fofa语法:app="致远互联-OA"&&title="V8.0SP2"登录页面......
  • servlet,jsp,jstl用到的依赖与brand.jsp简单案例
    2023-09-03<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">&......
  • javaweb中servlet的使用案例,登录、注册
    2023-09-03注册packagecom.hh.web;/***@authorhh*@version1.0*@DATE2023-09-0314:56:28*/importcom.hh.mapper.UserMapper;importcom.hh.pojo.User;importcom.hh.util.SqlSessionFactoryUtil;importorg.apache.ibatis.io.Resources;importorg.a......
  • jsp 和 servlet 有什么区别?
    JSP(JavaServerPages)和Servlet是JavaWeb开发中的两个重要技术。它们都运行在服务器端,并用于生成HTML页面,但它们在设计和使用上有一些区别。基础:Servlet:Servlet是Java类,用于扩展服务器的功能。它允许开发人员通过编程方式生成动态Web页面。JSP:JSP是一种基于......
  • org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan(Lorg/apache/tomcat/
    原因<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>3.1.3</version></dependency>解决<dependency>......
  • SpringBoot复习(39)Servlet容器的自动配置原理
    Servlet容器自动配置类为ServletWebServerFactoryAutoConfiguration可以看到通过@Import注解导入了三个配置类:通过这个这三个配置类可以看出,它们都使用了@ConditionalOnClass注解,当类路径存在tomcat相关的类时,会配置一个TomcatServletWebServerFactory类型的bean,当类路径存在je......
  • SpringBoot复习:(41)配置文件中配置的server开头的属性是怎么配置到Servlet容器中起作用
    ServletWebServerFactoryAutoConfiguration类:可以看到其中使用了@EnableConfigurationProperties导入了ServerProperties而ServerProperties通过使用@ConfigurationProperties注解导入了配置文件中已server开头的那些配置项。可以看到ServletWebServerFactory定义了一个类型为Se......
  • springmvc 开启异步请求报错 Java code using the Servlet API or by adding "true"
    报错内容:java.lang.IllegalStateException:Asyncsupportmustbeenabledonaservletandforallfiltersinvolvedinasyncrequestprocessing.ThisisdoneinJavacodeusingtheServletAPIorbyadding"true"toservletandfilterdeclarationsin......
  • servlet
    一、简介sun公司开发动态web接口的一门技术sun在这些api中提供一个接口叫做:servlet,如果想开发一个servlet程序,只需要完成两个小步骤:1.编写一个类实现selvlet接口,2.把开发好的java类部署到web服务器中构建一个普通的maven项目,删掉里面的src目录,以后我们学习就在这个项目里面建立moud......