Servlet: interfaz de modelo de un solo hilo

La interfaz del modelo de subproceso único se diseñó para garantizar que solo se ejecute un subproceso a la vez en un método de servicio de instancia de servlet determinado. Debe implementarse para garantizar que el servlet pueda manejar solo una solicitud a la vez. Es una interfaz de marcador y no tiene métodos. Una vez que se implementa la interfaz, el sistema garantiza que nunca haya más de un subproceso de solicitud accediendo a un servlet de instancia única. Esta interfaz está obsoleta actualmente porque no resuelve todos los problemas de seguridad de subprocesos, como la variable estática y los atributos de sesión pueden ser accedidos por múltiples subprocesos al mismo tiempo, incluso si implementamos la interfaz SingleThreadMode l. Es por eso que para resolver los problemas de seguridad de subprocesos, se recomienda utilizar unbloque sincronizado .

Sintaxis:

public class Myservlet  extends Httpservlet implements SingleThreadModel { 
}

Implementación: interfaz SingleThreadModel

Creamos tres archivos para hacer esta aplicación:

  1. índice.html
  2. miservlet.java
  3. web.xml

El archivo index.html crea un enlace para invocar el servlet del patrón de URL «servlet1» y la clase Myservlet amplía HttpServlet e implementa la interfaz SingleThreadModel. Class Myservlet es un servlet que maneja requests individuales en un solo momento y sleep() es un método estático en la clase Thread que se usa para suspender la ejecución de un hilo durante dos mil milisegundos. Cuando otro usuario intenta acceder al mismo servlet, se crea la nueva instancia en lugar de usar la misma instancia para varios subprocesos.

A. Archivo: index.html

HTML

<!DOCTYPE html>
<html>
<head>
     <title>HttpSession Event Listeners</title>
</head>
<body>
     <a href="servlet1">open the servlet</a>
</body>
</html>

B. Archivo: Myservlet.java

Java

// Java Program to Illustrate MyServlet Class
 
// Importing required classes
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Class
public class MyServlet
    extends HttpServlet implements SingleThreadModel {
 
    // Method
    // Use doGet() when you want to intercept on
    // HTTP GET requests
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
        // Sets the content type of the response being sent
        // to the client
        response.setContentType("text/html");
 
        // Returns a PrintWriter object that can send
        // character text to the client
        PrintWriter out = response.getWriter();
 
        out.print("welcome");
 
        // Try block to check for exceptions
        try {
            // Making thread to sleep for 2 seconds
            Thread.sleep(2000);
        }
 
        // Catch block to handle exceptions
        catch (Exception e) {
            // Display exception/s with line number
            e.printStackTrace();
        }
 
        out.print(" to servlet");
 
        // Closing the output stream
        // using close() method
        out.close();
    }
}

 
C. Archivo: web.xml 

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <servlet>
  <servlet-name>MyServlet</servlet-name>
    
  <servlet-class>MyServlet</servlet-class>
    
 </servlet>
 <servlet-mapping>
    
  <servlet-name>MyServlet</servlet-name>
    
  <url-pattern>/servlet1</url-pattern>
 </servlet-mapping>
   
 <welcome-file-list>
    
  <welcome-file>index.html</welcome-file>
    
 </welcome-file-list>
   
</web-app>

Salida: cuando ejecute su archivo index.html, verá los siguientes resultados.

Para obtener la salida, haga clic en el enlace.

Inconveniente de la interfaz SingleThreadModel

  • Cuando hay miles de requests simultáneas al contenedor web, el contenedor puede serializar requests a la misma instancia del servlet o crear esa cantidad de instancias.
  • En el primer caso, la capacidad del contenedor para procesar requests simultáneas se verá gravemente obstaculizada debido a la serialización.
  • En el último caso, el contenedor encuentra más asignación de objetos (más sobrecarga de creación de objetos y uso de memoria).

Publicación traducida automáticamente

Artículo escrito por sameerhakeentc2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *