A principal função do servlet é processar solicitações de clientes e responder. Por esse motivo, para cada solicitação, o contêiner da web criará dois objetos antes de chamar o serviço (), a saber, httpServletRequest e httpServletResponse. Onde o httpServletRequest encapsula as mensagens de solicitação HTTP, o HTTPServletResponse encapsula as mensagens de resposta HTTP. Deve -se notar que, durante a operação do servidor da Web, cada servlet criará apenas um objeto de instância, mas todas as solicitações chamarão o Serviço (ServletRequest Req, ServletResponse Res) Método da instância do servlet. Aqui HttpServletRequest é uma subclasse do servletRequest, e HttpServletResponse é uma subclasse do servletResponse.
O diagrama de relação de herança da interface HttpServletRequest e HttpServletResponse é o seguinte:
1. HttpServletResponse
A interface httpServletResponse herda da interface ServletResponse. Como as mensagens de resposta HTTP são divididas em três partes: linha de status, corpo da mensagem de resposta e corpo da mensagem, a interface HttpServletResponse define um método para enviar um código de status de resposta, cabeçalho da mensagem de resposta e corpo de mensagem de resposta ao cliente. Embora existam muitos métodos na interface HTTPServletResponse, usamos apenas alguns usados com comum. Se você usar outros métodos, poderá ler o código -fonte ou as informações relacionadas da resposta.
Enviar funções relacionadas ao código de status
Método Descrição Public void setStatus (int sc) Defina o código de status para a mensagem de resposta. O servidor da Web gera uma linha de status com um código de status de 200 por padrão. Public void sendError (int sc) envia um código de status indicando a mensagem de erro. O segundo método também adiciona uma mensagem de texto para solicitar a descrição public void sendError (int sc, string msg)
Enviar funções relacionadas ao cabeçalho da mensagem de resposta
Método Descrição Public void addHeader (nome da string, valor da string) Defina o campo de cabeçalho da resposta HTTP, o nome especifica o nome do campo e o valor especifica o valor do campo. addHeader can add the response header field with the same name, setHeader will override the header field with the same name public void setHeader(String name, String value) public void setContentLength(int len) sets the size of the entity content of the response message, in bytes, that is, sets the value of the Content-Length field public void setContentType(String type) sets the MIME type of the Servlet output content, that IS, define o valor do campo de conteúdo do tipo public void setCharacterencoding (String charset) define a codificação do caractere de conteúdo de saída, ou seja, define o valor do campo do tipo conteúdo. Observe que a prioridade deste método é maior que a do setor de servlet do SetContentType Public Void (Localização da String) Redirecion
Enviar funções relacionadas ao corpo da mensagem de resposta
| método | ilustrar |
| Public ServletOutputStream GetOutputStream () | Obtenha o fluxo de saída de bytes de HttpServletResponse ServletOutputStram Type |
| public PrintWriter getWriter () | Obtenha o fluxo de saída do caractere servewwriter tipo de HttpServletResponse |
Saída chinesa Problema iluminado
Os dados em computadores são armazenados em forma binária; portanto, quando o texto é transferido, ocorrerá a conversão entre bytes de caracteres. A conversão entre caracteres e bytes é concluída através de uma tabela de pesquisa de código. O processo de conversão de caracteres em bytes é chamado de codificação, e o processo de conversão de bytes em caracteres é chamado de decodificação. Se as tabelas de código usadas para codificar e decodificar forem diferentes, ocorrerão problemas de código ilegal.
Nota: Ao codificar o fluxo de saída do caractere do objeto HTTPSERVletResponse, o padrão é a codificação ISO 8859-1. Esse método de codificação é incompatível com os chineses. Por exemplo, "China" será codificado como "63 63" (os caracteres que não podem ser encontrados na tabela de código ISO 8959-1 serão exibidos 63). Quando o navegador decodificar os dados recebidos, ele usará o GB2312 por padrão, decodificar "63" para "?", E o navegador decodificará os dois caracteres "China" para "??".
Exemplo de programa HTTPSERVletResponse
pacote zzz; importar java.io.ioException; importar java.io.printwriter; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServLeveLeQuest; Import javax.Servlet.http.HtPSLevensOnsOnsensport; Doget Solicitação (httpServletRequest, httpServletResponse resposta) lança ioexception {// Defina a codificação da mensagem de resposta, depois de comentar "China", o "Response.setContentTyPE de shinaTrtyPe (" text/html; charset = utf-8 "); impressão; DoPost (httpServletRequest Solicy, httpServletResponse resposta) lança ioexception {this.Doget (solicitação, resposta);Às vezes, você encontrará o problema de pular páginas regularmente. O campo de cabeçalho de atualização no HTTP pode notificar o navegador para atualizar automaticamente e pular para outras páginas dentro de um tempo especificado, e a página da web atualizará e pulará regularmente para a página especificada.
pacote zzz; importar java.io.ioException; importar java.io.printwriter; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServLeveLeQuest; Import javax.Servlet.http.HtPSLevensOnsOnsensport; Doget (solicitação httpServletRequest, httpServletResponse Response) lança ioexception {// Definir mensagem de resposta que codifica a resposta.setContentType ("text/html; charset = utf-8"); Response.setheader ("Refresh", "2; url = http: //www.baidu.com"); PrintWriter out = Response.getWriter (); out.println ("Olá China, pule para o Baidu em 2 segundos ..."); } @Override public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança IoException {this.Doget (solicitação, resposta); }}2. HttpServletRequest
A interface httpServletRequest herda a interface ServletRequest e é usada especificamente para mensagens de solicitação HTTP encapsuladas. Como as informações de solicitação HTTP incluem três peças: linha de solicitação, cabeçalho de solicitação e órgão de solicitação, a interface httpServletRequest define métodos relacionados para obter a linha de solicitação, o cabeçalho da solicitação e o corpo de solicitação.
Métodos relacionados para obter linhas de solicitação
| método | ilustrar |
| public string getMethod () | Obtenha métodos de solicitação HTTP, postar, obter, etc. |
| public string getRequesturi () | Obtenha a parte do nome do recurso na linha de solicitação |
| public string getQuerystring () | Obtenha a parte do parâmetro na linha de solicitação |
| public string getProtocol () | Obtenha o nome e a versão do protocolo na linha de solicitação, como HTTP 1.1 |
| public string getContextPath () | Obtenha o caminho pertencente ao aplicativo da web no URL da solicitação |
De fato, o método de linha de solicitação pode ser visto no nome do método, para que não o postem um por um aqui.
Métodos relacionados para obter cabeçalhos de mensagem de solicitação
| método | ilustrar |
| public string getheader (nome da string) | Obtenha o valor do campo especificado, se nenhum nulo for retornado, se houver vários retornos, o primeiro valor |
| enumeração pública <string> getheaders (nome da string) | Retorna um objeto de coleta de enumeração com o campo especificado |
| enumeração pública <string> getheaderNames () | Retorna um objeto de coleta de enumeração que contém todos os campos |
| public string getContentType () | Obtenha o valor do campo do tipo conteúdo |
Imprima todos os valores do campo de cabeçalho de solicitação
package zzz;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Hello extends HttpServlet {@Override public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança ioexception {// Definir mensagem de resposta codificação Response.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); Enumeração <string> nomes = request.getHeaderNames (); while (names.hasMoreElements ()) {string name = names.nextElement (); String value = request.getheader (nome); out.println (nome + ":" + valor + "</br>"); }} @Override public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança ioexception {this.Doget (request, resposta); }}Métodos relacionados para obter o corpo de solicitação
Método Descrição Public ServletInputStream getInputStream () Obtém o objeto ServletInputStream solicitado. Se o conteúdo da entidade não for de texto, você só poderá obter o corpo da mensagem do corpo do pedido através do método GetInputStream. O BufferReader solicitado getReader () obtém o objeto Bufferer Reader solicitado. Este objeto converterá os dados de byte de conteúdo da entidade em uma sequência de texto codificada pelo conjunto de caracteres especificado.
Obtenha parâmetros de solicitação
| método | ilustrar |
| public string getParameter (nome da string) | Obtenha o valor do parâmetro especificado e retorne nulo sem este parâmetro |
| enumeração pública <string> getParameterNames () | Retorna um objeto de enumeração contendo todos os nomes de parâmetros |
| public string [] getParameTervAluas (nome da string) | Pode haver vários mesmos parâmetros na solicitação HTTP para obter todos os valores de parâmetros correspondentes ao mesmo nome de parâmetro. |
3. Interface requestDispatcher
Quando um recurso da Web é solicitado pelo cliente, se você deseja que o servidor notifique outro recurso, como o processamento de uma solicitação, além de usar a função sendRedirect () para implementar o redirecionamento, ele também pode ser implementado através do objeto de instância da interface RequestDispatcher. Um método para obter o objeto RequestDispatcher é definido na interface ServletRequest - GetRequestDispatcher (String Path), que retorna o objeto RequestDispatcher do recurso especificado por um determinado caminho. O caminho do parâmetro deve começar com "/" para representar o diretório raiz do aplicativo Web atual, ou seja, o caminho do caminho deve estar neste programa da Web, caso contrário, ocorrerá uma exceção.
Métodos na interface RequestDispatcher
| método | Função |
| Public Void Forward (Solicitação de ServletRequest, Resposta de Serviço -Responsabilidade) | Passe um servlet para outro recurso da web e passe a solicitação para outro recurso para resposta |
| vazio público incluir (Solicitação de servletRequest, resposta servletResponse) | Usado para incluir outros recursos como conteúdo de resposta atual |
O exposto acima é a explicação detalhada dos exemplos de solicitação e resposta da Web Java introduzidos pelo editor. Espero que seja útil para todos!