Vamos dar uma olhada em um fluxograma:
O processo de solicitações de processamento de servidor:
(1) Sempre que o servidor recebe uma solicitação, ele abrirá um novo thread para a solicitação.
(2) O servidor encapsulará os dados de solicitação do cliente no objeto de solicitação e a solicitação é a transportadora dos dados da solicitação!
(3) O servidor também criará um objeto de resposta, conectado ao cliente e pode ser usado para enviar uma resposta ao cliente.
Como pode ser visto no fluxograma, na solicitação e resposta de Javaweb, os dois parâmetros mais importantes são solicitações e resposta, que estão no método Service () do servlet.
1. Conceito de resposta:
A resposta é um parâmetro do método servlet.Service e é do tipo javax.servlet.http.httpServletResponse. Quando o cliente faz cada solicitação, o servidor cria um objeto de resposta e o passa para o método servlet.service (). O objeto de resposta é usado para responder ao cliente, o que significa que o uso do objeto de resposta no método Service () pode concluir o trabalho de resposta ao cliente.
As funções do objeto de resposta são divididas nos quatro tipos a seguir:
(1) Defina as informações do cabeçalho da resposta
(2) Enviar código de status
(3) Defina o texto de resposta
(4) Redirecionar
2. Texto de resposta de resposta
A resposta é um objeto de resposta. O fluxo de resposta do corpo de resposta (corpo de resposta) pode ser usado para gerar o corpo de resposta para o cliente. Repsonse fornece um total de dois objetos de fluxo de resposta:
(1) PrintWriter out = Response.getWriter (): Obtenha fluxo de caracteres;
(2) servletOutputStream out = Response.getOutputStream (): obtenha o fluxo de bytes;
Obviamente, se o conteúdo do corpo da resposta for um caractere, use o resposta.getWriter () e se o conteúdo da resposta for bytes, por exemplo, ao fazer o download, poderá usar o resposta.getOutputStream ().
Observe que, em uma solicitação, ambos os fluxos não podem ser usados ao mesmo tempo! Ou seja, você usa o Responder.getWriter () ou Response.getOutputStream (), mas não pode usar os dois fluxos ao mesmo tempo. Caso contrário, uma ilegalStateException será lançada.
3. Defina as informações do cabeçalho da resposta
Você pode usar o método setheader () do objeto de resposta para definir o cabeçalho da resposta! O conjunto de cabeçalho de resposta usando esse método será enviado ao navegador do cliente!
(1) Response.setheader ("conteúdo-tipo", "text/html; charset = utf-8"): defina o cabeçalho da resposta do tipo conteúdo. A função deste cabeçalho é dizer ao navegador que o conteúdo da resposta é do tipo HTML e codificado como UTF-8. E, ao mesmo tempo, a codificação do fluxo de caracteres da resposta será definida como UTF-8, ou seja, Response.SetcharAceterEncoding ("UTF-8");
(2) Response.setheader ("Refresh", "5; url = http: //www.baidu.com"): ele automaticamente pulará para a página inicial do Baidu após 5 segundos.
4. Defina o código de status e outros métodos
(1) Response.setContentType ("Texto/html; charset = utf-8"): equivalente a chamar a resposta.
(2) Response.Setcharacterencoding ("UTF-8"): Defina a codificação do caractere do fluxo de resposta do caractere como UTF-8;
(3) Response.SetStatus (200): Defina o código de status;
(4) Response.sendError (404, "O recurso que você está procurando não existe"): Ao enviar um código de status de erro, o TomCat pulará para uma página de erro fixa, mas a mensagem de erro pode ser exibida.
5. Redirecionar (****** Key *******)
5.1 O que é redirecionamento (dois pedidos)
Ao visitar http://www.sun.com, você descobrirá que o URL na barra de endereços do navegador se tornará http://www.oracle.com/us/sun/index.htm, que é o redirecionamento. O redirecionamento é quando o servidor notifica o navegador para acessar outro endereço, ou seja, para emitir outra solicitação.
5.2 Como concluir o redirecionamento?
Resposta: O código de status para redirecionamento é 302. Primeiro, usamos o objeto de resposta para enviar o código de status de 302 para o navegador e depois definimos um local, ou seja, fornecemos um URL disponível e o navegador acessa o novo URL para realizar o redirecionamento.
Por exemplo:
classe pública Asvlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {Response.setStatus (302); Response.setheader ("Localização", "http://www.baidu.com"); }}O objetivo do código acima é: Depois de acessar o ASVERTLE, o navegador será notificado para redirecionar para a página inicial do Baidu. Depois que o navegador do cliente analisa o código de resposta de 302, ele sabe que o servidor permite redirecionar, para que obtenha imediatamente o local do cabeçalho da resposta e emitirá uma segunda solicitação.
Há também um método de redirecionamento rápido, ou seja, use o método Response.SendRedirect (). Por exemplo, as duas frases no exemplo acima podem ser substituídas por Response.sendRedirect ("http://www.baidu.com").
solicitar-encapsula todos os dados de solicitação do cliente
1. Visão geral da solicitação
A solicitação é um parâmetro do método servlet.service () e é do tipo javax.servlet.http.httpServletRequest. Quando o cliente fizer cada solicitação, o servidor criará um objeto de solicitação e encapsulará os dados da solicitação na solicitação e depois o passará para o método Service () quando o método servlet.service () for chamado, que mostra que os dados de solicitação podem ser obtidos através do método do objeto Solicitação no método Service ().
Como mostrado na figura:
A função da solicitação pode ser dividida nos seguintes tipos:
(1) encapsular os dados do cabeçalho da solicitação;
(2) encapsular os dados de texto da solicitação. Se for uma solicitação GET, não há texto;
(3) a solicitação é um objeto de domínio, que pode ser adicionado e recuperado como um mapa;
(4) A solicitação fornece funções de inclusão e inclusão de solicitação de solicitação.
2. Método de domínio de solicitação
A solicitação é um objeto de domínio! Existem quatro objetos de domínio em Javaweb, entre os quais o ServletContext é um objeto de domínio, que só cria um objeto ServletContext em todo o aplicativo. Solicite uma das solicitações, que podem compartilhar dados em uma solicitação.
Uma solicitação cria um objeto de solicitação. Se vários servlets foram experimentados em uma solicitação, vários servlets podem usar solicitações para compartilhar dados. Agora não sabemos como passar por vários servlets em um pedido.
Aqui está o método de solicitação de domínio:
(1) void setAttribute (nome da string, valor do objeto): Usado para armazenar um objeto, ele também pode ser chamado de armazenamento de um atributo de domínio, por exemplo: servletContext.setAttribute ("xxx", "xxx"), um atributo de domínio é salvo na solicitação, o nome do domínio é xxx e o valor do domínio do domínio do domínio é xxx. Observe que, se o método for chamado várias vezes e o mesmo nome for usado, o último valor será substituído, o mesmo que o mapa;
(2) Objeto GetAttribute (Nome da String): Usado para obter os dados na solicitação. Ele precisa ser armazenado antes de obtê -lo. Por exemplo: String value = (String) request.getAttribute ("xxx"); Para obter o atributo de domínio chamado xxx;
(3) Void removeattribute (nome da string): usado para remover o atributo de domínio na solicitação. Se o atributo de domínio especificado pelo nome do parâmetro não existir, esse método não fará nada;
(4) enumeração getAttributenames (): obtenha os nomes de todos os atributos de domínio;
3. Passe os parâmetros por solicitação
Existem duas maneiras mais comuns de passar os parâmetros ao cliente:
(1) entrada direta da barra de endereços do navegador: deve ser uma solicitação GET;
(2) hiperlink: deve ser uma solicitação de obter;
(3) formulário: pode ser obtido ou postagem, que depende do valor do atributo de método de <form>;
A diferença entre solicitação de get e solicitação de postagem:
(1) Obtenha solicitação:
Os parâmetros de solicitação serão exibidos na barra de endereços do navegador, por isso não é seguro;
O limite de comprimento do parâmetro de solicitação está dentro de 1k;
A solicitação GET não possui órgão de solicitação; portanto, a codificação do parâmetro não pode ser definida através da solicitação.SetchAracterencoding ();
(2) Solicitação de postagem:
Os parâmetros de solicitação não exibirão a barra de endereços do navegador, que é relativamente segura;
Não há limite no comprimento do parâmetro solicitado;
4. Solicite o encaminhamento e a inclusão de solicitar (****** chave *******)
Seja um encaminhamento de solicitação ou uma inclusão de solicitação, significa que vários servlets lidam em conjunto com uma solicitação. Por exemplo, o Servlet1 lida com a solicitação e, em seguida, o Servlet1 a encaminha para o Servlet2 para continuar processando a solicitação.
Solicitar encaminhamento e solicitação, incluindo
RequestDispatcher rd = request.getRequestDispatcher ("/myServlet"); Use a solicitação para obter o objeto RequestDispatcher. O parâmetro do método é o caminho do servlet do servlet encaminhado ou contido.
Solicitação de encaminhamento: rd.forward (solicitação, resposta);
A solicitação inclui: rd.include (solicitação, resposta);
Às vezes, uma solicitação requer vários servlets para colaborar, então você precisa pular em um servlet para outro!
> Uma solicitação abrange vários servlets e requer encaminhamento e inclusão.
> Encaminhamento de solicitação: o corpo de resposta é concluído pelo próximo servlet! O servlet atual pode definir o cabeçalho da resposta! (Deixe a cabeça, mas não o corpo), ou seja, a cabeça correspondente definida pelo servlet atual é válida e o corpo correspondente é inválido.
> A solicitação contém: O corpo de resposta não é concluído por dois servlets! (Fique tudo) todos são válidos.
> Seja um encaminhamento de solicitação ou uma solicitação que contém, está dentro do escopo de uma solicitação! Use o mesmo pedido e resposta!
O encaminhamento e solicitação de solicitação incluem comparação:
(1) Se a solicitação for encaminhada para o BServlet no ASVERVLE, o corpo de resposta não poderá ser produzido no ASERVLET, ou seja, a resposta.getWriter () e Response.getOutputStream () não poderão mais ser emitidos para o cliente. Este trabalho deve ser feito pelo BServlet; Se for usado para incluir a solicitação, não existe essa restrição;
(2) Embora o encaminhamento da solicitação não possa emitir o corpo da resposta, o cabeçalho da resposta ainda pode ser definido, por exemplo: Response.SetContentType ("Texto/html; charset = utf-8");
(3) a maioria das solicitações é aplicada nas páginas JSP para concluir a mesclagem de várias páginas;
(4) o encaminhamento de solicitação é aplicado principalmente em servlets, e o alvo de encaminhamento é principalmente páginas JSP;
Como mostrado na figura:
Comparação do encaminhamento e redirecionamento de solicitação
(1) o encaminhamento de solicitação é uma solicitação, enquanto o redirecionamento são duas solicitações;
(2) Após o encaminhamento da solicitação, a barra de endereços do navegador não mudará, mas o redirecionamento mudará, porque o redirecionamento são duas solicitações;
(3) o alvo de solicitar o encaminhamento pode ser apenas os recursos neste aplicativo, e o alvo de redirecionamento pode ser outros aplicativos;
(4) o método de encaminhamento de solicitação para asvlet e bservlet é o mesmo, ou seja, ambos são ou ambos são postagens, porque o encaminhamento de solicitação é uma solicitação;
(5) o segundo pedido de redirecionamento deve ser obtido;
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.