¿A qué cuestiones se debe prestar atención en la programación de servlets?
Detalles a prestar atención en el desarrollo de Servlet
Cuando el cliente accede al servidor, accede a él a través de la URL, por lo que cuando queramos utilizar el navegador para acceder a nuestro Servlet, Necesitamos asignar nuestro servlet a una URL (a través de las dos subetiquetas lt;servler-mappinggt; y lt;url-patterngt; en nuestro archivo web.xml para implementar la configuración de URL, lt;Servletgt; la etiqueta es para registrar un servlet. Solo después del registro podemos realizar el mapeo, y un registro puede mapear varios, por lo que un Servlet registrado se mapeará varias veces, es decir, se puede acceder a él mediante múltiples URL del navegador, y también podemos acceder a él agregando un sufijo. )
/*, /news/*, /*.do? Estas tres formas de mapeo logran funciones diferentes
/*: Se puede acceder a cualquier ruta
/news/*: Todas las rutas en una carpeta específica
/*.do: Todas las rutas con una extensión específica
¿Quién coincide primero?
Se emparejará quien tenga el mayor grado de coincidencia y se emparejará quien sea más similar. *.do tiene la prioridad más baja, dos principios.
Problema singleton del servlet: el servlet es una clase llamada por otros programas java. No puede ejecutarse de forma independiente en respuesta a múltiples solicitudes del cliente. Normalmente, el servlet solo creará un objeto de instancia una vez creado. residirá en la memoria y atenderá solicitudes posteriores hasta que se cierre la aplicación web, es decir, nuestro servlet finaliza cuando cerramos el navegador.
Cuando se accede al Servlet por primera vez, se carga en la memoria. En el futuro, la instancia atenderá cada solicitud y el método de servicio se llamará una vez en cada caso.
Qué problemas ocurrirán de esta manera: debido a que el servlet es un singleton, ocurrirán problemas de seguridad de subprocesos:
Por ejemplo: sistema de tickets (si varios usuarios comparten una variable, Es necesario implementar un mecanismo de sincronización. Si una variable no necesita compartirse directamente, se define directamente en doGet o doPost, por lo que no habrá problemas de seguridad de subprocesos)
Solución 1: use este objeto para. sincronizarlo (esto){} está empaquetado para implementar el mecanismo de sincronización.
Solución 2
Instrucciones para configurar lt; load-on-startupgt; en servlet:
Requisitos: Cuando nuestro sitio web se inicie, puede que requiera algunos datos que se inicializarán (como crear algunas tablas temporales) y, por ejemplo, nuestro sitio web tendrá algunas tareas que deberán completarse con regularidad (escribir registros con regularidad, enviar correos electrónicos con regularidad)
Solución: puede utilizar configuración Esta etiqueta luego combina algunos conocimientos relacionados con subprocesos para resolver el problema.
Primero explique
Ejemplo 1: Inicializar algunas cosas
Implementación: 1. Configurar la etiqueta
Ejemplo 2: enviar un correo electrónico cada 1 minuto
Implementación: 1. Crear un nuevo hilo 2. Llamar al hilo, configurar lt load-on-startupgt; ?init()?throws?ServletException?{
//?Pon?tu?código?aquí
System.out.println("Nuestro hilo ha comenzado" ); p>
EnviarEmail?send=new?EnviarEmail();
enviar.sendmail();
}paquete?com.lyw.servlet; >public?class?SendEmail?extends?Thread?{
public?void?sendmail(){
int?i=0;
mientras (verdadero ){
i;
¿intentar?{
Thread.sleep(10*1000);
}?catch (InterruptedException). ?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
System.out.println("Enviar " i "correo electrónico");
}
}
}lt; ;/load-on-startupgt;
¿Qué significan los números intercalados en nuestra etiqueta Esto significa que nuestro inicio es secuencial, porque en el desarrollo real debemos inicializar múltiples objetos, por lo que usamos números aquí para indicar la secuencia de inicio. 5. Objeto ServletConfig Este objeto se utiliza principalmente para leer información de configuración de Servlet, lt; init-paramgt lt; codificaciónlt;/param-namegt; lt;param-valuegt;utf-8lt;/param-valuegt; lt;/init-paramgt;package?com.lyw. importar?java.io.IOException; importar?java.io.PrintWriter importar?javax.servlet.ServletException; importar?javax.servlet.http.HttpServlet; importar?javax.servlet.http.HttpServletRequest; importar?javax.servlet.http.HttpServletResponse ¿public?class?FirstServlet?extends?HttpServlet?{ public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response) lanza?ServletException, ?IOException?{ response.setContentType("text/html"); String?encoding=this.getServletConfig().getInitParameter("codificación"); response.setCharacterEncoding(codificación); PrintWriter?out=response.getWriter(); out.print("La codificación es: " codificación); } public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response) lanza?ServletException,?IOException?{ doGet( request ,?response); } /** *?Inicialización?del?servlet.?lt;brgt; * *?@throws?ServletException?if?an ? error? ocurre */ public?void?init()?throws?ServletException?{ //?Pon?tu?código?aquí System .out.println("Nuestro hilo ha comenzado"); SendEmail?send=new?SendEmail(); send.sendmail(); } }< /p> Leer información de configuración, que solo puede ser leída por este Servlet. Sin embargo, si desea que todos los Servlets lean un determinado parámetro, debe configurarlo así: lt; contex-paramgt; la configuración bajo la etiqueta puede ser leída por cualquier Servlet. 6. Cómo modificar el archivo Servlet Ingrese a los asistentes en el directorio de complementos de myeclipse para buscar y encontrar el paquete jar correspondiente. Ábralo con el paquete comprimido y modifíquelo. quieras, simplemente guárdalo como quieras y cierra myeclipse cuando lo modifiques. Cita: enlace web