En este artículo se introducirá servlet de componentes con su flujo de trabajo, ciclo de vida, Solicitud / Respuesta de objetos básico.
Primero con sus palabras blancas decir que su comprensión del servlet, servlet está presente en los componentes del servidor web que puede manejar las solicitudes del usuario se envían al servidor en su navegador y luego procesa la solicitud para devolver los resultados de los datos requeridos por el usuario, desde una consulta de base de datos los datos que se muestran en la página, pero este tipo de páginas de visualización de datos dinámicos llamados página JSP, Servlet utilizarse en conjunción con la página JSP para satisfacer todas las necesidades del usuario.
La cifra es el flujo de interacción con el cliente y el servidor:
tres maneras de crear formas de servlet
- Crear una clase que implementa la interfaz Servlet
- Crear una clase, clase heredada HttpServlet
- Utilizando el IDE crea directamente servlet, servlets y registro
servlet dos tipos de registro
- En la versión 3.0 o superior del proyecto puede utilizar @WebServlet ( "/") ××× notas registradas
- Puede configurar <servlet> en web.xml versión 3.0 registrado en el proyecto
ciclo de vida del servlet
- Los ejemplos de la operación de inicialización Servlet- - Servicio - devuelve resultados - Destrucción - de recuperación
- Ejemplos del servlet (monomodo Ejemplo servlet)
donde a: la primera solicitud Servlet, por ejemplo operación de
caso 2: el inicio del servidor, operación instanciada
archivo de configuración Servlet se añade a la web.xml <load-on-startup>
ser proporcionado ejemplo servlet de prioridad, la prioridad más alta cuanto menor es el valor, de la forma:
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>cn.hp.servlet.LifeServlet</servlet-class>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
-
servlet inicialización
operación de inicialización inmediatamente instanciado, ejecutado sólo una vez, llama automáticamente al método init () -
Solicitud de procesamiento de servlet
de servicio de devolución de llamada automática de métodos, dos objetos pasan HttpServletRequest y HttpServletRespose, método de servicio () toma una petición de usuario, en respuesta al resultado de procesamiento de
la forma a: servicio de anulación ()
Segunda forma: método de reemplazo doGet () / doPost () -
servlet destruir
rellamada automática destruir () método, Servlet liberar automáticamente los recursos actualmente ocupados por la aplicación actual se termina, se retira desde el servidor, el servidor deja desencadenó destruir ()
La interfaz Servlet núcleo
1. HTTPServletRequest
Solicitud objeto encapsula todo el paquete de petición de datos se utiliza generalmente para obtener los datos que llegan desde el cliente. Ciclo de vida de una petición, si la solicitud se reenvía también identificó como una solicitud debido a que la solicitud se reenvía con el objeto response pasado a otro servlet al mango.
solicitud de adquisición de datos Método:
- valor String = request.getParameter (String key);
- String [] Valor = request.getParameterValues (String key);
- Mapa <String, String []> MAP = request.getParameterMap ();
Los métodos más comunes:
método | efecto |
---|---|
Galleta [] getCookies () | Todos los Cookies solicitó objeto y devuelve una matriz de galletas |
HttpSession getSession () | Devuelve la sesión actual asociado con la solicitud de sesión |
Cadena getContextPath () | Volver Solicitud porción URI indica el contexto solicitado |
Cadena getMethod () | Devuelve el método HTTP solicitado, o consiguen método post |
Cadena getQueryString () | Devuelve la cadena de consulta en la ruta de solicitud de URL |
Cadena getRemoteAddr () | Devolver la dirección IP del cliente envía una solicitud |
Remite la solicitud:
- Obtiene adelante el objeto de la petición
RequestDispatcher rd = getRequestDispathcher(String path);
- método de reenvío de llamadas
rd.forward(HttpServletRequest,HttpServletResponse);
o directamenterequest.getRequestDispatcher("path").forward(request, response);
2. HttpServletResponse
objeto de respuesta por un paquete de contenido en respuesta a los resultados del paquete de datos se puede encapsular objeto galleta, un conjunto de códigos de respuesta, la adición de la cabecera de respuesta, en respuesta de la misma; pura para el desarrollo servlet sin páginas JSP, a continuación, la respuesta puede páginas de salida y de empalme, parte inferior JSP es puede redirigir, de aquí en adelante se describirá la diferencia entre los procesos y remite la solicitud de redirección; splicing la página servlet.
Los métodos más comunes:
método | efecto |
---|---|
addCookie vacío (la galleta) | Agrega la cookie especificada a la respuesta |
setStatus vacío (int statu) | Para ajustar el código de estado en respuesta a |
setHeader vacío (String nombre, String value) | Establecer una cabecera de respuesta con un nombre y un valor dado |
addHeader vacío (String nombre, String value) | Agregar un encabezado de respuesta con un nombre y un valor dado |
sendRedirect vacío (cadena de ubicación) | Redirección URL ubicación especificada envía la respuesta de redirección temporal al cliente |
printWriter getWriter () | Obtener el flujo de salida de datos de caracteres |
ServletOutputStream getOutputStream () | La obtención de un flujo de salida de bytes de datos |
Redirigir la solicitud:
en uso general response.sendRedirect("新的Servlet地址");
, no es lo mismo redirección y expedición, la solicitud se reenvía a la respuesta servlet tanto al otro objeto para el procesamiento, el cliente no cambia la url; redirigida por definición, dada una redirección para permitir el acceso de los clientes, las circunstancias de los parámetros pasados a la solicitud en el conjunto no existe, el cliente accede al servidor varias veces, url va a cambiar; con la siguiente tabla para ilustrar:
3. HttpSession
sesión endoscopio es un objeto de sesión, puede ser entendida como que el usuario abra un navegador para acceder a un inicio del servidor, cierre el navegador para finalizar una sesión puede incluir múltiples solicitudes, la sesión puede establecer los parámetros dentro del alcance de la sesión para un usuario utilizar, el alcance más grande que el objeto de la petición, en la práctica, puede grabar la sesión de inicio de sesión de usuario de datos, por ejemplo, un usuario no está conectado quería visitar la página principal, en un servlet puede determinar la información de sesión, por lo que el usuario es redirigido a la página de inicio de sesión.
Los métodos más comunes:
método | efecto |
---|---|
getAttribute Objeto pública (String name) | Devuelve el objeto con el nombre especificado en la sesión de la sesión, no regresaron nula |
pública setAttribute void (String nombre, valor del objeto) | Este método utiliza el nombre especificado para enlazar un objeto a la sesión de la sesión |
public boolean isNew () | La sesión es determinar si el nuevo |
El siguiente es un inicio de sesión con éxito a la página principal para iniciar la sesión en el caso pequeño volvió a fracasar:
//该方法属于登录servlet类
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
Map<String, String[]> map = request.getParameterMap();
String userName = map.get("userName")[0];
String password = map.get("password")[0];
if (dao.login(userName, password) < 0) {
//登录失败
request.getRequestDispatcher("/page/login.jsp").forward(request, response);
} else {
//登录成功
session.setAttribute("userName", userName);
response.sendRedirect("/DynamicWebProject_AnimalManager_v3/animals?type=list");
}
}
//该方法属于主页面的servlet类
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
if (session.getAttribute("userName") == null) {
response.sendRedirect("/DynamicWebProject_AnimalManager_v3/page/login.jsp");
} else {
//业务代码
}
}
4. ServletContext
El objeto actual es un entorno de objeto de proyecto web (objeto de contexto), un contexto correspondiente a un objeto web del proyecto puede ser entendido como un objeto global, a partir del ámbito de servidor, se inicia el despliegue del proyecto, se cierra la del servidor de proyecto hacia abajo o se elimina, el objeto puede almacenar variables globales, por ejemplo, el número de visitas al sitio.
Get ServletContext
ServletContext context = this.getServletContext() //this表示某个servlet实例;
ServletContext context = config.getServletContext();
función
- La obtención de los parámetros globales de inicialización de aplicaciones web
String username = context.getInitParameter("username");
<context-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</context-param>
-
El almacenamiento de datos globales
del getAttribute ()
la setAttribute () -
Obtiene la ruta absoluta de los recursos de la aplicación web (entorno de despliegue para el proyecto actual)
String realPath = context.getRealPath("/");
5. ServletConfig
Este objeto se describe la información de configuración actual relacionada con el propio Servlet,
obtener
ServletConfig config = this.getServletConfig();
String value = config.getInitParameter(String key);
Función
Obtener datos re-inicializado en el servlet en web.xml actual:
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</init-param>
</servlet>
Obtener / modo de procesamiento de solicitudes Post y ilegible
-
datos ilegibles solicitan:
página de codificación:<meta charset="utf-8">
petición GET:String username = new String(username.getBytes("iso-8859-1"),"utf-8");
solicitud POST:request.setCharacterEncoding("utf-8");
-
Resultados de respuesta ilegible:
datos de la página HTML:response.setContentType(type);
datos de texto sin formato:response.setCharacterEncoding(charset);